我是MS Access新手,想在文本框1(text_in)中键入EmployeeID,按下按钮后,结果查询(一个唯一值,例如从表中取得的员工名字)打印出来text box2(text_out)。
到目前为止,我们有以下代码:
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语言实现查询的结构。
伙计们,非常感谢你们!我花了一个多小时才成功地将两个解决方案都应用到我的数据库文件中。正如我写的那样,我对Ms-access完全不熟悉我正在学习使用一些教程,但我的水平仍然很低。再次非常感谢你。
答案 0 :(得分:1)
您不需要查询来执行此操作。只需设置text2的 ControlSource :
=DLookup("FirstName","Employee","EmployeeId=" & [text_in] & "")
答案 1 :(得分: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
我不能告诉你这是什么。您需要更好地利用记录集以及如何使用字符串值作为sql语句。
您也不需要创建一个变量来存储文本框值 - 您可以直接在sql语句中使用它。
同样非常重要的是要有良好的错误处理,因为挂起记录集对象可能会非常麻烦。
编辑 - 我扩展了在VBA中使用字符串sql语句的其他方法
DoCmd.RunSQl strSql
或者
DoCmd.Execute strSql
这两个都适用于UPDATE或INSERT。
然后,就像Gustav指出的那样,你有各种D函数,它们基本上都是具有一些限制的紧凑查询。但是,它们通常可以省去必须执行打开,完成和关闭记录集所涉及的所有输入的麻烦。尽管D函数似乎有限,但我经常嵌套一些以获得连接结果。只是想象力的问题。
查看这个漂亮的网站了解功能详情 -