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

تعديل على كود الانتقال إلى سجل معين


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

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

الإخوة الكرام .. في الملف المرفق محاولة مني لعمل كود للانتقال إلى سجل معين بحسب رقم (Hno)

قمت به حسب فهمي لما اطلعت عليه من مواضيع حسب استطاعتي

والمطلوب بعض التعديلات:

1- أن يقوم الكود بمسح الرقم بمجرد الانتقال من (textbox) وهو في المثال المرفق (tn)

2- إن لم يكن الرقم موجودا تخرج رسالة بذلك

3- كما وحاولت أيضاً أن أجعل مفتاح (Enter) يقوم أيضاً بعملية الانتقال، لكن المشكلة أنه بعد الانتقال يضيف سطراً جديداً في بداية الحقل !!

4- بحسب بحثي استخدمت كودين لعملية الانتقال

DoCmd.GoToRecord , , acGoTo, HNO(tn)

 

Me.Recordset.FindFirst "hno=" & Me.tn

فأيهما أسرع لاسيما في الملفات الكبييييرة

انتقال.accdb

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

الأخ الكريم essam rabea شكرا على مشاركتك .. تم حل المشاكل المذكورة .. لكن الكود ينتقل إلى الرقم عبر الفلترة، وإذا ألغيت الفلترة يعود للسجل الأول

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

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

عليكم السلام، تفضل:

 

Option Compare Database

Private Sub go_Click()
    
    'check if TextBox tn is empty
    If IsNull(tn) Then
        MsgBox "يرجى كتابة رقم للبحث عنه", vbCritical, "عملية خاطئة"
        Exit Sub
    End If
    
    'check if record exist
    If DCount("ID", "tbl2", "HNO =" & tn) = 0 Then
        MsgBox "لم يتم العثور على السجل المطلوب", vbCritical, "عملية خاطئة"
        Exit Sub
    End If
    
    'go special record
    Me.Recordset.FindFirst "HNO=" & tn
    
    'clear TextBox tn after search
    tn = Null

End Sub

Private Sub tn_KeyDown(KeyCode As Integer, Shift As Integer)

    'Do event when click Enter key.
    If KeyCode = vbKeyReturn Then
       Call go_Click
    End If
    
End Sub

 

لا تنسى اختيار أفضل أجابة لإغلاق الموضوع.

تحياتي.

 

 

انتقال.accdb

تم تعديل بواسطه SEMO.Pa3x
  • Like 1
  • Thanks 2
رابط هذا التعليق
شارك

أخي الكريم أبو مهاب .. شكرا على مشاركتك .. ولكن هناك ملاحظتان

أولا: مسألة فنية: إلغاء الرقم في التكست بوكس بعد رسائل الخطأ أيضا

ثانيا: توجد إشكاليات في الانتقال بكبسة إنتر

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

- إذا كتبت رقما غير موجود واستخدمت الانتر تخرج رسالة (يرجى كتابة رقم)، ثم إذا أدخلت الرقم الصحيح تخرج رسالة (لم يتم العثور على السجل)، وإذا كبست إنتر للمرة الثانية دون أن أغير الرقم يتم الانتقال للمطلوب، وإذا غيرت الرقم ينتقل للرقم الذي كان موجودا قبل التغيير !

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

أخي الكريم essam .. بالنسبة للانتقال بالإنتر عادت المشكلة الأولى .. يضيف سطرا جديدا في بداية حقل النص

وعند كتابة الرقم الخطأ يعود للسجل الأول .. ولعله من الأفضل أن يبقى حيث هو 

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

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

أخي الكريم أبو مهاب .. شكرا على مشاركتك .. ولكن هناك ملاحظتان

أولا: مسألة فنية: إلغاء الرقم في التكست بوكس بعد رسائل الخطأ أيضا

ثانيا: توجد إشكاليات في الانتقال بكبسة إنتر

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

- إذا كتبت رقما غير موجود واستخدمت الانتر تخرج رسالة (يرجى كتابة رقم)، ثم إذا أدخلت الرقم الصحيح تخرج رسالة (لم يتم العثور على السجل)، وإذا كبست إنتر للمرة الثانية دون أن أغير الرقم يتم الانتقال للمطلوب، وإذا غيرت الرقم ينتقل للرقم الذي كان موجودا قبل التغيير !

 اخي الكريم، يقولون لا تعطني سمكة علمني كيف اصطادها.

مع ذلك قدمت لك الحل كاملاً..

اقتباس

أولا: مسألة فنية: إلغاء الرقم في التكست بوكس بعد رسائل الخطأ أيضا

هل هذا أمر مستحيل أو صعب ؟ ولو تمعن النظر في الكود الذي كتبته سوف تجد طلبك

    'clear TextBox tn after search
    tn = Null

 

اقتباس

ثانيا: توجد إشكاليات في الانتقال بكبسة إنتر

 

يعمل 100% وبدون أشكالية.

للمعلوم ضغط الأنتر سيقوم بنداء الدالة go_Click التي ستقوم بوظيفتها التالية:

1- هل الحقل tn فارغ ؟ اذا كان فارغ ستخرج رسالة خطأ واذا لم يكن فارغ سيكمل البرنامج عمله.

2- التحقق في ما اذا كان السجل المطلوب هو موجود فعلا بالجدول او غير موجود عن طريق رقم الـ HNO اذا كان  موجود سيكمل البرنامج عمله والعكس رسالة خطأ.

3- يقوم بالذهاب للسجل المطلوب

4- تصفير الحقل

 

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

والدليل ردي في الأعلى

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

1 ساعه مضت, SEMO.Pa3x said:

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

شكرا على النصيحة أخي الكريم .. مع أنني أعمل بها قدر استطاعتي .. قبل كتابة هذا الموضوع ليلة كاملة وأنا أبحث عن الكود المناسب وأجرب هذا وذاك وعشرات التجارب الفاشلة بسبب فاصلة أو نقطة .. لأن البرمجة ليس مجالي ولا يمكنني أن أترك تخصصي وأخوض في بحارها .. وبعد ساعات من التجارب خرجت بالأكواد الموجودة في الملف .. وهي أكواد أعتقد أن شخصا لديه بعض الخبرة بالبرمجة يكتب أفضل منها في دقائق .. ولكن أحب أن أجرب بنفسي قبل السؤال

حتى مشكلة إضافة سطر جديد عند الانتقال بالانتر وجدت لها حلا عبر استخدام

Me.tn.SetFocus

ولكني أشعر أن هذا حل بدائي .. وأرغب بحل احترافي من أهل الخبرة

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

    If DCount("ID", "tbl2", "HNO =" & tn) = 0 Then
        MsgBox "لم يتم العثور على السجل المطلوب", vbCritical, "عملية خاطئة"
        tn = Null
        Exit Sub
    End If

فتم المطلوب في هذه الجزئية والحمد لله

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

يعني إذا كان فارغا وكتبت فيه (5) وكبست إنتر تخرج لي رسالة (يرجى كتابة رقم) ثم إذا كتبت (4) وكبست إنتر ينتقل إلى الرقم الذي كان مكتوبا في السابق (5)

هذا ما يحدث معي .. وإذا كان لا يحدث معك فهو شيء محير فعلاً

تم تعديل بواسطه nssj
رابط هذا التعليق
شارك

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

 

الافضل ان يكون الاستعلام مصدر بيانات النماذج والتقارير ، ولا تأخذ الجداول كمصدر بيانات مباشر ، فهذا اللي عملته هنا :

image.png.c478fa067d9fdccd80432b942f320b14.png

.

ولا تعمل الكود على حدث "الخروج" من الحقل ، بينما الطريقة الصحيحة ان تضع الكود على حدث "بعد التحديث" :


Private Sub tn_AfterUpdate()

    If DCount("*", "qry_tbl2", "HNO =" & Me.tn) = 0 Then
        MsgBox "الرقم غير موجود"
        Me.tn = ""
    Else
        Me.Recordset.FindFirst "hno=" & Me.tn
    End If
    
End Sub

.

وجربت الكود الآخر ، فكان أبطأ من الذي ارفقته لك 🙂

 

جعفر

1335.انتقال.accdb.zip

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

الأخ الكريم جعفر .. شكرا على توضيحاتك وتنبيهاتك

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

ثم وللفائدة .. فقد لاحظت أنه يمكن الانتقال باستخدام الفارة عند الكبس على زر المنظار مع أنك حذفت الكود من هذا الزر .. فعلى أي أساس انتقل

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

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

عند الكبس على زر المنظار

على حدث عند "النقر" للزر ، تستطيع منادادة الكود السابق :

call tn_AfterUpdate

 

 

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

فعلى أي أساس انتقل

بعد ان تكتب ما تشاء في مربع النص ، وبعد تحديث بياناته بالخروج منه ، سواء عن طريق الزر Enter او Tab ،

وللعلم ، فالطريقة الصحيحة للانتقال بين كائنات النموذج هي عن طريق زر Tab ، وتستطيع عمل تسلسل الانتقال من كائن الى اخر من اعدادات الكائن ، علما بأن اول رقم هو صفر :

image.png.209af52135951ea025ba6bd01c9fd907.png

.

 

 

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

لكن لا تزال مشكلة إضافة سطر جديد موجودة

ما اعرف شو قصدك في هاي النقطة ، فنحن لا من قريب ولا بعيد جئنا بقرب مربع نص الكتابة 😁

لما نجرب العمل ، فلا نتعامل مع كائنات اخرى ، إلا في حال يتطلب منا هذا الامر ، لذا لم اتطرأ له اصلا !!

ولكن وبما انك تعرف اكثر عن برنامجك ، فياريت تخبرنا ما تعمله بالخطوات ، او بالصور ، لنحصل على ما حصلت عليه من نتيجة 🙂

 

جعفر

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

منذ ساعه, jjafferr said:

ما اعرف شو قصدك في هاي النقطة ، فنحن لا من قريب ولا بعيد جئنا بقرب مربع نص الكتابة 😁

بصراحة أخي الكريم .. وأنا أيضا مش عارف إيش دخل حقل النص في هالموضوع  🙃.. وتفسيري البسيط إنو المؤشر بيروح تلقائيا لحقل النص بعد الانتقال .. ويبدو إنو كبسة الإنتر لسه مؤثرة عليه فبيعمل سطر جديد .. مع إني حاولت إني أكبس على الإنتر بنعومة شديدة حتى لا يستمر تأثيره لما بعد الانتقال 🙂 .. وهذه الصورة أرجو إنها ستوضح ما يحصل 

001.jpg.481f6323bbf7de25e38404d0800e6f03.jpg

ولاحظ أخي الكريم إنو الرقم لسه موجود في التكست بوكس .. فأنا مارست هوايتي في التعديل على الأكواد وأضفت سطرين، سطر لمسح التكست بوكس بعد الانتقال، والسطر اللي عالجت فيه موضوع السطر الجديد، بحيث ما يكون المؤشر بعد الانتقال في حقل النص .. ولكن هل هذا هو الحل الصحيح

    If DCount("*", "qry_tbl2", "HNO =" & Me.tn) = 0 Then
        MsgBox "الرقم غير موجود"
        Me.tn = ""
    Else
        Me.Recordset.FindFirst "hno=" & Me.tn
        Me.tn.SetFocus
        Me.tn = ""
    End If

 

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

اما الكود فيمكنك اختصاره كالتالي:

    If DCount("*", "qry_tbl2", "HNO =" & Me.tn) = 0 Then
        MsgBox "الرقم غير موجود"
    Else
        Me.Recordset.FindFirst "hno=" & Me.tn
    End If
      
        Me.tn.SetFocus
        Me.tn = ""      

 

 

ومع اني لا اعرف كيف وصل المؤشر هناك ، ولكن ،

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

image.png.d9f504fc41162c43a051a28bb89d4dc7.png

.

جعفر

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

الأخ الكريم جعفر .. تم المطلوب بحمد الله ، فجزاك الله خيراً

وأشكرك خاصة على التوضيحات والتنبيهات العامة التي تتفضل بها .. فهي مفيدة لي وأنا في هذه المرحلة: المرحلة الانتقالية من وورد إلى أكسس

وكل الشكر للإخوة الذي ساهموا معنا في هذا الموضع .. وأنا بصراحة لم أكن أظن أن هذا الموضوع سيأخذ كل هذه المحاولات .. كنت أظنه أسهل من ذلك وأنه إنما كان صعباً علي لكوني قليل الخبرة

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

معلش .. ممكن تعديل آخر ☺️

هل بالإمكان يعد كتابة الرقم خطأ وخروج الرسالة أن ينتقل المؤشر مباشرة للتكست بوكس (tn) لكتابة الرقم الصحيح

حاولت ذلك بإضافة سطر للكود لكن لم تنجح المحاولة .. وحتى مع تغيير (فهرس علامات الجدولة) المؤشر ينتقل معي لأي مكان إلا التكست بوكس 🤔

    If DCount("*", "qry_tbl2", "HNO =" & Me.tn) = 0 Then
        MsgBox "الرقم غير موجود"
        Me.tn.SetFocus
        Me.tn = ""
    Else
.
.
.

 

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

جزاك الله خيرا أخي جعفر .. تم تجاوز هذا الأمر

لكن ظهرت معي في الملف المرفق مشكلة أخرى 🙂

عند الكبس على المنظار (go) والتكست بوكس فارغ أو الرقم خطأ تخرج هذه الرسالة

 2021-02-07_23h25_52.jpg.bb5dcb4bfe28a5d923c601c867950847.jpg

لكن عند كتابة رقم بشكل صحيح لا مشكلة

وانتهت المشكلة عندما حذفت الكود  (Call tn_AfterUpdate)  .. وطبعا هذا لم يؤثر على عملية الانتقال بالكبس عليه .. فهل تصرفي صحيح

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

اترك كود المنظار مكانه ، وخلينا نتأكد من ان الرقم موجود قبل البحث :

Private Sub go_Click()

    Call tn_AfterUpdate
End Sub

Private Sub tn_AfterUpdate()

    If Len(Me.tn & "") = 0 Then
        MsgBox "رجاء ادخال رقم للبحث عنه"
    
    ElseIf DCount("*", "qry_tbl2", "HNO =" & Me.tn) = 0 Then
        MsgBox "الرقم غير موجود"
    
    Else
        Me.Recordset.FindFirst "hno=" & Me.tn
    End If
    
    Me.tn.SetFocus
    Me.tn = ""
    
End Sub

 

جعفر

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

شكلو هالمنظار غاوي غلبة .. 😁

لا مشكلة إذا كان الرقم صحيح أو ما في رقم

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

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

  • أفضل إجابة

شكرا على التدقيق 🙂

 

ولو اني ما اعرف ليش يصير هذا ، ولكن استعمل هذا الكود الآن:

Private Sub go_Click()

    Call tn_AfterUpdate
End Sub

Private Sub tn_AfterUpdate()
On Error GoTo err_tn_AfterUpdate

    If Len(Me.tn & "") = 0 Or DCount("*", "qry_tbl2", "HNO =" & Me.tn) = 0 Then
        MsgBox "الرقم غير موجود"
    Else
        Me.Recordset.FindFirst "hno=" & Me.tn
    End If
    
    
Exit_tn_AfterUpdate:

    Me.tn.SetFocus
    Me.tn = ""
    
    Exit Sub


err_tn_AfterUpdate:
    
    If Err.Number = 3075 Then
        'ignore
    Else
        MsgBox Err.Number & vbCrLf & Err, vbAbortRetryIgnore
    End If
    
    Resume Exit_tn_AfterUpdate
    
End Sub

 

جعفر

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

منذ ساعه, jjafferr said:

شكرا على التدقيق

أنا الذي أشكرك أخي الكريم على متابعة هذه الملاحظات في هذا الموضوع الذي لم أتوقع أن يتشعب بهذا الشكل

أنا جربت الكود على الملف الــ (big boss   🙂) وقمت بجولة تجارب عنييييفة .. والأمور تمام على جميع الاحتمالات وبحمد الله .. فجزاك الله خيرا 

ثم لاحظت أن الكود بعد تطبيق الخيارات الذي تفضلت بها بخصوص علامات الجدولة أصبح أسرع .. بمعنى أن سطر (Me.tn.SetFocus) كان يزيد لحظة خاطفة من البطء عندما كان المؤشر ينتقل من النص إلى التكست بوكس .. أما الآن فالمؤشر يبقى في التكست بوكس بدون (لحظة البطء الخاطفة 🙂)

لكن لابد من الابقاء على هذا السطر لأني لما حذفته عادت مشكلة أن المؤشر لا يقف دائما عند التكست بوكس عند استخدام المنظار

كل هذه المعاناة لأن الإنتر يضيف سطرا جديدا في بداية حقل النص ..

ويبقى هذا السؤال المحير: لماذا بقي تأثير الإنتر حتى بعد الانتقال وتنفيذ الكود .. أليس من المفترض أن أي كبسة يبقى مفعولها في الحقل أو الزر الذي كبست فيه .. 🤔

المهم أن موضوعنا قد انتهى على خير بحمد الله

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

32 دقائق مضت, nssj said:

المهم أن موضوعنا قد انتهى على خير بحمد الله

الحمدلله 🙂

 

32 دقائق مضت, nssj said:

لماذا بقي تأثير الإنتر حتى بعد الانتقال وتنفيذ الكود

لو كنت استطيع ان ارى هذا ، لحاولت تتبعه وايجاد حل ، ولكنه لم يحصل معي ، فما عندي جواب 😁

 

جعفر

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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information