【问题标题】:VBA Check if records exist if not AppendVBA检查记录是否存在,如果不附加
【发布时间】:2016-08-16 04:20:39
【问题描述】:

我有两个查询,它们连接各自表(tbl1 和 tb2)中的值。如果没有匹配,则使用宏运行追加查询。 我遇到的问题是在 VBA 中找出正确的语法(因为我想使用自己的警告消息而不是标准的 Access 消息)。

我已将宏转换为 VBA,目前正在使用以下代码:

DoCmd.SetWarnings False
MsgBox "Append Successful", vbOKCancel, "Append"
DoCmd.OpenQuery "appendQuery"
DoCmd.SetWarnings True

主要问题是无论附加成功与否,我仍然会收到相同的消息。有没有办法这样说:

If 'concat1' matches 'concat2' 
MsgBox "Record already exists. Append not executed"
Else run 'appendQuery'
MsgBox "Append Successful"

【问题讨论】:

    标签: ms-access vba ms-access-2007


    【解决方案1】:

    使用 vanilla Access 解决此问题的最佳方法实际上是从完全不同的方向开始。首先根据插入(追加)查询的过滤条件进行更新查询,如果 db.RecordsAffected 为 0,则记录不存在,您可以插入。

    set db = CurrentDb
    'we don't actually care about changing things, just want to see if the record exists 
    db.Execute("UPDATE sometable SET somevalue = somevalue WHERE ID = 1234")
    If db.RecordsAffected = 0 Then
        'id doesn't exist
        db.Execute("INSERT INTO sometable (id,somevalue) VALUES (1234,'MyValue')")
    Else
        'id exists, handle the fact that it exists
    End if
    

    【讨论】:

      【解决方案2】:

      查询看起来有点奇怪,但应该完全符合您的要求:

        Dim db as DAO.Database
        Dim SQL as string
      
        SQL = "INSERT INTO blah (id, somevalue) " & _
              "SELECT TOP 1 1, 'somevalue' FROM blah " & _
              "WHERE NOT EXISTS (SELECT id FROM blah WHERE id=1 AND somevalue='somevalue');"
      
        set db = currentdb
        db.execute SQL
        if db.RecordsAffected = 0 then
          msgbox "Record already exists; append not executed."
        else
          msgbox "Record appended successfully."
        end if
      

      【讨论】:

      • 这里要小心。 INSERT 将尝试添加与 SELECT 片段返回的行数一样多的行。如果没有唯一约束,它们将被添加。
      • @HansUp 提出了一个很好的观点。我假设id 字段是主键约束。更新了查询以消除问题。
      猜你喜欢
      • 2012-05-09
      • 1970-01-01
      • 2014-02-09
      • 2011-02-20
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      相关资源
      最近更新 更多