الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة بكائن البيانات Recordset

مغلق
بدأه MMA_EG_Cairo في 28 يونيو 2007 · 4 رد · 557 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

إخواني الكرام ، تحية طيبة وبعد،

في الحقيقة أنا عضو جديد في هذا المنتدي العريق ، فأتمني معاونتكم

في مشكلتي المتعلقة بكائن Recordset والمتعلقة بمكتبة ADODB !!

في الحقيقة أنا عرضت هذا الموضوع في منتدي المحيط ، ولم أجد إجابة

كاملة فأتمني من مساعدتكم !!

السؤال :

--------

عند إنشاء Recordset نعطي له خاصية CursorLocation

بحيث أن تساوي adUseClient ، وذلك للقدرة علي إستخدام

أوامر Filter,MoveFirst,MovePrevious,MoveNext,MoveLast

وكذلك أوامر PageSize,AbsolutePage,PageCount

ولكن ألاحظ بحدوث مشكلة عند إجراء فتح للبيانات Rs.Open

وهي قراءة كافة السجلات وتحميلاها علي Recordset ، والمشكلة

هنا ليست في جدول يحتوي علي 100 أو 200 أو حتي 1000 سجل

بل المشكلة عند فتح جدول به ما يقرب الي 400000 سجل وتحميلة

مثلاً علي جريد دفعة واحدة .

يؤدي الي حدوث بطأ لعرض البيانات للمستخد.

ولكن في نفس الوقت لا يمكن الغني عن ضبط خاصية

CursorLocation .

-------------------------------------------------------

وسؤالي هنا ، ما هو حل هذه المشكلة ، وأتمني السرعة

في الرد ، وأتمني أن أكون وضحت لكم مشكلتي .

وشكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#2

أخي الفاضل

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

strSQL = "select * from Tb1 where [ID]  in ( 1,2,3,4 ) "
Rs.Open strSQL,db ........

Tb1 = اسم الجدول في قاعدة البيانات

أتمنى أن أكون قد أضفت مفيداً ..

#3

بالفعل أخي الكريم ، أنت علي حق ،

ودائماً أستخدم الكود التالي لإجراء التنقل بين السجلات :

''الجدول هو.
	Emp(Emp_ID,Emp_Code,Emp_Name)
	''مع العلم أن الحقل الأول هو حقل ترقيم تلقائي.




''الإنتقال الي السجل الأول.
strSql = "Select * From Emp Where Emp_ID = (Select Min(Emp_ID) From Emp)"

''الإنتقال الي السجل الأخير.
strSql = "Select * From Emp Where Emp_ID = (Select Max(Emp_ID) From Emp)"

''الإنتقال الي السجل السابق.
strSql = "Select * From Emp Where Emp_ID = (Select Max(Emp_ID) From Emp Where Emp_ID < " & logIDSerial & ")"

''الإنتقال الي السجل التالي.
strSql = "Select * From Emp Where Emp_ID = (Select Min(Emp_ID) From Emp Where Emp_ID > " & logIDSerial & ")"

ولكن أخي الكريم ، في حالة وجود حوالي 700000 سجل بالجدول يحدث بطء للجمل السابقة بالذات في جملة SubQuery والتي تحدد أكبر أو أقل Max,Min سجل

فما هو الحل ؟

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#4

أخي الفاضل ..

في الجمل التي تفضلت بعرضها ..

لا زلت تعاود الاتصال بالبيانات في كل مرّة تتنقل فيها ..

ما أقترحه ( رغم قلّة علمي ) :

أن تنشيء الـ Recordset من خلال استعلام مشروط

ثم تتركه مفتوحاً و تتنقل بين السجلات كالتالي :

rs.MoveFirst
rs.MoveLast
rs.MovePrevious
rs.MoveNext
rs.Move (?)
#5

أخي الكريم ،

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

Filter - Find - PageSize

فعلي سبيل المثال إذا قمت بإجراء فترة علي ال Rs يحتوي علي مليون سجل سيقوم بإيقاف عمل البرنامج

فترة طويلة .

هناك أمر آخر ، إذا قمت بإضافة أوامر الترتيب للبيانات Order By سيؤدي نفس المشكة

ما أقصدة أنا أرغب في إخراج سجل سجل دون إيقاف البرنامج أي لحظة مهما كانت الأسباب

وشكراً علي الرد وجزاك الله كل خير

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

هذا الموضوع مغلق.

مواضيع مشابهة