منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مشكلة ب distinct
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاتة

لدى فورم افتتاحى للبرنامج لاختيار السنة واسم وكلمة السر للمستخدم كما بالصورة

[attachment=1406]

يلاحظ تكرار السنة فى الكمبو ( حيث انها مكررة فى جدول الفواتير )
وذلك عند استخدام كود Rs5.Open "select my_year from transmaster

اما عند استخدام distinct

كالاتى
Rs5.Open "select distinct my_year from transmaster ", DB, adOpenStatic, adLockPessimistic
Rs5.MoveFirst

Dim yy As Integer
For yy = 0 To Rs5.RecordCount - 1
mydate_com.AddItem Rs5![my_year]
Rs5.MoveNext
Next yy

لا يوجد بيانات فى الكمبو ( الكمبو يكون فارغ )

ويوجد بيانات فى جدول اليوزر (اى ان الاتصال موجود )

مع العلم انة قاعدة اليانات SQL server 2008

والاتصال بقاعدة البيانات محلى (على الجهاز)

عن طريق فايل تكست udl

ولا يوجد تكرار للبيانات عند استخدام distinct مع قاعدة بيانات اكسس


وعند محاول انشاء فيو فى قاعدة البيانات .. فان الفيو يعمل جيد داخل السكوال

ولكن عند استدعاءه فى الكمبو ... يكون الكمبو ايضا بدون بيانات ؟؟؟؟؟

ارجوا المساعدة فى الامر
ارفق مشروعك او مثال ليتم التعديل عليه
السلام عليكم...

الخاصية RecordCount التابعة للكائن ADODB.Recordset تكون أحياناً مضللة! فعندما لا يدعم محرك قواعد البيانات هذه الخاصية أو لا يستطيع تحديد العدد الفعلي للسجلات فإن هذه الخاصية تعيد -1، و ربما هذا هو ما يجعل الحلقة لا تنفّذ.

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

لمعرفة ما إذا كانت مجموعة السجلات فارغة أم تحتوي على سجلات (واحد على الأقل) ضع الدالة التالية في Module:

كود :
Public Function IsEmptyRecordSet(ARecordSet As ADODB.Recordset) As Boolean
    If ARecordSet Is Nothing Then
        IsEmptyRecordSet = True
    ElseIf ARecordSet.State <> adStateOpen Then
        IsEmptyRecordSet = True
    ElseIf ARecordSet.BOF And ARecordSet.EOF Then
        IsEmptyRecordSet = True
    Else
        IsEmptyRecordSet = False
    End If
End Function

ثم استعملها حيثما تريد، مثلاً:

كود :
Rs5.Open "SELECT DISTINCT my_year FROM transmaster", DB, adOpenStatic, adLockPessimistic, adCmdText
If Not IsEmptyRecordSet(Rs5) Then
    Do While Not Rs5.EOF
         mydate_com.AddItem Rs5("my_year")
         Rs5.MoveNext
    Loop
    Rs5.Close    ' إذا لم تعد محتاجاً إليها
End If

* ملاحظة: لا تحتاج إلى استعمال MoveFirst بعد فتح المجموعة مباشرة لأنها تلقائياً ستكون عند أول سجل - إذا كان فيها سجلات.

نرجو الاستفادة و السلام.
تمام جدا استاذى

تسلم ايدك