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

ممكن (لمن عرف) مهام cursor في recordset

مغلق
بدأه slhslm في 9 مايو 2002 · 2 رد · 712 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ماهي مهام cursor location - cursor type

في الكائن recordset

اذا امكن التوسع في الشرح لتعم الفائده

وشكرا

(gift)

#2

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

الاخ الكريم

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

لست متخصص فى هذا الموضوع تماما ولكن اليك نظرة سريعة على حسب معلوماتي:

CursorLocation

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

وهناك نوعان adUseServer والثاني adUseClient

بمعنى قبل ان تفتح مجموعة سجلات Recordset اين سوف تكون السجلات المعادة سواء كانت جدول واحد او مجموعة من الحقول من عدة جداول بجملة Sql هل ترغب ان تكون السجلات المعادة اليك علي الجهاز الرئيسي للشبكة Server فى حالة adUseServer فان السجلات المعادة سوف تكون على الجهاز الرئيسي وهذة هي الحالة المثلي للعميل علي قاعدة بيانات كبيرة اى اكثر من 2000 سطر من البيانات كمثال.

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

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

1 - نفترض ان مجموعة سجلات الفواتير على الجهاز الرئيسي كلها adUseServer بعد ان يكتب المستخدم رقم الفاتورة يقوم البرنامج بالبحث سواء find او seek فى حالة فتح جدول عندما يجد الفاتورة يتم عمل حلقة تكرارية لعرض بياناتها.

2 - نفترض ان مجموعة السجلات كلها علي جهاز العميل adUseClient هذا افتراض خاطيء لان مجموعة السجلات كبيرة 20000 سطر فاتورة مثلا وتصميم خاطيء.

3 - وهو الافتراض الامثل

تكون مجموعة السجلات على جهاز العميل adUseClient ولكن لا يتم فتح مجموعة السجلات الا بعد ان يكتب المستخدم رقم الفاتورة ويقوم البرنامج بفتح مجموعة السجلات بناءا على رقم الفاتورة بافتراض ان لديك

فورم به textbox لرقم الفاتورة وكومندبوتن CommandButton للبحث عن الفاتورة

Option Explicit

Dim Cn As New Adodb.Connection

Dim RS As New Adodb.RecordSet

Dim StrSql As string

Private sub FormLoad()

Set cn = "Providerm>>>>>>>>>>>>>>>>>>"

end sub

Private Sub Command1()

if Cstr(text1) = "" then

msgbox "لم يتم ادخال رقم الفاتورة"

exit sub

end if

if Rs.State = 1 then Rs.close

Rs.adUseClient

Rs.Open "Select * from InvoiceTable Where Inv_Id ='" & Cstr(text1) & "'" ,Cn, adOpenDynamic,AdlockOptimistic,adCmdtext

if Rs.eof = true and Rs.bof = true then

msgbox "لا يوجد فاتورة بهذا الرقم "

exit sub

else

msgbox "الفاتورة موجودة ويمكنك العمل عليها الان"

end if

end sub

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

وتختلف طرق تصميم البرامج من مبرمج الى اخر وايضا حسب الحاجة للبيانات هل يكون البيانات المعادة على الجهاز الخادم ام العميل القاعدة العامة لذلك هي حجم السجلات او السطور المعادة اذا كان كبير اتركه على جهاز الخادم واذا كان قليل اى من سطر الى 2000 او 3000 يمكن ان يكون علي جهاز العميل ولكن عند احضار البيانات الى جهاز العميل فانك تستهلك وقت لاحضار البيانات وايضا اذا استخدمت الامر Sort لمجموعة السجلات فانها يجب ان تكون على جهاز العميل وتستهلك ايضا وقت لذلك.

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

وتقبل تحياتي

#3

شكرا اخوي محمد لقد افتيت فافدت

بس عملية seek لايقبلها جانب السيرفر فقط ممكن تكون شغالة على جانب العميل والا انا مخطئ مع العلم انها اسهل واسرع

ولك كل التقدير (f)

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

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