2014-03-31 68 views
0

我想用Access中的查詢結果填充組合框。我只是沒有看到如何去做。據我所知,必須先創建一個記錄集,將查詢結果讀入記錄集,然後將記錄集寫入組合框的行源屬性。它是否正確?有一個我可以遵循的簡單例子嗎?我在任何其他線程中都沒有找到。如何從數據庫查詢填充組合框?

這裏是到目前爲止我嘗試:

Dim RS As Recordset 
    Dim myDB As Database 

    Set RS = myDB.OpenRecordset("SourcesNotDisposed", dbOpenDynaset) 
    Do While Not RS.EOF 
    With Me.cmbSN 
     RowSource.AddItem 
    End With 
    Loop 

有了這個代碼,我在行來源行收到「所需的對象」的錯誤。 cmbSN有數據屬性: 行源類型=表/查詢 綁定列= 0 限制列出=是 允許值列表編輯=是 繼承值列表=是 只顯示一行源=無

查詢只有一個所謂的「序列號」

在此先感謝

+0

不錯的教程http://www.fontstuff.com/vba/vbatut10.htm – BlackPearl

回答

1

我想你可能需要在開始循環之前做一個「第一讀取記錄」可見列。

在Do-While循環之前嘗試使用RS.MoveFirst

我認爲你可能還需要在循環內部做一個.MoveNext,就在Loop聲明之前;我在VBA中做了這樣的事情已經很久了,但是在我看來,它會一遍又一遍地添加相同的項目,直到內存用完爲止?我不認爲AddItem本身將記錄指針移動到下一個記錄。

您可能還需要檢查是否MOVENEXT關閉記錄集的結尾會發生什麼......

HTH :)

+0

謝謝你。我忽略了這些命令。它有一點幫助,但是我仍然在「.RowSource.AddItem」處得到「Invalid qualifier」錯誤。如果刪除「.RowSource」,我會在「.AddItem」的引用中得到「Argument not optional」要添加的項目。 – user3479532

2

下面的代碼插入表中的字段爲組合框。下的OnEnter事件添加該代碼組合的

Private Sub CM_Enter() 

    'CM is combobox name 

    Dim strItem1 As String 
    Dim strItem2 As String 

    On Error Resume Next 

    Dim i As Integer 'Index for loop 
    With Me.CM 
    .RowSourceType = "Value List" 'Set rowsource type as Value list 
    .RowSource = "" 'Clean combo contents 
    End With 

'Loop through field names of table and add them to your combo: 
    For i = 1 To CurrentDb.TableDefs("table1").Fields.Count - 1 
    Me.CM.AddItem (CurrentDb.TableDefs("table1").Fields(i - 1).Name) 

    Next i 

'/***Delete unwanted items from the combo 
    strItem1 = "col1" 
    strItem2 = "col2" 
    'CM.RemoveItem strItem1 
    'CM.RemoveItem strItem2 

    End Sub 
3

感謝所有的建議每一個人。我已經完成了,找到了一個非常簡單的解決方案。將組合框的Row Source Type屬性設置爲Table/Query,我需要做的就是將Row Source屬性設置爲有效的SQL字符串。例如:

strSQL = "SELECT Sources.[Serial Number] FROM Sources " & _ 
     "WHERE (((Sources.Nuclide)='Cf-252') " & _ 
     "AND ((Sources.[Location/Status])<>'Disposed')) " & _ 
     "ORDER BY Sources.[Serial Number];" 
Me.cmbItem.RowSource = strSQL 
Me.cmbItem.Requery