View Full Version : روش ساخت اسپلیت فرم (ارتباط متناظر و دو طرفه فرم اصلی با ساب فرم) بطوردستی
moustafa
جمعه 30 آذر 1403, 11:32 صبح
با سلام
چطوری میشه یه اسپلیت فرم دستی ساخت که ارتباط متناظر و دو طرفه بین فرم اصلی و ساب فرم وجود داشته باشه با ویزارد دکمه ها و تکست باکسهای خارج از جدول ظاهر نمیشن و کلیه تنظمیات ظاهر نیز بهم میریزه
با تشکر
moustafa
شنبه 08 دی 1403, 23:45 عصر
یه نمونه گذاشتم فرم اصلی unbound و با شی recordset عملیات چهارگانه روش اعمال و subform بطورbound به همون جدول متصل میشه . رو هر رکورد در سابفرم بری متناظرش در فرم اصلی ظاهر و هر گونه تغییرات اعم از آپدیت ،حذف و... متناظرا رو همون رکورد سابفرم اعمال میشه
mazoolagh
یک شنبه 09 دی 1403, 13:28 عصر
سلام و روز خوش
1- فرم اسپلیت فقط یک دیتاشیت از جدول شما کنار فرم اضافه میکنه و با فرم master-detail که با ساب فرم ساخته میشه فرق میکنه!
2- نیازی هم به کاری نداره - شما کافی هست همون فرم معمولی رو برای حالت single طراحی کنین،
ولی default view اون رو split form بذارین و محل دیتاشیت رو هم مشخص کنین، همین!
کلا ساختش نیازی به ویزارد نداره و ویزارد همون فرمی رو طراحی میکنه که در حالت single طراحی میکرد.
البته با توجه به سایز و layout فرم باید حواستون به جای دیتاشیت باشه.
3- نیاز به کدنویسی برای عملیات insert/update/delete برای فرم bound موضوعیتی نداره،
و برای فرم unbound هم split بودن یا نبودنش تفاوتی ایجاد نمیکنه.
mazoolagh
یک شنبه 09 دی 1403, 13:30 عصر
یک نمونه براتون درست کردم که موضوع رو بهتر نشون میده:
156344
156345
mazoolagh
یک شنبه 09 دی 1403, 13:34 عصر
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
mazoolagh
یک شنبه 09 دی 1403, 13:35 عصر
برنامه نمونه
moustafa
سه شنبه 11 دی 1403, 22:36 عصر
بی نهایت سپاسگذارم از اینهمه بذل عنایت وقت وانرژی
moustafa
جمعه 14 دی 1403, 14:34 عصر
استاد در این روش دیتاشیت محدودیت پوزشین و اندازه داره یعنی نمی تونیم دیتا شیت رو به اندازه دلخواه و در هر جا از فرم که خواستیم بذاریم
mazoolagh
شنبه 15 دی 1403, 11:45 صبح
بی نهایت سپاسگذارم از اینهمه بذل عنایت وقت وانرژی
نظر لطف شماست.
در این روش دیتاشیت محدودیت پوزشین و اندازه داره یعنی نمی تونیم دیتا شیت رو به اندازه دلخواه و در هر جا از فرم که خواستیم بذاریم
دیتاشیت کنار فرم شما dock میشه؛ حالا میتونه چپ/راست/بالا/پایین اون باشه - ولی مثل سابفرم بخشی از فرم شما نیست،
یک split bar هست که در مرز بین فرم شما دیتاشیت قرار داره
و این bar رو میتونین جابجا کنین - یا کلا نمایش ندین که کاربر نتونه تغییر بده layout رو.
اگر حتما باید درون خود فرم باشه،
الزاما نیازی به سابفرم نیست (بهتره که continuous باشه) - میتونین از لیست باکس هم استفاده کنین،
مگر این که از هر دو جا بخواین ادیت کنین (که این هم چیز ضروری نیست).
moustafa
یک شنبه 16 دی 1403, 00:10 صبح
نظر لطف شماست.
دیتاشیت کنار فرم شما dock میشه؛ حالا میتونه چپ/راست/بالا/پایین اون باشه - ولی مثل سابفرم بخشی از فرم شما نیست،
یک split bar هست که در مرز بین فرم شما دیتاشیت قرار داره
و این bar رو میتونین جابجا کنین - یا کلا نمایش ندین که کاربر نتونه تغییر بده layout رو.
اگر حتما باید درون خود فرم باشه،
الزاما نیازی به سابفرم نیست (بهتره که continuous باشه) - میتونین از لیست باکس هم استفاده کنین،
مگر این که از هر دو جا بخواین ادیت کنین (که این هم چیز ضروری نیست).
split bar فقط در یک قسمت طولی یا عرضی کم وزیاد میشه و هر دو باهم نمیشه اونم در نمای نمایش نه دیزاین .همینطور از مزایای ساب فرم formatting اونه تا لیست باکس یکنواخت و محدود
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.