PDA

View Full Version : combo box



saadatdoost
چهارشنبه 21 تیر 1385, 09:28 صبح
مشکل این کد چیه که combo box را خالی نشون می ده:


Option Explicit
Global gCnn As ADODB.Connection
Global SQL As String
Public Sub FillCombo(pCombo As ComboBox, pField As String, pTable As String, Optional WhereClause As String = "", Optional AddBlank As Boolean = False, Optional ClearFirst As Boolean = True, Optional PreserveValue As Boolean = True)
Dim pRs As ADODB.Recordset
Dim theTemp As String, TempArray() As String, i As Long
Dim OrigValue As String
On Error Resume Next
If PreserveValue Then OrigValue = pCombo
If ClearFirst Then pCombo.Clear
If AddBlank Then pCombo.AddItem ""
Set pRs = New ADODB.Recordset
Set pRs = gCnn.Execute("Select Distinct " & pField & " From " & pTable & " " & WhereClause & " Order by " & pField)
If Not pRs.EOF Then
theTemp = Trim$(pRs.GetString(adClipString, , "", vbCrLf))
TempArray = Split(theTemp, vbCrLf)
For i = 0 To UBound(TempArray)
If Trim$(TempArray(i)) <> "" Then pCombo.AddItem Trim$(TempArray(i))
Next i
End If
If PreserveValue Then pCombo = OrigValue
End Sub


Private Sub Form_Load()

FillCombo Combo1, "country_name", "country", False, True, True

End Sub

Javadxp
دوشنبه 09 مرداد 1385, 18:20 عصر
اولا باید خط Global gCnn As ADODB.Connection رو به Global gCnn As New ADODB.Connection تغییر بدی.
ثانیا قبل از Execute کردن باید کانکشن رو Open کنی :

gCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/main.mdb"

بعدشم اگه نمیخوای از WhereClause استفاده کنی، جاشو خالی بذاری نه اینکه False بفرستی:
FillCombo Combo1, "country_name", "country", , True, True
البته اگه این کدها رو تو فرم نوشتی باید Global رو به Public تغییر بدی.
کد کل به این صورت در میاد (من فرض کردم که دیتابیس شما c:/main.mdb هست:


Option Explicit
Public gCnn As New ADODB.Connection
Public SQL As String
Public Sub FillCombo(pCombo As ComboBox, pField As String, pTable As String, Optional WhereClause As String = "", Optional AddBlank As Boolean = False, Optional ClearFirst As Boolean = True, Optional PreserveValue As Boolean = True)
Dim pRs As ADODB.Recordset
Dim theTemp As String, TempArray() As String, i As Long
Dim OrigValue As String
On Error Resume Next
If PreserveValue Then OrigValue = pCombo
If ClearFirst Then pCombo.Clear
If AddBlank Then pCombo.AddItem ""
Set pRs = New ADODB.Recordset

Set pRs = gCnn.Execute("Select Distinct " & pField & " From " & pTable & " " & WhereClause & " Order by " & pField)
If Not pRs.EOF Then
theTemp = Trim$(pRs.GetString(adClipString, , "", vbCrLf))
TempArray = Split(theTemp, vbCrLf)
For i = 0 To UBound(TempArray)
If Trim$(TempArray(i)) <> "" Then pCombo.AddItem Trim$(TempArray(i))
Next i
End If
If PreserveValue Then pCombo = OrigValue
End Sub


Private Sub Form_Load()
gCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/main.mdb"
FillCombo Combo1, "country_name", "country", , True, True

End Sub