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

تحويل استعلام إلى كود (للترقيم المتسلسل)


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

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

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

والمطلوب القيام بهذه العملية من خلال كود في النموذج على شاكلة

DoCmd.RunSQL "UPDATE ..

لاستعماله ضمن أكواد أخرى عند اللزوم

ثم لا حظت أن هذا الاستعلام يعمل ببطء شديد في الملفات الكبييييرة

فهل توجد صيغة أخرى أكثر سرعة تؤدي المطلوب .. سواء كاستعلام أو كود

سجلات 01.rar

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

شكرا لك أخي الكريم Barna

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

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

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

شكرا لك أخي الكريم Barna

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

جرب المرفق ..... واعلمنا هل تغيرت السرعة أم لا ....

 

سجلات 01.accdb

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

بارك الله فيك أخي الكريم .. يعمل بسرعة كبيرة بحمد الله

ولكن توجد مشكلة .. في بعض الجداول ظهرت رسالة

 001.jpg.5288ee8dbb77291a7dc911a9134df468.jpg

وعند الرجوع للجدول يتضح أن الترقيم يبدأ بـ (10000) أو (10000) ثم يحدث خلل في الترقيم

وبعد البحث والتحري 🔍 وتكرار التجارب يظهر أن السبب وجود فارق كبير في ترقيم بعض الأحاديث .. كما في الصورة

 002.jpg.dbabb533d81e5371fbdbacbe2d6af10f.jpg

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

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

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

استبدل الكود بهذا أخي الكريم

Public Function re_Num()
    Dim rst As DAO.Recordset
    Dim i As Long
    Dim RC As Long
    Set rst = CurrentDb.OpenRecordset("Select * From b14")
    rst.MoveLast: rst.MoveFirst
    RC = rst.RecordCount
    For i = 0 To RC - 1
        rst.Edit
            rst!HNO = 1 + i
        rst.Update
        rst.MoveNext
    Next i
    rst.Close: Set rst = Nothing
    MsgBox "Done"
  End Function

 

تم تعديل بواسطه Barna
  • Like 5
رابط هذا التعليق
شارك

أحسن الله إليك أخي الكريم .. تم المطلوب بحمد الله

والآن نأتي لبعض التعديلات إن أمكن 😁

كنت سأطلب منك أخي الكريم أمرين .. يظهر أني استطعت فعلهما :clapping: .. فهل لك أن تنظر فيما فعلته وهل هو صواب

أولا: كنت سأطلب إن كان بالإمكان جعل الترقيم يبدأ من رقم معين، وأجريت بعض التجارب ونجحت أحدها، فإذا أردت ان يبدأ الترقيم من رقم (5) مثلا

عدلت على الكود

rst!HNO = 5 + i

والنتيجة كانت تمام .. ولكن هل هذا هو التصرف الصحيح في هذه الحالة ؟؟

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

استعلام لحذف سجلات من .. إلى

 وعدلت على الوحدة النمطية لتصبح هكذا 

Function re_Num(ByVal strTableName As String, ByVal strFieldName As String)
    Dim rst As DAO.Recordset
    Dim i As Long
    Dim RC As Long
    Set rst = CurrentDb.OpenRecordset("Select * From [" & strTableName & "] order by [" & strTableName & "].[" & strFieldName & "]")
    rst.MoveLast: rst.MoveFirst
..
..
..

وفي كود الاستدعاء

Call re_Num("**", "HNO")

حيث ** اسم الجدول المطلوب

وزبطت معي :jump:

والآن .. تعديل صعب علي ..

هل يمكن التعديل على هذا الكود بحيث يبدأ الترقيم من الحديث التالي إلى آخر الجدول بحيث يزداد الترقيم رقمين

يعني إذا كان رقم الحديث التالي (500) يصبح (502) ويكمل الترقيم متسلسلا بناء على ذلك إلى آخر الجدول

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

8 ساعات مضت, Barna said:

طيب شوف كدا .... يارب يكون المطلوب

بارك الله فيك أخي الكريم .. هو المطلوب مع بعض التعديلات التي اخترعتُها وزبطت .. :clapping:

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

 010.jpg.186fa7e8f93586ea3e01996bafc5a664.jpg

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

 011.jpg.369e0219d926d85e67f66bf9a720a322.jpg

وبعد البحث والتحري 🔍 .. وصلت للمطلوب بأن استبدلت العبارة

    

j = j + 2

       بهذه

j = j + 1

فحصلت على النتيجة المطلوبة كما في الصورة الأولى

فهل هذا هو التصرف السليم أخي الكريم .. أم هناك إجراء أفضل ؟؟

التعديل الثاني: بعد تجربة الكود على أحد الملفات الكبيرة التي عندي ظهر خلل في الترقيم إذ لم يكن يرقم كل الأحاديث، وظهر لي أن السبب هو وجود (ID) في الكود، بينما الملفات التي عندي كلها مرتبة على (HNO) وقد يحدث اختلاف كبير بين الترقيم في (ID) & (HNO) بسبب حذف الأحاديث وإضافتها ونقلها

ولكن حصلت على المطلوب بلا مشاكل عندما جعلى الكود يعتمد الترتيب على (HNO) باستبدال هذه العبارة

" WHERE (((" & strTableName & ".ID)>" & strbar & "))")

 بالتالية

" WHERE (((" & strTableName & ".HNO)>" & strtxt & "))")

 

ثالثا: كنت سأطلب تعديلا آخر .. وهو ما العمل إذا كنت أريد أن يبدأ الترقيم من الحديث الذي أنا فيه وليس من التالي .. وبعد التجارب حصلت على المطلوب باستبدال (>) بـ (>=)

 يعني النتائج إلى الآن تمام بحمد الله .. فبارك الله فيك أخي الكريم

وهذا الملف المرفق بعد اختراعاتي .. لتنظر فيها يمكن تكون اختراعات مش مزبوطة ..

وإذا كانت مزبوطة .. فيأتي دور التعديل الرابع 😃

وهو عند كبس زر (إعادة الترقيم) تخرج رسالة أو صندوق: ابدأ ترقيم هذا الجدول من رقم ( .. ) وبعد إدخال الرقم المطلوب البدء منه ينفذ عملية الترقيم بناء عليه

وإذا تكرمت أخي الكريم بإجراء هذا التعديل فسوف أقيس عليه الأمور الأخرى:

اجعل رقم هذا الحديث هو ( .. ) وأكمل الترقيم تصاعديا

اجعل رقم الحديث التالي هو ( .. ) وأكمل الترقيم تصاعديا

وإذا كنت تلميذ شاطر وزبطت معي فسوف يكون التعديل الأخير بإذن الله  🙂 .. وشكرا لك أخي الكريم على صبرك علي

سجلات 05.rar

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

1 ساعه مضت, nssj said:

 دور التعديل الرابع 😃

وهو عند كبس زر (إعادة الترقيم) تخرج رسالة أو صندوق: ابدأ ترقيم هذا الجدول من رقم ( .. ) وبعد إدخال الرقم المطلوب البدء منه ينفذ عملية الترقيم بناء عليه

لم افهم .... هل تقصد ان الترقيم الذي تم اجراءه في السابق يتم بعد تحديد الرقم المطلوب من خلال نموذج منبثق ..؟؟

 

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

  • أفضل إجابة
11 ساعات مضت, nssj said:

نعم أخي الكريم .. يبدأ الترقيم من رقم يتم إدخاله من نموذج أو صندوق رسائل

انظر المرفق عملت على اول زرار .... طبق انت على بقية الازرة 

 

1.png

2.png

سجلات 06.accdb

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

 أحسن الله إليك أخي الكريم

ولكن الظاهر إني تلميذ (نص شاطر) 😐

من أول ما شفت الطريقة الأولى وأنا نازل تجارب واختراعات .. مش على التطبيق على بقية الأزرار .. الحمد لله هاي زبطت معي .. 😁

بس كنت بحاول أخلي المؤشر يرجع للصفحة اللي كنت فيها وكبست فيها الزر

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

وحاولت أطبق نفس الموال على الكود بتاعنا .. وفشلت كللللللل التجارب 😒

والآن شفت الطريقة الثانية .. ولسه هلأ بدي أبدأ تجارب عليها 🙂

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

1 ساعه مضت, nssj said:

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

فقط احذف هذا من الكود لديك ...

Me.Requery

 

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

نتيجة التجارب إلى الآن ..

بالطريقة الأولى تم التطبيق على الزرين الآخرين بحيث يبدأ الترقيم من الحديث الحالي أو التالي

" WHERE (((" & strTableName & ".HNO)>=" & strbar & "))")

وفي كود الاستدعاء

Call re_Num3("b14", "HNO", str, Me.HNO)

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

Call re_Num("b14", "HNO", TempVars("barna"), Forms!b14.bar)

وجربت تغييره إلى

.. .. .. Forms!b14.HNO)

 .. .. .. Forms!b14!HNO)

.. .. .. Forms!b14!bar)

وما زبطت .. شكلو الطريقة الأولى أسهل 😃

6 دقائق مضت, kanory said:

فقط احذف هذا من الكود لديك ...

شكرا لك أخي الكريم .. يعني  كل التجارب الفاشلة كان حلها حذف هالسطر  😂

  • Haha 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