نمایش نتایج 1 تا 8 از 8

نام تاپیک: نوشتن یک کد در رویداد لود همه فرمها در اکسس

  1. #1

    نوشتن یک کد در رویداد لود همه فرمها در اکسس

    سلام به همه دوستان.
    یک دیتابیس داریم با حدود 600 فرم . فرمها که باز میشن همشون به جدولهای مختلف وصل هستند و اولین رکورد جدول رو نمایش میدن . میخوایم کدی برای هر فرم بنویسیم در رویداد لود شدن فرم که وقتی فرم لود میشه به آخرین رکورد جدول بره و یک رکورد جدید ایجاد بشه .
    این هم کدش :

    DoCmd.GoToRecord acDataForm, "form1", acLast
    حالا مسئله اینجاست که نوشتن این کد در رویداد on load یا همون Form_Load این 600 تا فرم بسیار وقت گیر هست .
    آیا میشه یک ماکرو نوشت که وقتی هر فرم باز میشه به صورت اتوماتیک این کار انجام بشه ؟ یک رکورد جدید برای ثبت ایجاد کنه و در اولین رکورد نباشه .
    یا مثلا راهی هست که این کد مربوطه رو برای همه فرمها ایجاد کنیم ؟

  2. #2
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    784

    نقل قول: نوشتن یک کد در رویداد لود همه فرمها در اکسس

    ..................................
    آخرین ویرایش به وسیله eb_1345 : پنج شنبه 26 آبان 1401 در 07:34 صبح

  3. #3
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: نوشتن یک کد در رویداد لود همه فرمها در اکسس

    همین که 600 فرم دارین یعنی طراحی شما از پایه اشکال داره!
    تعداد فرم های یک اپ اکسس متعارف نباید از 30-40 تا بیشتر باشه،
    برای جدول ها هم زیر 50 تا هست معمولا،
    و تعدا کل ابجکتها هم زیر 150 تا.

    با این وجود و با همه این موارد؛
    پرسش شما پاسخ داره!

  4. #4
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: نوشتن یک کد در رویداد لود همه فرمها در اکسس

    اول باید یک ماجول بسازین و کدی که قرار هست در onload همه فرمها استفاده بشه رو اونجا پیاده کنین:
    PUBLIC FUNCTION GLOBAL_ONLOAD(FORMNAME AS STRING)
    DOCMD.GOTORECORD ACDATAFORM , FORMNAME , ACNEWREC
    END FUNCTION

  5. #5
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: نوشتن یک کد در رویداد لود همه فرمها در اکسس

    حالا یک روتین مینویسین که در اون فرمها یکی یکی در حالت design باز و کد onload برای اون تعریف و بعد save میشه:
    DIM FORM_OBJECT AS OBJECT
    DIM FRM AS FORM
    DIM FORM_NAME AS STRING
    FOR EACH FORM_OBJECT IN CURRENTPROJECT.ALLFORMS
    FORM_NAME= FORM_OBJECT.NAME
    DOCMD.OPENFORM FORM_NAME , ACDESIGN , , , , ACHIDDEN
    SET FRM= FORMS(FORM_NAME)
    FRM.ONLOAD= REPLACE("=GLOBAL_ONLOAD(""@FORMNAME"")" , "@FORMNAME" , FORM_NAME)
    DOCMD.CLOSE ACFORM , FORM_NAME , ACSAVEYES
    NEXT


    این روتین یکبار اجرا بشه کافیه، هرچند که اجرای چندباره اون هم مشکل (یا تاثیر) نداره!

  6. #6
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    784

    نقل قول: نوشتن یک کد در رویداد لود همه فرمها در اکسس

    درود بر استاد mazoolagh عزیز !
    با اجازتون من در کد های شما تغییراتی ایجاد کردم که ماحصل اون در نمونه ضمیه قرار دادم
    اما توضیح در خصوص تغییرات :
    بجای ماژول

    PUBLIC FUNCTION GLOBAL_ONLOAD(FORMNAME AS STRING)
    DOCMD.GOTORECORD ACDATAFORM , FORMNAME , ACNEWREC
    END FUNCTION




    ماژول زیر رو بدون آرگومان ایجاد کردم

    Public Function NewRec()
    DoCmd.GoToRecord , , acNewRec
    End Function

    بعد در سابروتینی که فرم ها در حالت دیزاین بازمیشن و کد اجرای انتقال به رکورد جدید درج میشه من OnLoad فرم رو مساوی عبارت "=NewRec()" قرار دادم . با این کار در واقع بجای ایجاد سابروتین Private Sub Form_Load()
    مستقیماً در همون قسمت OnLoad ماژول =NewRec() درج و فراخوانی میشه .
    ضمناً با توجه به اینکه در اجرای اولیه از کد DOCMD.Close acForm, frm, acSaveYes که مربوط به بستن فرمها در حالت دیزاین میباشه ایراد گرفته میشد بنده برای بستن فرم ها از ماژول زیر استفاده کردم:

    Public Function CloseAllForms()
    Dim lngLoop As Long
    For lngLoop = (Forms.Count - 1) To 1 Step -1
    DoCmd.Close acForm, Forms(lngLoop).Name, acSaveYes
    Next lngLoop
    End Function



    وبالاخره درج همه کد بصورت یکجا :

    Public Function CloseAllForms()
    Dim lngLoop As Long
    For lngLoop = (Forms.Count - 1) To 1 Step -1
    DoCmd.Close acForm, Forms(lngLoop).Name, acSaveYes
    Next lngLoop

    End Function
    Public Function NewRec()
    DoCmd.GoToRecord , , acNewRec
    End Function

    Public Sub EventNewRec()
    On Error Resume Next
    Dim Frm_Name As String
    Dim frm As Form
    Dim obj As AccessObject, dbs As Object
    Set dbs = Application.CurrentProject
    For Each obj In dbs.AllForms
    If obj.Name <> "FMain" Then
    Frm_Name = obj.Name
    DoCmd.OpenForm Frm_Name, acDesign, , , , acHidden
    Set frm = Forms(obj.Name)
    frm.OnLoad = "=NewRec()"
    CloseAllForms
    ' DOCMD.Close acForm, frm, acSaveYes
    End If
    Next obj
    End Sub


    ناگفته پیداست که با یک بار اجرای کد ماژول EventNewRec در رخداد کلیک کمند باتن فرم اصلی کد انتقال به رکورد جدید برای همیشه در قسمت OnLoad همه فرم ها درج میشه بنابراین با اجرای اولیه ماژول فوق دیگه نیازی به اجرای اون در دفعات بعد نمیباشه و میشه اون رو حذف کرد.
    ارادتمند : بهرامی
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله eb_1345 : جمعه 27 آبان 1401 در 12:22 عصر

  7. #7
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: نوشتن یک کد در رویداد لود همه فرمها در اکسس

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    درود بر mazoolagh عزیز !
    من در کد های شما تغییراتی ایجاد کردم که ماحصل اون در نمونه ضمیه قرار دادم
    اما توضیح در خصوص تغییرات :
    ...
    ...
    ارادتمند : بهرامی
    درود بر شما جناب بهرامی گرامی،
    بسیار ممنون از اصلاح و بهینه کردن کد و توضیحات گسترده و گویا،
    من همیشه از مطالب مفید شما و دیگر دوستان خوشه چینی میکنم.

  8. #8

    نقل قول: نوشتن یک کد در رویداد لود همه فرمها در اکسس

    درود بر استاد بهرامی و mazoolagh عزیز . بسیار عالی .
    صمیمانه از شما اساتید تشکر میکنم و آرزو دارم روز به روز بر علم و دانش شما افزوده شود و همیشه در پناه نور و عشق الهی باشید .
    آخرین ویرایش به وسیله CSharpLovers : جمعه 11 آذر 1401 در 18:44 عصر

تاپیک های مشابه

  1. طراحی نسخه اندرویدی برنامه نوشته شده با اکسس
    نوشته شده توسط soroush_k12 در بخش Access
    پاسخ: 7
    آخرین پست: پنج شنبه 10 دی 1394, 10:18 صبح
  2. سوال: قابل ویرایش کردن این فایل اکسس
    نوشته شده توسط arminloty در بخش Access
    پاسخ: 3
    آخرین پست: پنج شنبه 21 اسفند 1393, 18:22 عصر
  3. حرفه ای: مشکل ویرایش عکس در پایگاه داده اکسس
    نوشته شده توسط mortezasar در بخش C#‎‎
    پاسخ: 0
    آخرین پست: جمعه 20 دی 1392, 17:00 عصر
  4. حرفه ای: مشکل ویرایش عکس در پایگاه داده اکسس
    نوشته شده توسط mortezasar در بخش Access
    پاسخ: 0
    آخرین پست: جمعه 20 دی 1392, 16:49 عصر
  5. ویرایش رکورد مورد نظر در اکسس
    نوشته شده توسط ali190 در بخش مطالب مرتبط با بانکهای اطلاعاتی در VB6
    پاسخ: 2
    آخرین پست: جمعه 01 مرداد 1389, 17:34 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •