MS Access VBA代码

时间:2017-08-06 17:14:38

标签: vba ms-access

我是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完全不熟悉我正在学习使用一些教程,但我的水平仍然很低。再次非常感谢你。

2 个答案:

答案 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函数似乎有限,但我经常嵌套一些以获得连接结果。只是想象力的问题。

查看这个漂亮的网站了解功能详情 -

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