如何根据输入的特定项目从表中返回多个值?

时间:2019-05-17 01:10:30

标签: vba ms-access access-vba

我尝试对Sub和Function都使用Tooling_No_AfterUpdate(),但是它提示我“检测到歧义名称”,因为我知道我不能使用相同的标识符。然后,我更改了标识符并将其设置为public function,但是它不起作用,并提示我“未定义用户定义类型”。

我正在创建一个表单,供用户输入工具编号以了解其可以在多个位置存储的位置。我尝试使用ADODB.Recordset从资产表中获取数据。所以这是我尝试过的:

Private Function Tooling_No_Enter() As ADODB.Recordset
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
Set Tooling_No_Enter = CurrentProject.Connection.Execute("select FirstName, LastName from Employees")

End Function

Private Sub Tooling_No_AfterUpdate()
Dim strStorage_Location_1 As String
Dim strStorage_Location_2 As String
Dim strStorage_Location_3 As String
Dim strStorage_Location_4 As String
Dim strStorage_Location_5 As String
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
Set rst = Tooling_No_Enter()
Do While Not rst.EOF
    strStorage_Location_1 = rst!Storage_Loacation_1
    strStorage_Location_2 = rst!Storage_Loacation_2
    strStorage_Location_3 = rst!Storage_Loacation_3
    strStorage_Location_4 = rst!Storage_Loacation_4
    strStorage_Location_5 = rst!Storage_Loacation_5
    Debug.Print strStorage_Location_1 + vbCrLf + strStorage_Location_2 + vbCrLf + strStorage_Location_3 + vbCrLf + strStorage_Location_4 + vbCrLf + strStorage_Location_5
    rst.MoveNext
Loop
rst.Close
Set rst = Nothing
End Sub

此后,能够选择位置的用户将被选择的位置记录在资产表和交易表中,而这些是我无法弄清的部分。

1 个答案:

答案 0 :(得分:0)

您使用了错误的方法来打开ADODB记录集。一方面,Execute用于操作SQL(DELETE,UPDATE,INSERT)。

在多个过程中使用记录集对象的一种方法是在模块头中声明记录集变量。该示例显示了声明和设置并打开连接和记录集对象,然后在另一个未显示的过程中对其进行引用。

Option Compare Database
Option Explicit

Public strOldLabNum
Dim cn As ADODB.Connection
Dim rsOldSample As ADODB.Recordset
___________________________________________________

Private Sub cbxOldLabNum_AfterUpdate()

Set cn = CurrentProject.Connection
Set rsOldSample = New ADODB.Recordset

strOldLabNum = Me.tbxOldYear & "A-" & Me.cbxOldLabNum

'select old sample info from table zSample
rsOldSample.Open "SELECT * FROM zSample WHERE LabNum='" & strOldLabNum & "';", _
    cn, adOpenStatic, adLockPessimistic

End Sub