【问题标题】:MS Access VBA: Syntax Error in Update StatementMS Access VBA:更新语句中的语法错误
【发布时间】:2018-07-13 16:02:44
【问题描述】:

我对在 MS Access 中编译 VBA 代码比较陌生。我正在尝试编译一个执行增量行更新的脚本,以便将行号添加到基础表中。

我目前的VBA脚本如下:

Function HOP_Macro()
On Error GoTo HOP_Macro_Err

    Dim db As DAO.Database
    Dim Tbl As DAO.Recordset
    Dim sql As String
    Dim Row_Counter As Integer
    Dim Total_Row As Integer

    Set db = CurrentDb

    'Initialising Row Counter variable
    Row_Counter = 1

    DoCmd.SetWarnings False

    ' Query to extract initial loan population
    'DoCmd.OpenQuery "Qry - HOP loan data by month", acViewNormal, acEdit

    ' Query to determine the population size
    'DoCmd.OpenQuery "Qry - Row Counter", acViewNormal, acEdit

    ' Sets Total_Row variable to the population count
    Total_Row = DLookup("[Row Count]", "[Tbl - Record Counter]")
    'MsgBox ("Total Row: " & Total_Row)
    'MsgBox ("Row Counter: " & Row_Counter)

    sql = "SELECT [Tbl - HOP Loan Data].[Row ID] FROM [Tbl - HOP Loan Data];"
    Set Tbl = db.OpenRecordset(sql, dbOpenDynaset)
    'MsgBox ("SQL 1: " & sql)

    With Tbl
        Do Until Tbl.EOF
            If Row_Counter <= Total_Row Then
                'MsgBox ("Hello")
                sql = "UPDATE [Tbl - HOP Loan Data.Row ID] = " & Row_Counter & _
                " Where [Tbl - HOP Loan Data.Row ID] < " & Row_Counter & " ;"
                'MsgBox ("SQL 2: " & sql)
                db.Execute (sql)
                Row_Counter = Row_Counter + 1
            End If
            .MoveNext
        Loop
    End With

    MsgBox ("Row Counter: " & Row_Counter)

    DoCmd.SetWarnings True
    Beep
    MsgBox "Data extract complete", vbInformation, "Completed"

End Function

运行上述脚本时,我收到“UPDATE 语句中的语法错误”消息。我找不到错误。有人可以帮忙吗?

谢谢

【问题讨论】:

    标签: ms-access syntax vba


    【解决方案1】:

    您需要在更新查询中使用SET,您可能只是错过了所有需要添加到查询中的大量 VBA 内容。

    我的建议(一般而言)是通过 Access 正常编写查询,然后修改该查询以在 VBA 中使用。

    例如,首先编写这个查询(在 Access SQL 编辑器中,用于测试目的):

    UPDATE [Tbl - HOP Loan Data]
    SET [Tbl - HOP Loan Data].[Row ID] = 1
    WHERE [Tbl - HOP Loan Data].[Row ID] < 1
    

    不管怎样,试试这个:

    sql = "UPDATE [Tbl - HOP Loan Data] " & _
        "SET [Tbl - HOP Loan Data].[Row ID] = " & Row_Counter & _
        "WHERE [Tbl - HOP Loan Data].[Row ID] < " & Row_Counter & " ;"
    

    注意WHERE 语句很可能是不必要的,具体取决于您的表结构。

    【讨论】:

    • 感谢您的建议@Jiggles32,但我仍然卡住了。
    • 为了澄清代码的目的:“Tbl - HOP Loan Data”表中的“Row ID”字段旨在表示行号(即顺序计数)以供后续参考。创建初始表的 SQL 将为所有行设置默认值“0”。然后 VBA 编码编码以增量更新各个值 - 因此 VBA 部分具有“where 条件”(即我只想更新 Row ID 字段小于 Row-Counter 变量的行)。跨度>
    • 当前代码如下: With Tbl Do Until Tbl.EOF If Row_Counter
    • 是否有更简单的方法来获得所需的最终结果?我愿意接受建议。谢谢。
    • 找到解决方案。答案已发布。
    【解决方案2】:

    找到解决方案。

    Function Set_Row_ID()
    
        Dim db As DAO.Database
        Dim Tbl As DAO.Recordset
        Dim sql As String
        Dim Row_Counter As Integer
        Dim Total_Row As Integer
    
        Set db = CurrentDb
    
        'Initialising Row Counter variable
        Row_Counter = 1
    
        sql = "SELECT [Tbl - HOP Loan Data].[Row ID] FROM [Tbl - HOP Loan Data];"
        Set Tbl = db.OpenRecordset(sql, dbOpenDynaset)
    
        With Tbl
            Do Until Tbl.EOF
                If Row_Counter <= Total_Row Then
                    sql = "UPDATE [Tbl - HOP Loan Data " & _
                        "SET [Row ID] = " & Row_Counter & _
                        "Where [Row ID] < " & Row_Counter & " ;"
                    db.Execute (sql)
                    Row_Counter = Row_Counter + 1
                End If
                .MoveNext
            Loop
        End With
    
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多