我在Access中使用了几个表, CTOL 和 CTOL_Asbuilt 。我正在尝试运行查询以使用VBA代码将这两个表连接在一起。我在Access中运行查询,它可以工作。我正在使用DAO作为数据库库从本地Access数据库检索数据(代码与数据库在同一个数据库项目中),我是VBA Access脚本的新手。
SELECT CTOL.ID, CTOL.BOM_PART_NAME, CTOL.CII, CTOL.[PART FIND NO], CTOL.CSN,
CTOL.AFS, CTOL.EQP_POS_CD, CTOL.LCN, CTOL.POS_CT, CTOL.SERIAL_NO,
CTOL.PART_NO_LLP, [CTOL_Asbuilt].[PART-SN], [CTOL_Asbuilt].[PART-ATA-NO],
[CTOL_PW-E750207_Asbuilt].[PW-PART-NO]
FROM CTOL LEFT JOIN [CTOL_Asbuilt] ON CTOL.[PART FIND NO] = [CTOL_Asbuilt].[PART-ATA-NO];
这是下面的代码:
Option Compare Database
Option Explicit
'Const adOpenStatic = 3
'Const adLockOptimistic = 3
Function queryDatabase()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim rsQuery As DAO.Recordset
Dim part_find_no() As String
Dim eqp_pos() As Integer
'Dim strSQL As String
Dim i As Integer
Dim j As Integer
'Set objConnection = CurrentDb.OpenRecordset("CTOL")
Set db = CurrentDb
Set rsQuery = db.OpenRecordset("SicrProcess", dbOpenDynaset)
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Function
当我使用调用函数的宏运行此代码时,我收到以下错误:
运行时错误'91':
对象变量或未设置块变量
我正在尝试使用带有查询的代码循环遍历两个字段,并在 PART FIND NO 条目与最后一个匹配时递增 EQP_POS_CD 字段的值(否则,它只会移动到下一条记录,直到它到达结果集的末尾)。我想测试运行此查询以确保代码通过在Access中手动运行查询来检索输出的结果。
你能帮我修复这个错误,以便我可以运行我的代码来检索数据吗?谢谢!
答案 0 :(得分:1)
rs.Close
您无法关闭未打开的内容。也许你的意思是rsQuery.Close
?
答案 1 :(得分:0)
打开记录集并循环记录。
Sub queryDatabase()
On Error GoTo ErrProc
Dim db As DAO.Database
Set db = CurrentDb
Dim qdf As DAO.QueryDef
Set qdf = db.QueryDefs("SicrProcess") 'set your query name here
Dim rs As DAO.Recordset
Set rs = qdf.OpenRecordset(dbOpenDynaset)
Dim part_find_no() As String
Dim eqp_pos() As Integer, i As Integer
If rs.EOF Then GoTo Leave
rs.MoveLast
rs.MoveFirst
For i = 1 To rs.RecordCount
'...
'Do work here
'...
rs.MoveNext
Next i
Leave:
On Error Resume Next
rs.Close
Set rs = Nothing
qdf.Close
Set qdf = Nothing
Set db = Nothing
On Error GoTo 0
Exit Sub
ErrProc:
MsgBox Err.Description, vbCritical
Resume Leave
End Sub