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

نسخة كاملة : ممكن كود لملئ combo , list
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
ممكن كود لملئ combo و list



طبعا شكرا لكل من (حريف برمجه,ناجي ابراهيم , vbcoder)
مرحبا المبرمج البسيط ،، العفو عزيزي ما سوينا غير الواجب

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

بخصوص تعبئة كومبو او لست هذا الكود

كود :
If rs.State = 1 Then rs.Close
rs.Open "SELECT * from item", cn, adOpenKeyset, adLockPessimistic

Combo1.Clear
List1.Clear

Do While rs.EOF = False
Combo1.AddItem rs!num
List1.AddItem rs!num
rs.MoveNext
Loop

rs.Close
هذة المشكله

السلام عليكم...

المعذرة يا أخي "المبرمج البسيط" إن تأخرنا عليك قليلاً... فالجواب كان جاهزاً منذ استلامي للمرفق، و لكني انشغلت عن الرد قليلاً.

أحببت أن يكون الحل عاماً لكل المشروع و ليس خاصاً بنافذة واحدة، و لذلك فالحل كالتالي:
1. انسخ الدالة و الإجراء التاليين إلى الـ 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

' إجراء تعبئة اللائحة
Public Sub FillListFromTable(AListControl As Control, ByVal ATable As String, ByVal AListField As String, Optional ByVal AKeyField As String = "")
    Dim TempCnn As New ADODB.Connection
    Dim RSList As New ADODB.Recordset
    Dim SQLStr As String
    Dim ItemIndex As Long
    
    If (TypeOf AListControl Is ListBox) Or (TypeOf AListControl Is ComboBox) Then
        AListControl.Clear
        
        SQLStr = "SELECT [" & AListField & "] AS ListField"
        
        AKeyField = Trim$(AKeyField)
        If AKeyField <> "" Then
            SQLStr = SQLStr & ", [" & AKeyField & "] AS KeyField"
        End If
        SQLStr = SQLStr & " FROM [" & ATable & "]"
        
        If TempCnn.State = 1 Then TempCnn.Close
        TempCnn.CursorLocation = adUseClient
        TempCnn.Provider = "Microsoft.Jet.OLEDB.4.0;"
        TempCnn.Open App.Path & "\database.mdb"
        
        RSList.Open SQLStr, TempCnn, adOpenStatic, adLockOptimistic
        If Not IsEmptyRecordSet(RSList) Then
            RSList.MoveFirst
            Do While Not RSList.EOF
                If Not IsNull(RSList("ListField")) Then
                    AListControl.AddItem RSList("ListField")
                    If AKeyField <> "" Then
                        If Not IsNull(RSList("KeyField")) Then
                            If IsNumeric(RSList("KeyField")) Then
                                AListControl.ItemData(AListControl.NewIndex) = RSList("KeyField")
                            End If
                        End If
                    End If
                End If
                RSList.MoveNext
            Loop
        End If
        RSList.Close
        Set RSList = Nothing
        TempCnn.Close
        Set TempCnn = Nothing
    End If
End Sub

الدالة IsEmptyRecordSet تتأكد من وجود سجلات في مجموعة السجلات (Recordset) حيث تعيد True في حالة وجود سجلات، و تعيد False إذا لم يكن هناك سجلات.

الإجراء FillListFromTable هو الذي يقوم بتعبئة اللائحة. اللائحة يمكن أن تكون ComboBox أو ListBox. أما بارامتراته فهي كالتالي:
= البارامتر AListControl: اسم اللائحة، أي اسم الـ ComboBox أو الـ ListBox الذي تريد تعبئته.
= البارامتر ATable: اسم الجدول الذي تريد تعبئة البيانات منه.
= البارامتر AListField: اسم الحقل الذي يحتوي على البيانات المطلوب تعبئتها في اللائحة.
= البارامتر AKeyField: بارامتر اختياري و قيمته الافتراضية نص فارغ (Empty string) قد تستعمله لربط القيم المعبأة في اللائحة بأرقام من حقل عددي في الجدول. بما أنه اختياري فإنه يمكننا إهماله عند الاستدعاء.

و لتعبئة اللائحة قم باستدعاء الإجراء، مثلاً:
كود :
FillListFromTable List1, "item", "num"
FillListFromTable Combo1, "item", "num"

* الكود السابق جربته على برنامجك نفسه و يعمل.

* بالمناسبة: الخطأ الذي أشرت إليه في مشاركتك الأخيرة يعني أنك تحاول فتح الـ RS قبل - أو دون - استدعاء الإجراء conn لفتح الاتصال.

المعذرة مرة أخرى على التأخير.

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