2014-05-23 57 views
1

我有包含id和名稱字段的表x字段。 我想在列表中選擇名稱時顯示標識。使用條件在列表中顯示錶字段

我寫了這個,但它不起作用。 錯誤信息是:BOF或EOF或當前記錄已被刪除。 請求的操作需要當前記錄。

我想簡單的默認記錄是記錄1,所以怎麼了?

Dim con As Connection 
Dim rs As New Recordset 
Set con = CurrentProject.Connection 

rs.Open "select id from tbl where namen = '" & list1.ListIndex & "'", con, adOpenDynamic, adLockOptimistic 
ttt.SetFocus 
ttt.Text = rs!id 

感謝你的幫助 這麼多的無齒翼龍我改變了代碼是這樣

Private Sub list1_Click() 
Dim strSQL As String 
strSQL = "select id from tbl where namen = '" & list1.Value & "'" 
ttt.SetFocus 
ttt = DLookup("id", "tbl", "namen='" & list1.Value & "'") 
rs.Open strSQL, con, adOpenDynamic, adLockOptimistic 
End Sub 

,但我得到了當對象是打開這條消息 操作是不允許的?

我沒有使用VBA代碼添加的項目在List1我只是跟着,添加在List1窗體後顯示的窗口CUS我也有問題的代碼

,如果你請你能添加完整的代碼1和2

回答

0

您希望列表框的值不是ListIndex。 ListIndex包含一個數字,即列表框中當前選擇的從零開始的索引。您傳遞的內容類似於select id from tbl where namen = '13'由於沒有記錄匹配,您會收到該錯誤消息。

我真的推薦使用一個字符串來保存任何構造的SQL,以便您可以輕鬆地進行調試。如果你有

Dim strSQL As String 
strSQL = "select id from tbl where namen = '" & list1.Value & "'" 
Debug.Print strSQL 
rs.Open strSQL, con, adOpenDynamic, adLockOptimistic 

它會更容易閱讀和更容易調試。另外,你要打開一個記錄後立即檢查rs.BOF和RS.EOF:

If Not (rs.BOF Or rs.EOF) Then 
    'Do stuff 
Else 
    'No records in recordset 
End 

與VB文本框,你不能在VBA文本框使用。文本,除非文本框具有焦點。使用ttt.Value(或者只是ttt)。

如果你只是在尋找一個單值這樣你可以取代所有的代碼是這樣的:

Private Sub list1_Click() 
    ttt = DLookup("id", "tbl", "namen='" & list1.Value & "'") 
End Sub 

使用使用DLookup,而不是手動打開recordsest自己。我也會回到列表框嚮導。如果你把id放在第一列並且名字在第二列,那麼隱藏第一列(嚮導會幫你做到這一點),列表將以顯示的名字,但存儲的id。那麼你甚至不需要額外的文本框。該ID存儲在List1.Value中,名稱可用List1.Column(1)

+0

我在上面添加了新的評論,關於一個小問題:) – user3669569

相關問題