循环遍历记录并在vba访问中增加值

时间:2017-06-08 18:37:44

标签: vba access-vba

我正在尝试遍历表格中的记录,其中部分号为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。结果集还应包含查询中选择的其他字段。还有什么我需要添加才能获得输出吗?现在,我不太关心它的输出方式,无论是在窗口还是在数据表格式中(尽管如果有人知道,我会很感激指点)。有关如何实现这一目标的任何指示?另外,如果我的问题中有任何重要的内容,或者在发布问题时我可以做得更好,我愿意讨论它。我也愿意讨论如何处理这个问题。谢谢!

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