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

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

قام بنشر

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

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

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

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

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

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

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

DoCmd.GoToRecord , , acGoTo, HNO(tn)

 

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

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

انتقال.accdbFetching info...

قام بنشر

الأخ الكريم 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

 

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

تحياتي.

 

 

انتقال.accdbFetching info...

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

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

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

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

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

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

قام بنشر

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

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

قام بنشر
  في 2‏/2‏/2021 at 11:39, nssj said:

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

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

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

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

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

Expand  

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

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

  اقتباس

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

Expand  

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

    'clear TextBox tn after search
    tn = Null

 

  اقتباس

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

Expand  

 

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

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

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

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

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

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

 

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

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

قام بنشر (معدل)
  في 2‏/2‏/2021 at 15:59, SEMO.Pa3x said:

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

Expand  

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

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

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.zipFetching info...

  • Like 2
قام بنشر

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

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

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

قام بنشر
  في 2‏/2‏/2021 at 20:40, nssj said:

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

Expand  

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

call tn_AfterUpdate

 

 

  في 2‏/2‏/2021 at 20:40, nssj said:

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

Expand  

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

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

image.png.209af52135951ea025ba6bd01c9fd907.png

.

 

 

  في 2‏/2‏/2021 at 20:40, nssj said:

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

Expand  

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

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

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

 

جعفر

قام بنشر
  في 3‏/2‏/2021 at 07:24, jjafferr said:

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

Expand  

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

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
قام بنشر
  في 8‏/2‏/2021 at 09:17, jjafferr said:

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

Expand  

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

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

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

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

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

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

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

قام بنشر
  في 8‏/2‏/2021 at 11:19, nssj said:

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

Expand  

الحمدلله 🙂

 

  في 8‏/2‏/2021 at 11:19, nssj said:

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

Expand  

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

 

جعفر

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