با سلام
چطوری میشه یه اسپلیت فرم دستی ساخت که ارتباط متناظر و دو طرفه بین فرم اصلی و ساب فرم وجود داشته باشه با ویزارد دکمه ها و تکست باکسهای خارج از جدول ظاهر نمیشن و کلیه تنظمیات ظاهر نیز بهم میریزه
با تشکر
با سلام
چطوری میشه یه اسپلیت فرم دستی ساخت که ارتباط متناظر و دو طرفه بین فرم اصلی و ساب فرم وجود داشته باشه با ویزارد دکمه ها و تکست باکسهای خارج از جدول ظاهر نمیشن و کلیه تنظمیات ظاهر نیز بهم میریزه
با تشکر
آخرین ویرایش به وسیله moustafa : جمعه 30 آذر 1403 در 15:49 عصر
یه نمونه گذاشتم فرم اصلی unbound و با شی recordset عملیات چهارگانه روش اعمال و subform بطورbound به همون جدول متصل میشه . رو هر رکورد در سابفرم بری متناظرش در فرم اصلی ظاهر و هر گونه تغییرات اعم از آپدیت ،حذف و... متناظرا رو همون رکورد سابفرم اعمال میشه
سلام و روز خوش
1- فرم اسپلیت فقط یک دیتاشیت از جدول شما کنار فرم اضافه میکنه و با فرم master-detail که با ساب فرم ساخته میشه فرق میکنه!
2- نیازی هم به کاری نداره - شما کافی هست همون فرم معمولی رو برای حالت single طراحی کنین،
ولی default view اون رو split form بذارین و محل دیتاشیت رو هم مشخص کنین، همین!
کلا ساختش نیازی به ویزارد نداره و ویزارد همون فرمی رو طراحی میکنه که در حالت single طراحی میکرد.
البته با توجه به سایز و layout فرم باید حواستون به جای دیتاشیت باشه.
3- نیاز به کدنویسی برای عملیات insert/update/delete برای فرم bound موضوعیتی نداره،
و برای فرم unbound هم split بودن یا نبودنش تفاوتی ایجاد نمیکنه.
یک نمونه براتون درست کردم که موضوع رو بهتر نشون میده:
Screenshot 2024-12-29 135918.png
Screenshot 2024-12-29 133330.png
Option Compare Database
Option Explicit
Private Sub BTN_ADD_Click()
On Error GoTo Error_Handler
DoCmd.GoToRecord , "", acNewRec
Me.CategoryName.SetFocus
Exit Sub
Error_Handler:
MsgBox Error$
End Sub
Private Sub BTN_DELETE_Click()
On Error GoTo Error_Handler
If Form.NewRecord Then
Beep
Else
If MsgBox( _
Title:="Delete Record?", _
Buttons:=vbYesNo + vbExclamation + vbDefaultButton2, _
Prompt:=Me.CategoryName) = vbYes Then
DoCmd.RunCommand acCmdDeleteRecord
If Me.NewRecord Then
DoCmd.GoToRecord , "", acLast
End If
End If
End If
Exit Sub
Error_Handler:
MsgBox Error$
End Sub
Private Sub BTN_FIRST_Click()
DoCmd.GoToRecord , "", acFirst
End Sub
Private Sub BTN_PREVIOUS_Click()
If Me.CurrentRecord > 1 Then
DoCmd.GoToRecord , "", acPrevious
End If
End Sub
Private Sub BTN_NEXT_Click()
If Me.CurrentRecord <> Me.RecordsetClone.RecordCount Then
DoCmd.GoToRecord , "", acNext
End If
End Sub
Private Sub BTN_LAST_Click()
DoCmd.GoToRecord , "", acLast
End Sub
برنامه نمونه
بی نهایت سپاسگذارم از اینهمه بذل عنایت وقت وانرژی
استاد در این روش دیتاشیت محدودیت پوزشین و اندازه داره یعنی نمی تونیم دیتا شیت رو به اندازه دلخواه و در هر جا از فرم که خواستیم بذاریم
نظر لطف شماست.
دیتاشیت کنار فرم شما dock میشه؛ حالا میتونه چپ/راست/بالا/پایین اون باشه - ولی مثل سابفرم بخشی از فرم شما نیست،در این روش دیتاشیت محدودیت پوزشین و اندازه داره یعنی نمی تونیم دیتا شیت رو به اندازه دلخواه و در هر جا از فرم که خواستیم بذاریم
یک split bar هست که در مرز بین فرم شما دیتاشیت قرار داره
و این bar رو میتونین جابجا کنین - یا کلا نمایش ندین که کاربر نتونه تغییر بده layout رو.
اگر حتما باید درون خود فرم باشه،
الزاما نیازی به سابفرم نیست (بهتره که continuous باشه) - میتونین از لیست باکس هم استفاده کنین،
مگر این که از هر دو جا بخواین ادیت کنین (که این هم چیز ضروری نیست).