2017-08-06 242 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