【问题标题】:Update Microsoft Access Table Field from Excel App Via VBA/SQL通过 VBA/SQL 从 Excel 应用程序更新 Microsoft Access 表字段
【发布时间】:2015-08-14 05:13:56
【问题描述】:

我能够成功连接到数据库,但问题是当它更新表字段时。它更新表中的整个字段,而不是搜索 ID 号,只更新那个特定的 Time_out 字段。这是下面的代码,我一定遗漏了一些东西,希望我忽略了一些简单的东西。

Sub UpdateAccessDatabase()

    Dim accApp As Object
    Dim SQL As String
    Dim id

    id = frm2.lb.List(txt)

    SQL = "UPDATE [Table3] SET [Table3].Time_out = " & "Now()" & " WHERE "
    SQL = SQL & "((([Table3].ID)=id));"

    Set accApp = CreateObject("Access.Application")

    With accApp
        .OpenCurrentDatabase "C:\Signin-Database\DATABASE\Visitor_Info.accdb"
        .DoCmd.RunSQL SQL
        .Quit
    End With

     Set accApp = Nothing

 End Sub

【问题讨论】:

  • 在构建 SQL 语句时,认为id 局部变量需要在双引号之外 - 否则您正在寻找一个只是字母 id 的 ID
  • @barrowc 是的,你是对的,解决了问题,提前感谢 italicbold ' SQL = "UPDATE [Table3] SET [Table3 ].Time_out = " & "Now()" & " WHERE " SQL = SQL & "((([Table3].ID)=" & id & "));"'
  • @barrowc 实际上,右侧的 id 正在解析为 id 字段。由于该字段中的值始终等于其自身,因此表中的每一行都会更新。要查找值为字母“id”的 id,您需要嵌入引号:"...=""id""));"

标签: sql excel vba ms-access sql-update


【解决方案1】:

如果id 是整数/长整数,您应该修改查询如下:

SQL="UPDATE [Table3] SET [Table3].Time_out=#" & Now() & "# WHERE [Table3].ID=" & id;

如果id是一个文本,你应该修改查询如下:

SQL="UPDATE [Table3] SET [Table3].Time_out=#" & Now() & "# WHERE [Table3].ID='" & id &"'";

希望这可能会有所帮助。

【讨论】:

  • 我试图只合并 1 行 SQL,但我无法让它工作,我会再试一次,因为最好有另一种创建 SQL 查询的方式
【解决方案2】:

这是下面的工作代码:

Sub UpdateAccessDatabase()
Dim accApp As Object
Dim SQL As String
Dim id
id = frm2.lb.List(txt)
***'modified lines below***
SQL = "UPDATE [Table3] SET [Table3].Time_out = " & "Now()" & " WHERE "
SQL = SQL & "((([Table3].ID)=" & id & "));"

Set accApp = CreateObject("Access.Application")
With accApp
.OpenCurrentDatabase "C:\Signin-Database\DATABASE\Visitor_Info.accdb"
.DoCmd.RunSQL SQL
.Quit
 End With
 Set accApp = Nothing

 End Sub

【讨论】:

  • 正如我所说,有问题的部分是您的 SQL 查询语法错误。请参阅提供通用解决方案的扩展答案。如果您对答案感到满意,请将其标记为已接受。最好的问候,
【解决方案3】:

@alex

我能够将查询修改为您上面提到的 SQL 语句

我确实必须从语句中删除一些 (#,') 才能使其正常工作,但这更简洁

下面是另一个工作示例

`Sub UpdateAccessDatabase()
 Dim accApp As Object
 Dim SQL As String
 Dim id
 id = frm2.lb.List(txt)
 ***'modified lines below***
 SQL = "UPDATE [Table3] SET [Table3].Time_out= " & "Now()" & " WHERE [Table3].ID=" & id & ""


 Set accApp = CreateObject("Access.Application")
 With accApp
 .OpenCurrentDatabase "C:\Signin-Database\DATABASE\Visitor_Info.accdb"
 .DoCmd.RunSQL SQL
 .Quit
  End With
  Set accApp = Nothing

  End Sub`

【讨论】:

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