2017-08-06 127 views
-3

我是MS Access的新手,想要在文本框1(text_in)中鍵入EmployeeID,並且在按下按鈕後,結果查詢(一個唯一值,例如從表中抽取的員工名字)是打印在文本框2(text_out)中。MS Access VBA代碼

到目前爲止有以下代碼:

Private Sub btn_get_data_Click() 

Dim db As DAO.Database 
Dim rs As DAO.Recordset 
'declaration of database on recordset objects 
Dim strSQL As String 

Dim a As String 
a = text_in.Value 

Set db = CurrentDb 
Set rs = db.OpenRecordset("Employee") 

strSQL = "SELECT Employee.FirstName FROM Employee WHERE Employee.EmployeeId=" & a 

Set db = Nothing 
Set rs = Nothing 

End Sub 

我試圖尋找在許多地方,一個解決方案,但我不明白,在MS進入VBA用於實現從常規的SQL語言查詢的結構。

夥計們,非常感謝你!我花了一個多小時纔將兩種解決方案成功實施到我的數據庫文件中。正如我寫的,我對女士訪問完全陌生,我正在學習使用一些教程,但我的水平仍然很低。再次感謝你。

+2

無法設置文本值的查詢語句。這是什麼目的?你爲什麼不用組合框來選擇員工?可以將多列組合框設置爲具有Employee_ID作爲其值,但顯示員工姓名。 – June7

回答

1
Private Sub btn_get_data_Click() 

on error goto errorCatch 

Dim db As DAO.Database 
Dim rs As DAO.Recordset 
Dim strSQL As String 

Set db = CurrentDb 

strSQL = "SELECT Employee.FirstName FROM Employee WHERE Employee.EmployeeId=" & Me.text_in.Value & ";" 

Set rs = db.OpenRecordset(strSql, DbOpenDynaset) 

If rs.RecordCount > 0 Then 
     debug.print; rs!FirstName 
     Me.text_out.Value = rs!FirstName 
End if 

Cleanup: 
Set db = Nothing 
Set rs = Nothing 
Exit Sub 

errorCatch: 
debug.print; err.Number 
debug.print; Err.Description 

GoTo Cleanup 

End Sub 

我不能告訴什麼youre後是這樣的。您需要更好地利用記錄集以及如何將字符串值用作sql語句。

你也不需要創建一個變量來存儲文本框的值,你可以直接在你的sql語句中使用它。

此外,具有良好的錯誤處理非常重要,因爲懸掛記錄集對象在屁股中可能會非常痛苦。

編輯 - 其他方式使用VBA內串

SQL語句生病擴大
DoCmd.RunSQl strSql 

或者

DoCmd.Execute strSql 

這兩者都是非常適合的UPDATE或INSERT的。然後,就像古斯塔夫指出的那樣,你有各種D函數,它們基本上是緊湊的查詢,但有一些限制。但是,它們通常可以幫助您省去打開,使用和關閉記錄集所需的所有打字工作。儘管D函數看起來有限,但我經常嵌套一些來獲取連接結果。只是一個想象的問題。

看看這個漂亮的網站功能的詳細信息 -

https://www.techonthenet.com/access/functions/index.php

+0

另外值得一提的是古斯塔夫是正確的 - 你不需要爲此寫一個查詢。不過,我認爲這對你來說會非常有幫助,因爲你看起來很新。我建議閱讀記錄集 –

1

你不需要查詢來做到這一點。只需設置控件的文本2

=DLookup("FirstName","Employee","EmployeeId=" & [text_in] & "") 
+1

你其實不需要最後一個雙引號:) –

+1

我知道,但它使表達式類似於字符串或日期。 – Gustav