اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

استفهام حول استخدام الامر MoveLast & MoveFirst


Eng.Qassim
إذهب إلى أفضل إجابة Solved by ابوخليل,

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

 

السلام عليكم ورحمة الله وبركاته

في موضوع سابق لاستاذنا الكريم ابو خليل في موضوع (اهلاك الاصول الثابتة)...

تساؤلي هو لماذا استخدام جملة rs1.Movelast  وجملة rs1.MoveFirst... بالحقيقة افهم معناها بالعربي لكن لم افهم معناها البرمجي ..اي لماذا نطلب منه الذهاب لاخر السجل وبعدها الذهاب لاول السجل ..هذا اولا

ثانيا لماذا استخدما جملة DoCmd.RunSQL "DELETE TBL2.* FROM TBL2.. اي مالذي نستفيده من جملة الحذف ..

مع اعتزازي وتقديري للجميع

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

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

 

19 ساعات مضت, Eng.Qassim said:

جملة rs1.Movelast  وجملة rs1.MoveFirst... بالحقيقة افهم معناها بالعربي لكن لم افهم معناها البرمجي

 

اسمح لي اشرح لك الموضوع بطريقة سهلة :

اذا فتحت ملف اكسل ، وبه عدة سجلات ، ونفترض انه تم حفظ المؤشر على اول سجل ، او تفتح جدول في الاكسس :

1. اذا اردت ان تعرف عدد السجلات ، فتضطر الى سحب "شريط التمرير" العمودي (Vertical Scroll bar) الى الاسفل ، الى آخر سجل ، وبهذه الطريقة تعرف كم عدد السجلات ،

بالنسبة لعملية Recordset ، فتكتب rst.MoveLast لذهاب المؤشر الى آخر سجل ،

وطبعا لما السجلات تكون كثيرة ، فالوصول الى آخر سجل يأخذ بعض الوقت ،

2. بعد ان عرفت عدد السجلات ، ولتبدأ تقرأ السجلات ، تضطر الى سحب "شريط التمرير" الى الاعلى الى اول سجل ،

بالنسبة لعملية Recordset ، فتكتب rst.MoveFirst لذهاب المؤشر الى اول سجل ،

3. اذا بدأت البحث يدويا عن معلومة معينه ، فإنك تقرأ السجل ، ثم تنقل للسجل الذي اسفل منه ،

بالنسبة لعملية Recordset ، فتكتب rst.MoveNext ،

4. ولما توصل للنهاية ، واردت البحث عن شيء آخر ، فتضطر الى سحب "شريط التمرير" الى اعلى الى اول سجل مرة اخرى ،

بالنسبة لعملية Recordset ، فتكتب rst.MoveFirst لذهاب المؤشر الى اول سجل.

يعني هكذا:

	dim rst as dao.recordset
        dim RC as long
        dim i as long  
      
      set rst = currentdb.openrecordset ("Select * From tbl2")
      rst.moveLast
      rst.moveFirst
      RC= rst.recordcount
      
      for i = 1 to RC
      ...
      ...
      	rst.moveNext
      next i
      
      
      rst.close
      set rst= nothing

 

في حالات ، انت لا تريد ان تعرف عدد السجلات ، وانما تريد ان تبدأ تقرأ السجلات سجل سجل الى نهاية السجلات/الملف EOF 

فيصبح الكود:

	dim rst as dao.recordset
      
      set rst = currentdb.openrecordset ("Select * From tbl2")
      rst.moveFirst
      
      do until rst.EOF
      ...
      ...
      	rst.moveNext
      Loop
      
      
      rst.close
      set rst= nothing

.

مع العلم اننا لا نحتاج الى الذهاب الى اول سجل لما نفتح الملف ،

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

 

جملة الحذف هي لحذف بيانات الجدول 🙂

 

جعفر

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

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

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

4 دقائق مضت, Eng.Qassim said:

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

يجب ان تضع هذا السؤال في ذلك الموضوع ، حتى يقوم اخوي العود ابوخليل للرد عليه 🙂

 

جعفر

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

  • أفضل إجابة

شكرا لاخي جعفر للشرح والتوضيح

بالنسبة لحذف بيانات الجدول في الموضوع هناك

انه لدينا جدولين tbl1 و  tbl2

الجدول1 يحتوي على بيانات المشروع  والجدول2 هو الجدول الذي سوف تنسخ اليه نتيجة الإهلاك

فلما ننقر على الزر لتنفيذ الكود تظهر النتيجة في جدول2  ، ولكن حين ننقر مرة اخرى يتم تكرار النسخ  وهكذا ... الى مالا نهاية

فالحل هو عند كل نقرة على الزر يتم تفريغ الجدول2

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

السلام عليكم استاذ ابو خليل..فعلا اوقفت عمل جملة السكوال فتكررت النتائج مع كل ضغطة زر

جزاك الله خيرا وزادك من فضله ..الشكر موصول للاستاذ جعفر

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

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