【问题标题】:How to handle 0 lines found after a DoCmd.RunSQL(INSERT INTO...)如何处理在 DoCmd.RunSQL(INSERT INTO...) 之后找到的 0 行
【发布时间】:2019-09-21 18:21:15
【问题描述】:

对于初学者,我昨天才开始尝试将 SQL 引入我的 VBA 代码。

我正在尝试使用 VBA/SQL 将数据插入到由数据库表和表单输入组合而成的本地表中。我想知道如何触发“检索到 0 行”。

在运行 DoCmd.RunSQL("INSERT INTO ... SELECT ... FROM ... WHERE ...) 时,我已经尝试在几页上查看如何处理“要插入的 0 行”。

当有数据存在时,代码本身就可以工作,所以这不是问题。

问题本身是当我找不到数据时,我想触发一个消息框,给出如何处理当前情况的说明。

遗憾的是,我还没有找到如何触发它。

sqlTempInsert = "INSERT INTO tblScanInput (Support, EAN, Counted, Product, Description, Launched, Collected) " & _
        "SELECT " & lblSupportData.Caption & ", " & txtEANInput.Value & ", "

If txtAmountInput.Visible = True Then
    sqlTempInsert = sqlTempInsert & txtAmountInput.Value & ", "
ElseIf txtAmountInput.Visible = False Then
    sqlTempInsert = sqlTempInsert & "1, "
End If

sqlTempInsert = sqlTempInsert & "GEPRO.CODPRO, GEPRO.DS1PRO, GESUPDC.UVCSRV, GESUPDC.UVCLIV " & _
        "FROM [Database_Table] GESUPDC LEFT OUTER JOIN [Database_Table] GEPRO ON GESUPDC.CODPRO = GEPRO.CODPRO " & _
        "WHERE GESUPDC.NUMSUP = " & lblSupportData.Caption & " AND GESUPDC.EDIPRO = '" & txtEANInput.Value & "';"   

DoCmd.RunSQL(sqlTempInsert)

【问题讨论】:

  • 我建议使用您用于插入的相同查询进行先前的计数选择,以检查行数......然后如果为 0,请执行您的操作。这确实意味着您每次必须运行 2 个查询,也许有更好的解决方案...访问不是我的事。

标签: sql database vba ms-access odbc


【解决方案1】:

使用.Execute.RecordsAffected

Dim db As DAO.Database
Dim x As Long

Set db = CurrentDb
db.Execute sqlTempInsert, dbFailOnError
x = db.RecordsAffected
If x = 0 Then
    ' nothing was inserted
End If

注意:关注Delete 5 Records but RecordsAffected Property is 0

【讨论】:

  • 我可以假设这是专门针对我要运行的查询?例如,表单和直接 sql 之间的组合,而不是我已经使用 querydesigner 创建的查询。
  • 我已经对其进行了测试,它运行良好,完全符合我的要求。非常感谢你的帮助。 :)
  • 您还可以对现有查询运行 db.Execute "MySavedQuery", dbFailOnError。 @SierraA
猜你喜欢
  • 2018-11-13
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
相关资源
最近更新 更多