首页 > 解决方案 > 执行 vba 查询 ms 访问时出现运行时错误 3075

问题描述

大家好,当我尝试执行 RunSql 方法时出现此错误,这是我的查询

Dim x As Integer
Dim strSQL As String
    x = Me.PONumber
    strSQL = "DELETE TblPoMaterials.PONumber, TblPoMaterials.ProductionDate, TblPoMaterials.AcceptedNumber, TblPoMaterials.RejectedNumber, TblPoMaterials.Shift " & vbCrLf & _
    "FROM TblPoMaterials " & vbCrLf & _
    "WHERE (((TblPoMaterials.PONumber)=" & x & ") AND ((TblPoMaterials.ProductionDate)=[Forms]![FrmProductionEdit]![Zdate]) AND ((TblPoMaterials.AcceptedNumber)=[Forms]![FrmProductionEdit]![AcceptedProduct]) AND ((TblPoMaterials.RejectedNumber)=[Forms]![FrmProductionEdit]![RejectedProduct]) AND ((TblPoMaterials.Shift)=[Forms]![FrmProductionEdit]![Shift]));"
    DoCmd.RunSQL strSQL

主要思想是将变量 x 作为上一个查询的条件,我尝试使用

DoCmd.OpenQuery strSQL

我知道这是不对的,但我只是想看看会发生什么,它产生了不同的运行时错误。提前致谢

标签: vbams-access

解决方案


只需将x值作为参数包含在查询中,就像您执行其他表单控件一样。这样可以避免任何串联。下面假设Me.PONumber是对FrmProductionEdit. 如果不是,请调整为正确的表单名称。此外,子句中的列是多余的,因为无论列出的列如何,都会DELETE根据逻辑删除行。WHERE最后,使用表别名来避免长表名的重复,并删除了多余的括号。

strSQL = "DELETE " & vbCrLf & _
         "FROM TblPoMaterials t " & vbCrLf & _
         "WHERE t.PONumber = [Forms]![FrmProductionEdit]![PONumber] " & vbCrLf & _
         "  AND t.ProductionDate = [Forms]![FrmProductionEdit]![Zdate] " & vbCrLf & _
         "  AND t.AcceptedNumber = [Forms]![FrmProductionEdit]![AcceptedProduct] " & vbCrLf & _
         "  AND t.RejectedNumber = [Forms]![FrmProductionEdit]![RejectedProduct] " & vbCrLf & _
         "  AND t.Shift = [Forms]![FrmProductionEdit]![Shift];"
    
DoCmd.RunSQL strSQL

更好(并且更高效),将长 SQL 保存为没有 VBA 语法(、、、或)的存储查询对象&,然后"简单地运行(无需关闭操作查询):_vbCrLf

DoCmd.OpenQuery "mySavedDeleteQuery"

推荐阅读