PDA

View Full Version : آموزش کامل فرمهای مرتبط



masoud903
سه شنبه 18 خرداد 1389, 13:01 عصر
با سلام
من خودم مدت زیادی طول کشید تا با استفاده از تجربیات اساتید و دوستان این فروم و نمونه برنامه ها به درک خوبی از این موضوع برسم.چون مبحث خیلی مفیدی هست و سوال اکثر دوستانه من آموزش کاملش رو با نمونه میذارم

طرح موضوع:یه جدول به اسم PERSONEL داریم که کل اطلاعاتمون توی اون ذخیره میشه
حالا ما میخواهیم که این اطلاعات در فرمی باز بشه و بتونیم ویرایشش کنیم و مثلا توی جدول SABT ذخیره کنیم
در RECORD SOURCE فرم VIRAYESH2 کد زیر را وارد میکنیم

SELECT personel.IDPER, personel.FNAME, personel.IDDATE, personel.LNAME, personel.JOBCODE, personel.SITUATION, personel.DATEOFWORK FROM personel; در رویداد کلیک دکمه ویرایش کد زیر رو وارد میکنیم

Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "vir3"
stLinkCriteria = "IDPER=" & Me![IDPER]
' MsgBox stLinkCriteria
DoCmd.OpenForm stDocName, , , , , , stLinkCriteriaتوضیح:فرم VIR3 رو با توجه به IDPER روی فرم vIRAYESH2 باز میکنه

در رکورد سورس فرم VIR3 کد زیر رو وارد میکنیم

SELECT * FROM PERSONEL WHERE (((PERSONEL.IDPER)=Forms![virayesh2]!IDPER)); که کاملا مشخصه که چیکار میکنه

اما برای اینکه اطلاعاتمون رو توی جدول DAYVAL ذخیره کنه از کد زیر در رویداد کلیک دکمه ثبت استفاده میکنیم

Private Sub sabt_Click()
Dim db As Database
Set db = CurrentDb
Dim rst1 As Recordset
Set rst1 = db.OpenRecordset("DAYVAL")
rst1.AddNew
'saving to DAYVAL
rst1.Fields("IDPER") = IDPER1.Value
rst1.Fields("FNAME") = FNAME1.Value
rst1.Fields("LNAME") = LNAME.Value
rst1.Fields("JOBCODE") = JOBCODE1.Value
rst1.Fields("SITUATION") = SITUATION1.Value
rst1.Fields("OURTIME") = OURTIME1.Value
rst1.Fields("PASSTIME") = PASSTIME1.Value
rst1.Fields("date12") = date2.Value
rst1.Update
rst1.Close
DoCmd.Close
End Subنامگذاری فیلد های روی فرمها هم که کاملا مشخصه

هرچند شایدروشی بهتر باشه یا اینکه جایی از آموزشم ایراد داشته باشه(که البته اساتید لطف میکنن و بهمون درستش رو یاد میدن) اما امیدورام مفید بوده باشه و همه تجربه هاشون رو به اشتراک بذارن در جهت پیشرفت سایر دوستان

arpachi
جمعه 18 فروردین 1391, 02:09 صبح
با سلام
دوست عزیز
فرم شما درهمه قسمتها درست کار میکند ولی مانند مشکلی که بنده دارم هنگامی که رکوردی قبلا ایجاد شده است ر امیخواهیم ویرایش کنیم روی rst.update پیغام خطا میدهد.آن هم به علت خط rst.addnew است .البته هنگامی که تبدیل به rst.edit هم میشود باز هم هنگام rst.update همان پیغام خطا ظاهر میشود.
لطفا توضیح دهید.
با تشکر از زحمت شما.

Abbas Amiri
جمعه 18 فروردین 1391, 12:56 عصر
پیرو مطالب مفید دوستمان Masoud903 جهت ذخیره رکورد جدید به روش زیر عمل میکنم . فقط ذکر چند نکته قبل از آن ضروری است:
در فرم Vir3 نام کنترلها با پسوند 1 درج شده بود که ضرورتی نداشت. چنانچه به ازای تمام فیلدهای یک جدول در یک فرم کنترلهایی به همان نام فیلدها داشته باشیم به روش زیر به آسانی می توان رکورد اضافه کرد.


Private Sub sabt_Click()
Dim db As Database, fld As Field
Set db = CurrentDb
Dim rst1 As Recordset
Set rst1 = db.OpenRecordset("DAYVAL")
rst1.AddNew
For Each fld In rst1.Fields
rst1(fld.Name) = Me(fld.Name)
Next
rst1.Update
rst1.Close
DoCmd.Close
End Sub

بدیهی است منظور از کنترلهایی به همان نام کنترلهایی که حاوی اطلاعات باشند مثل TextBox,Combo,CheckBox,...

چنانچه تمام فیلدها در جدول موجود نباشند هم به روش دیگری که خیلی هم پیچیده نیست امکان پذیر است