View Full Version : آموزش: افزودن رکورد به جداولی که دارای فیلد Attachments هستند
Abbas Amiri
پنج شنبه 23 آذر 1391, 01:47 صبح
با سلام
سوالی که تابحال برای بسیاری از دوستان بی جواب مانده موضع فوق است .
دراین تاپیک سعی شده این مشکل حل شود . گرچه جای کار وتوسعه آن وجود دارد مباحثی مثل پیمایش در فایلهای ذخیره شده در یک فیلد Attachment (که قبلا در تاپیک دیگری برای یکی ازکاربران راههایی ارائه کرده بودم )
وهمچنین حذف بعضی ازآنها که بایستی بروی آن کارشود.
حال اگر دوستان برای بقیه موارد ویا تکمیل فایل زیر پیشنهاد ویا راهکاری دارند ، میتوانند ارائه دهند.
برای افزودن فایل به فیلد ضمایم که در فرم موجود درفایل زیر میباشد ، ازکادر محاوره ای که باز میشود ، فایل مورد نظر انتخاب تا به مجموعه فایلهای آن فیل اضافه شود .( حتما میدانید که در فیلد Attachment ازصفر تا چندین فایل میتوان گنجاند)
توضیح : رفرنس Microsoft Office Object Library بایستی اضافه شود.
abdoreza57
پنج شنبه 23 آذر 1391, 22:52 عصر
سلام
این امکان در نسخه های قبلی نیز وجود داره ؟ لطفا با فرمت 2003
Abbas Amiri
یک شنبه 26 آذر 1391, 21:26 عصر
سلام
این امکان در نسخه های قبلی نیز وجود داره ؟ لطفا با فرمت 2003
سلام
در ورژن 2007 به بعد میتوان از ازاین ویژگی استفاده کرد
ضمنا چرا کسی نظری ، پیشنهادی یا حتی ایرادی ارائه نمی کند . این همه سر این مسئله تا بحال پرس وجو بوده ، واین جواب برای آنها کافی نیست .
در پست اول فقط انتقال فایل به فیلد Attachment ازطریق VBA حل شده (تازه آن هم بصورت تک تک) و افزودن رکوردجدید لحاظ نشده است . همچنین مواردی که درپست اول ذکر شده و نیاز به آنها احساس میشود .
abdoreza57
یک شنبه 26 آذر 1391, 21:43 عصر
دلیلش واضحه
.
.
.
قدر زر زرگر شناسد قدر گوهر گوهری
عموما تا درگیر نشیم اقدام نمیکنیم ولی اون زمان معلوم نیست که چنین شرایطی فراهم بشه یا خیر
قدر لحظه ها را بدونید ...
abolfazlnabavi
یک شنبه 26 آذر 1391, 22:36 عصر
سلام
ما که مشتاقانه پست های شما(آقای امیری) را جهت یادگیری بیشتر دنبال می نماییم.
از انجا که با این موارد برخورد نکرده ایم وارد بحث نمی شویم.
خوبست این اینگونه موارد با همکاری دوستان ادامه یابد و به جمع بندی برسد.
موفق باشید
hamid-nice
سه شنبه 17 اردیبهشت 1392, 01:10 صبح
با سلام و ممنون از این تاپیک آموزشی خوبتون
چه تغییراتی باید در کد ها داد تا وقتی کلید درج را میزنیم و عکس جدید را انتخاب می کنیم روی عکس اولی جایگزین شود (به صورت یک عکس دوم به این فایل اضافه نشه ) در واقع می خوام از این فایل به عنوان ذخیره کننده فقط یک عکس استفاده کنم با قابلیت تغییر اون عکس نه فیلدی برای ذخیره چند عکس مختلف
با تشکر
hamid-nice
چهارشنبه 18 اردیبهشت 1392, 22:10 عصر
جناب امیری برای این مساله راه حلی ارائه نمی کنید ؟
Abbas Amiri
چهارشنبه 18 اردیبهشت 1392, 22:29 عصر
جناب امیری برای این مساله راه حلی ارائه نمی کنید ؟
متاسفانه فایلی رو که تحقیقات مفصلی در این مورد کرده بودم رونمیدونم چیکار کردم ، درصورت پیدا شدن مطالب آنرا دراختیار سایر کاربران قرار خواهم داد
Abbas Amiri
پنج شنبه 19 اردیبهشت 1392, 23:49 عصر
با سلام و ممنون از این تاپیک آموزشی خوبتون
چه تغییراتی باید در کد ها داد تا وقتی کلید درج را میزنیم و عکس جدید را انتخاب می کنیم روی عکس اولی جایگزین شود (به صورت یک عکس دوم به این فایل اضافه نشه ) در واقع می خوام از این فایل به عنوان ذخیره کننده فقط یک عکس استفاده کنم با قابلیت تغییر اون عکس نه فیلدی برای ذخیره چند عکس مختلف
با تشکر
تابع مندرج در فایل ضمیمه فوق را با کدهای زیر جایگزین کنید
Function AppendAttachmentRecord(frm As Form, fldAttachName As String, strAttachPath) As Boolean
Dim rst As DAO.Recordset2
Dim rsAttach As DAO.Recordset2
Dim fldData As Field2, varBookmark As Variant
Dim frmCtrl As Control, frmName As String
frmName = frm.Name
'frm("ID") = Nz(DMax("ID", frm.RecordSource), 0) + 1
'frm.Refresh
Set rst = frm.Recordset
varBookmark = rst.Bookmark
Set rsAttach = rst.Fields(fldAttachName).Value
Do Until rsAttach.EOF
rsAttach.Delete
rsAttach.MoveNext
Loop
Set fldData = rsAttach.Fields("filedata")
rst.Edit
rsAttach.AddNew
fldData.LoadFromFile strAttachPath
rsAttach.Update
rst.Update
frm.Refresh
DoCmd.Close acForm, frm.Name
DoCmd.OpenForm frmName
Forms(frmName).Bookmark = rst.Bookmark
rst.Close
Set rsAttach = Nothing
Set rst = Nothing
End Function
Abbas Amiri
جمعه 20 اردیبهشت 1392, 22:55 عصر
سلام یک نمونه جمع وجور وتکمیل تر از پست 1 برای استفاده دوستان قرار دادم :
hamid-nice
شنبه 21 اردیبهشت 1392, 11:09 صبح
با سلام و تشکر
جناب امیری از فایلی که گذاشتید ممنون
در آخرین پست امکانش هست که وقتی فایلی را می خواهیم ذخیره کنیم وقتی نام اون قبلا وجود داره پیغام overwrite را فارسی اعلام کنه چرا که الان error میده
با تشکر
Abbas Amiri
شنبه 21 اردیبهشت 1392, 19:22 عصر
با سلام و تشکر
جناب امیری از فایلی که گذاشتید ممنون
در آخرین پست امکانش هست که وقتی فایلی را می خواهیم ذخیره کنیم وقتی نام اون قبلا وجود داره پیغام overwrite را فارسی اعلام کنه چرا که الان error می ده
با تشکر
سلام
تابع زیر را جایگزین کنید:
Function AppendAttachmentRecord(frm As Form, fldAttachName As String, strAttachPath) As Boolean
On Error GoTo ErrAppendAttachments
Dim rst As DAO.Recordset2
Dim rsAttach As DAO.Recordset2
Dim fldData As Field2, varBookmark As Variant
Dim frmName As String
frmName = frm.Name
Set rst = frm.Recordset
varBookmark = rst.Bookmark
Set rsAttach = rst.Fields(fldAttachName).Value
Set fldData = rsAttach.Fields("filedata")
rst.Edit
On Error GoTo ErrAppendAttachments
rsAttach.FindFirst "FileName='" & GetFileFromPath(strAttachPath, NameAndExtention) & "'"
If rsAttach.NoMatch = False Then
If MsgBox("نام فايل تکراري است . مايليد جايگزين قبلي شود؟", vbCritical + vbYesNo + vbMsgBoxRight, "نام تکراري") = vbNo Then
GoTo ExitAppendAttachments
Else
rsAttach.Delete
End If
End If
rsAttach.AddNew
fldData.LoadFromFile strAttachPath
rsAttach.Update
rst.Update
ExitAppendAttachments:
frm.Refresh
DoCmd.Close acForm, frm.Name
DoCmd.OpenForm frmName
On Error Resume Next
Forms(frmName).Bookmark = rst.Bookmark
rst.Close
Set rsAttach = Nothing
Set rst = Nothing
Exit Function
ErrAppendAttachments:
MsgBox "خطاي شماره " & Err.Number & vbCr & Err.Description
GoTo ExitAppendAttachments
End Function
hamid-nice
چهارشنبه 25 اردیبهشت 1392, 19:34 عصر
با سلام جناب امیری
از کدهای بالا خیلی ممنون بسیار خوب بودند
در حال حاضر دو تا مساله دارم
1- چون در بسیاری از موارد از تابعی که در بالا برای فراخواندن عکس یا ذخیره سازی آن استفاده نمی کنیم و از ماژولی که در پیوست قرار دادم هم بهره می گیریم
آیا امکان ست کردن و بکار بردن این ماژول در موارد تعبیه شده در فایلهای فوق وجود دارد یا نه؟
ممنون می شم اگه امکانش هست این نمونه را نیز قرار دهید
2- درفایل ضمیمه دیگر یعنی Attachments در زیر وقتی فرم شما را به عنوان ساب فرم استفاده میکنیم دارای error های مختلفی می شه اگه محبت کنید و این مساله را بررسی بفرمایید خیلی ممنون می شم
با تشکر
masudafsar
چهارشنبه 01 خرداد 1392, 00:48 صبح
یکی به مبتدی هایی مثل من بگه که باید Reference اضافه کنیم تا ماژول کار کنه دیگه!
-------------------------> ماژول Microsoft Office 14.0 Object Library رو باید به فایل اضافه کرد.
hamid-nice
پنج شنبه 09 خرداد 1392, 02:27 صبح
با سلام
جناب امیری
آیا امکان این که در تکست باکس txtAttachNav اگر شماره (مثلا 3) فایل داخل attachment را بنویسیم
(یعنی به صورت : فایل 3 از 5 ) و enter کنیم به فایل مربوطه در داخل attachment برود؟ در حال حاضر عملی انجام نمی شود
با تشکر
hamid-nice
جمعه 10 خرداد 1392, 14:16 عصر
راهکاری که استفاده کردم به صورت زیر شد
به جای تکست باکس txtAttachNav از دوتا تکست باکس یکی برای نمایش تعداد ( به نام Text37 ) و دیگری شماره فایل جاری در Attachment ا (Text35)استفاده کردم و برای منظور فوق(پست قبلی)
در رویداد before update برای تکست باکس Texyt35 کدهای زیر را گذاشتم
Dim M As Integer
M = Me.Text35 - 1
attachFile.CurrentAttachment = M
Me.Text35.SetFocus
توجه : attachFile نام فیلد Attachment در فرم هست و تغییری نکرده
(باز هم با تشکر از جناب امیری که با آموزش روی کار با فیلدهای Attachment دستمون را در بکارگیری اونها و حتی کاربرد های جانبی از اونها در بسیاری از موارد ، باز کردند )
hamid-nice
جمعه 10 خرداد 1392, 18:49 عصر
پست بالا را به صورت زیر اصلاح و تکمیل می کنم به طوریکه علاوه بر کد های فوق :
دگمه های پیمایش هم چنین تصحیح می شوند :
Private Sub cmdNext_Click()
On Error Resume Next
With Me.attachFile
If .AttachmentCount = 0 Then Exit Sub
.Forward
attachFile_Label.Caption = .FileName
Me.Text35 = .CurrentAttachment + 1
Me.Text37 = .AttachmentCount
End With
End Sub
و دیگری :
Private Sub cmdPrev_Click()
With Me.attachFile
' If .AttachmentCount = 0 Then Exit Sub
.Back
attachFile_Label.Caption = .FileName
Me.Text35 = .CurrentAttachment + 1
Me.Text37 = .AttachmentCount
End With
End Sub
و برای اینکه تکست باکسها مقادیرشان را در رفتن به رکورد دیگر update کنند و نمایش دهند در رویداد On current فرم موارد زیر به کدهای قبلی در این رویداد اضافه شود :
cmdNext_Click
cmdPrev_Click
و برای اینکه وقتی در تکست باکس Text35 ، عدد را وارد می کنیم و enter را می زنیم به رکورد بعدی نرود یکی از راهکارها را بکار می بریم یعنی : رویداد cycle را در زبانه Other برای فرم ، از All record به current record تغییر می دهیم
hamid-nice
چهارشنبه 06 شهریور 1392, 19:28 عصر
با سلام
امکان دارد که بتوان هنگام زدن دگمه درج فایل، چند فایل عکس را با هم انتخاب و یکجا به داخل دیتابیس وارد کرد؟
با تشکر
Abbas Amiri
جمعه 15 شهریور 1392, 11:15 صبح
با سلام
امکان دارد که بتوان هنگام زدن دگمه درج فایل، چند فایل عکس را با هم انتخاب و یکجا به داخل دیتابیس وارد کرد؟
با تشکر
راه حل ساده است و فقط بصورت کلی عرض می کنم تا زحمت آن را خودتان بکشید .
ابتدا باید آدرس فایل های مورد نظر رو بدست بیارید که از تابع زیر میتونید استفاده کنید
Function SelectFiles() As FileDialogSelectedItems
Dim dlg As FileDialog, strFile As String
Set dlg = Application.FileDialog(msoFileDialogFilePicker)
With dlg
.AllowMultiSelect = True
.Filters.Add "Images", "*.gif; *.jpg; *.jpeg; *.png; *.bmp", 1
.Filters.Add "All Files", "*.*", 2
.Title = "ÇäÊÎÇÈ ÝÇíá"
.ButtonName = "ÇäÊÎÇÈ"
If dlg.Show = True Then
Set SelectFiles = .SelectedItems
End If
End With
Set dlg = Nothing
End Function
بعد در یک حلقه For ... each با یک متغیر واریانت تمام آدرس های انتخاب شده را بدست آورده و بااستفاده از کدهایی که در برنامه فوق قرار دارد به فیلد مورد نظر Atttach کنید.
موفق باشید.
majid_tiger
سه شنبه 30 مهر 1392, 14:17 عصر
سلام ، جناب امیری چرا در نسخه دوم برنامه بعد از افزودن یک فایل جدید رکورد اول در فرم نمایش داده می شود ، در صورتیکه مثل نسخه اول بهتر بود که در هر رکوردی که یک فایل جدید اضافه می شد بعد از اتمام ذخیره سازی همان رکورد در فرم نمایش داده می شد ، در ضمن از زحمات شما بسیار متشکرم چون کمک بزرگی برای یک قسمت از کار من بود .
hamid-nice
دوشنبه 18 آذر 1392, 18:00 عصر
..........
mhamedm2008
پنج شنبه 19 دی 1392, 23:05 عصر
سلام یک نمونه جمع وجور وتکمیل تر از پست 1 برای استفاده دوستان قرار دادم :
با سلام خدمت دوستان عزیز
مشکل چند ساله من با این پیوست حل شد
دستتون واقعا درد نکنه
الان من یک مشکل دارم و آن هم اینکه مثلا من از دو تا تیبل می خوام با این فرم تصویر وارد کنم.چگونه می تونم انتخاب کنم که این رکودها مربوط به تیبل 1 باشه و یا 2
آخه من از یک فیلتر استفاده می کردم با یک چند فرم برای هر تیبل.اگر مربوط ه تیبل 1 باشه فرم 1 باز بشه و رکورد مورد نظر را که فیلتر روش اعمل شده نشون میده.به همین صورت برای تیبل ها و فرم ها بعدی.مشکل اینجاست که وقتی تعداد این تیبل ها زیاد بشه، تعداد فرم ها هم زیاد میشه و کشکلات دیگه ای پیش رو میاد
ممنون میشم که کمک کنید
mhamedm2008
جمعه 20 دی 1392, 17:50 عصر
با سلام خدمت دوستان عزیز
مشکل چند ساله من با این پیوست حل شد
دستتون واقعا درد نکنه
الان من یک مشکل دارم و آن هم اینکه مثلا من از دو تا تیبل می خوام با این فرم تصویر وارد کنم.چگونه می تونم انتخاب کنم که این رکودها مربوط به تیبل 1 باشه و یا 2
آخه من از یک فیلتر استفاده می کردم با یک چند فرم برای هر تیبل.اگر مربوط ه تیبل 1 باشه فرم 1 باز بشه و رکورد مورد نظر را که فیلتر روش اعمل شده نشون میده.به همین صورت برای تیبل ها و فرم ها بعدی.مشکل اینجاست که وقتی تعداد این تیبل ها زیاد بشه، تعداد فرم ها هم زیاد میشه و کشکلات دیگه ای پیش رو میاد
ممنون میشم که کمک کنید
دوستان کسی نمی دونه چه جوری این فیلد به صورت unbound درست کنیم تا مشکل برای فراخوانی اطلاعات از چند دیتابیس نداشته باشیم؟؟
Abbas Amiri
شنبه 21 دی 1392, 10:50 صبح
با سلام خدمت دوستان عزیز
مشکل چند ساله من با این پیوست حل شد
دستتون واقعا درد نکنه
الان من یک مشکل دارم و آن هم اینکه مثلا من از دو تا تیبل می خوام با این فرم تصویر وارد کنم.چگونه می تونم انتخاب کنم که این رکودها مربوط به تیبل 1 باشه و یا 2
آخه من از یک فیلتر استفاده می کردم با یک چند فرم برای هر تیبل.اگر مربوط ه تیبل 1 باشه فرم 1 باز بشه و رکورد مورد نظر را که فیلتر روش اعمل شده نشون میده.به همین صورت برای تیبل ها و فرم ها بعدی.مشکل اینجاست که وقتی تعداد این تیبل ها زیاد بشه، تعداد فرم ها هم زیاد میشه و کشکلات دیگه ای پیش رو میاد
ممنون میشم که کمک کنید
تنها کمکی که می توانم بکنم ، راهنمایی است :
بدلیل اینکه مراحل انجام کار در ضمیمه فوق ماژوله بوده و هر روال و تابعی کار خاصی انجام میدهد ، می توانید یک کمبو باکس(مثلا به نام cboTables) شامل اسامی جداول موردنیاز در فرم مربوطه ایجاد کنید . و با انتخاب هر کدام از جداول فرم شما به آن جدول Bound شود . در اینجا باید اسامی فیلدهای جداول که در فرم وجود دارد، یکسان باشد در غیر اینصورت با یک مقدار پیچدگی قابل حل است .
mhamedm2008
دوشنبه 23 دی 1392, 02:17 صبح
ممنون
ولی چه جوری این کار رو کنم
چرا که وقتی که در قسمت form و سپس data و بعد data source که نام جدول table1 نوشته شده است را به هر چیزی تغییر بدم ، دیگه هیچ چیر کار نمی کنه.چه جوری با کد نویسی بتونم این نام جدول را برایش تعریف کنم که از چه تیبلی استفاده کند؟
با تشکر
منتظر هستم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.