循环访问记录并增加 vba 访问中的值



我正在尝试遍历带有部件号和匹配部件号的表中的记录,在 pos 字段中增加一个值。我之前问了一个问题(对象变量或未设置块变量访问 vba),涉及同一项目,但针对流程的不同步骤(运行查询)。我还没有在 Access 中找到解决此问题的问题,但我从这个问题中得到了一些指示:用于循环访问 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。如果最后一个部件 FIND NO 与当前 NO 相同,则 EQP_POS_CD 中的值应递增 1。结果集还应包含在查询中选择的其他字段。我还需要添加什么才能获得输出吗?现在,我不太关心它的输出方式,无论是在窗口中还是以数据表格式(尽管如果有人知道,我将不胜感激)。关于如何完成此操作的任何指示?此外,如果我的问题中缺少任何重要的东西,或者在发布问题时我可以做得更好,我愿意讨论它。我也愿意讨论如何处理这个问题。谢谢!

可能:

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];

最新更新