اذهب الي المحتوي
أوفيسنا

فتح نموذج آخر على نفس السجل بدون فلترة


nssj
إذهب إلى أفضل إجابة Solved by jjafferr,

الردود الموصى بها

الإخوة الكرام .. إذا كنت في سجل معين في  نموذج (FRM1) وأردت فتح نموذج آخر (FRM2) على نفس الموضع من خلال هذا الكود

DoCmd.OpenForm "FRM2", acNormal, , "[ID]=" & ID, , acDialog

يفتح هذا السجل فقط ولا يمكنني الانتقال بين السجلات حتى أزيل عامل التصفية

 010.jpg.7d607efb10fca11d4090cd7438c963d5.jpg

فهل من طريقة لجعله يؤدي نفس المهمة ولكن بدون فلترة

 011.jpg.bfba0180e41c38142ffe863ff3b80c86.jpg

يعني وكأنني فتحت النموذج يدويا ثم طلبت الانتقال للسجل المطلوب

رابط هذا التعليق
شارك

وعليكم السلام 🙂

 

وانا ادلو بدلوي :

    DoCmd.OpenForm "frm_03"
    Forms!frm_03!Id.SetFocus	'لست بحاجة الى هذا السطر
    DoCmd.FindRecord Me.Id, , , , , , True

.

 

الطريقة كأنك فتحت النموذج الآخر وعملت Ctl+F ، فعندك جميع الاعدادات في نافذة البحث ، في السطر الاخير من الكود 🙂

 

جعفر

  • Like 1
رابط هذا التعليق
شارك

جزاك الله خيرا أخي الكريم محمد أبوعبدالله  .. ولكن في هذه الطريقة إشكاليتان:

1- فبعد استخدامها ولو لمرة واحدة: فعند فتح النموذج الآخر بشكل عادي يفتح على السجل المخزن في الذاكرة، وتجاوزت هذه الإشكالية بأن أضفت في آخر الكود

i = 0

ثم رأيت مشاركة الأخ jjafferr.. وطريقته ليست فيها هذه الإشكالية

لكن تبقى الإشكالية الثانية في الطريقتين

2- النماذج المطلوب التطبيق عليها ليست في وضع منبثق، وأنا أفضل أن تفتح عند الطلب بهذا الكود بشكل منبثق أو مربع حوار، دون تغيير خصائص النموذج، لذلك استخدمت في الكود (acDialog)

والخطأ مني منذ البداية كان ينبغي أن أرفق ملفا للتطبيق عليه .. فهذا هو الملف، مع العلم أني بعد إجراء المزيد من التجارب عدلت على الكود ليصبح

DoCmd.OpenForm "FRM2", acNormal, , , , acDialog
[Forms]![Frm2].Recordset.FindFirst "[ID]=" & ID

ولكن أصبحت تخرج هذه الرسالة

 022.jpg.089e9696986fa0391ec86b9a0faa7431.jpg

فهل هذا يعني أن علي أن أصرف النظر عن قضية فتح النموذج المستدعى بهذه الطريقة في وضع منبثق، وأكتفي بأن يفتح بطريقته الافتراضية ؟

OpenForm.accdb

رابط هذا التعليق
شارك

  • أفضل إجابة

لما يكون النموذج في وضع Dialog (مو منبثق Popup) فيكون مثل نافذة رسائل الاكسس:

  1. بحيث لا تستطيع ان تستخدم اي من كائنات قاعدة البيانات ، غير الموجودة في نافذة الرسالة ،
  2. يتوقف الكود عند هذا السطر ولا يتحرك للسطر التالي إلا بعد اغلاق النافذة.

لهذا السبب يجب عدم استخدام هذه الخاصية (النماذج) إلا في حالات جدا خاصة.

 

الطريقة الاولى:

لحل هذه المشكلة ، يجب علينا ارسال جميع المعلومات المطلوبة ، ضمن امر فتح النموذج FRM2 ، ويمكننا عمل هذا عن طريق المتغير OpenArgs الموجود كآخر متغير في امر فتح النموذج ،

فيكون الكود:

Private Sub Frm2_Click()

    'since we open the Form in a Dialog mode,
    'we cannot send any further lines of code until the Form is closed
    'so while opening the Form, we will send further info in "OpenArgs" variable
    'so that when Form 2 is open, we can process this data there.
    'Coming from:FRM1, setfocus field:TNO, TNO value: me.TNO
    DoCmd.OpenForm "FRM2", acNormal, , , , acDialog, "FRM1|TNO|" & Me.TNO

End Sub

.

وفي حدث "تحميل" النموذج FRM2 ، نطلب منه تحليل هذه المعلومة ، والقيام بالمطلوب :

Private Sub Form_Load()
On Error GoTo err_Form_Load

    If IsNull(Me.OpenArgs) Then GoTo No_OpenArgs
    
    Dim x() As String
    
    'OpenArgs info:
    'Coming from:FRM1
    'setfocus field:TNO
    'TNO value: me.TNO
    If Split(Me.OpenArgs, "|")(0) = "FRM1" Then
        x = Split(Me.OpenArgs, "|")
        Me(x(1)).SetFocus
        DoCmd.FindRecord x(2), , , , , , True
    End If

No_OpenArgs:

    'continue code here
    
Exit_Form_Load:

Exit Sub
err_Form_Load:

    If Err.Number = 2142 Or Err.Number = 94 Or Err.Number = 9 Then
        'ignore, No proper value from OpenArgs
        Resume No_OpenArgs
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
        Resume Exit_Form_Load
    End If
    
End Sub

.

 

 

الطريقة الثانية:

Private Sub Frm2_Click()

    DoCmd.OpenForm "FRM_02", acNormal, , , , acDialog

End Sub

.

وفي حدث "تحميل" النموذج FRM2 ،

Private Sub Form_Load()
On Error GoTo err_Form_Load


    Me.TNO.SetFocus
    DoCmd.FindRecord Forms!FRM_01!TNO, , , , , , True


No_FRM:

    'continue code here
    
Exit_Form_Load:

Exit Sub
err_Form_Load:

    If Err.Number = 2145 Then
        'ignore, No proper value from incoming Form
        Resume No_FRM
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
        Resume Exit_Form_Load
    End If
    
End Sub

.

جعفر

  • Like 1
رابط هذا التعليق
شارك

جزاك الله خيرا أخي الكريم جعفر .. لكن بصراحة لما شفت الأكواد قلت لحالي: ياااااه .. كل هذا عشان تعرض النموذج بهالطريقة .. وكان مالها الطريقة الافتراضية 😅

وكنت متخوف من الكود في حدث عند التحميل ، لأن لكل نموذج أكواد خاصة فيه عند التحميل وخفت تتعارض الأكواد أو يتسبب في بطء الفتح

لكن بعد التطبيق هديت أعصابي 🙂 .. وما لاحظت بطء في فتح النماذج

لكن في الطريقة الثانية كانت تخرج رسالة برقم (2450) عند فتح النموذج الثاني بطريقة عادية وليس من خلال النموذج الآخر .. وتمت معالجة المشكلة بإضافتها للكود

  If Err.Number = 2145 Or Err.Number = 2450 Then

وختاما .. بحكم خبرتك أخي الكريم: بأي الطريقتين تنصحني، أنا بنظرتي السطحية أميل للطريقة الثانية لأن عدد أسطر الكود فيها أقل، وأنا مش قادر أتخلص من فكرة إنو قلة عدد أسطر الكود يعني إنو أسرع وأقل تعقيدا

رابط هذا التعليق
شارك

السلام عليكم 🙂

9 ساعات مضت, nssj said:

كانت تخرج رسالة برقم (2450) عند فتح النموذج الثاني بطريقة عادية وليس من خلال النموذج الآخر .. وتمت معالجة المشكلة بإضافتها للكود

If Err.Number = 2145 Or Err.Number = 2450 Then

نعم هذه هي الطريقة الصحيحة ، ولا انصح ابدا بإستخدام On Error Resume Next إلا في حالات جدا ضيقة 🙂

 

 

9 ساعات مضت, nssj said:

بأي الطريقتين تنصحني، أنا بنظرتي السطحية أميل للطريقة الثانية لأن عدد أسطر الكود فيها أقل

بالنسبة لعملك ، فخذ الطريقة التي تريحك 🙂

وطبيعي ان الكمبيوتر يحتاج وقت لمعالجة كل سطر في الكود ، والوقت يعتمد على الامر الموجود في ذلك السطر ، وفي معظم الاحيان هذا الوقت جدا تافه ولا نعيره اهتماما ، خصوصا في الكمبيوترات الجديدة 🙂

 

اما الطريقة الاولى ، OpenArgs ، فلا يعرف الكثير من المبرمجين عنها ، والكثير من الذين يعرفون ، لا يعرفون بأن بامكانهم ارسال اكثر من معلومة بها 🙂

 

جعفر

  • Like 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information