我正在尝试遍历表格中的记录,其中部分号为no,匹配部分为no,在pos字段中增加一个值。我之前问了一个问题(Object variable or With block variable not set Access vba)和同一个项目,但是对于该过程的不同步骤(运行查询)。我还没有在Access中找到解决此问题的问题,但我从这个问题中得到了一些指示:Code to loop through all records in MS Access。现在,我正在尝试编写代码来遍历记录并增加pos字段中的值。
将运行的查询:
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_Asbuilt].[PW-PART-NO]
FROM CTOL LEFT JOIN [CTOL_Asbuilt] ON CTOL.[PART FIND NO] = [CTOL_Asbuilt].[PART-ATA-NO];
到目前为止的代码(感谢Kostas K在另一个问题上帮助我):
Option Compare Database
Option Explicit
'Const adOpenStatic = 3
'Const adLockOptimistic = 3
Function queryDatabase()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qdf As QueryDef
'Dim rsQuery As DAO.Recordset
Dim rows As Variant
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 qdf = db.QueryDefs("SicrProcess")
Set rs = qdf.OpenRecordset(dbOpenDynaset)
If rs.EOF Then GoTo Leave
rs.MoveLast
rs.MoveFirst
For i = 1 To rs.RecordCount
Debug.Print rs.Fields("PART FIND NO") & " " & rs.Fields("EQP_POS_CD")
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 Function
ErrProc:
MsgBox Err.Description, vbCritical
Resume Leave
End Function
我要循环的两个字段是CTOL表中的PART FIND NO和CTOL表中的EQP_POS_CD。如果最后一个PART FIND NO与当前no相同,则EQP_POS_CD中的值应增加1。结果集还应包含查询中选择的其他字段。还有什么我需要添加才能获得输出吗?现在,我不太关心它的输出方式,无论是在窗口还是在数据表格式中(尽管如果有人知道,我会很感激指点)。有关如何实现这一目标的任何指示?另外,如果我的问题中有任何重要的内容,或者在发布问题时我可以做得更好,我愿意讨论它。我也愿意讨论如何处理这个问题。谢谢!
答案 0 :(得分:0)
可能:
SELECT CTOL.*, [CTOL_Asbuilt].[PART-SN], [CTOL_Asbuilt].[PART-ATA-NO], [CTOL_Asbuilt].[PW-PART-NO],
DCount("*", "CTOL", "[Part Find No]=" & [Part Find No] & " AND ID<" & [ID])+1 AS Seq
FROM CTOL LEFT JOIN [CTOL_Asbuilt] ON CTOL.[PART FIND NO] = [CTOL_Asbuilt].[PART-ATA-NO];