【问题标题】:Using INSERT INTO with VALUES fails with Run-time error '3078'将 INSERT INTO 与 VALUES 一起使用失败并出现运行时错误“3078”
【发布时间】:2021-12-10 08:22:50
【问题描述】:

我已经为此苦苦挣扎了两个星期了!我去过几十个网站寻求帮助,他们都给出了相同的建议(尽管没有一个完全解决我的特定问题),这无济于事,因为所有人(包括微软官方)都告诉我做我正在做的事情。

这是我的查询:

Dim strSQL As String
        
strSQL = """INSERT INTO tblVolunteers " & vbCrLf & _
            "VALUES (" & [txtTitle] & "," & [txtFirstName] & "," & [txtMiddle] & "," & [txtLastName] & "," & [txtEmail] & _
            "," & [txtPhone] & "," & [txtChurch] & "," & [txtGroup] & "," & [txtCouncil] & "," & [chkParCo] & "," & _
            [txtMailAdd] & ");"""
    
CurrentDb.Execute strSQL

这就是微软要说的:

运行时错误'3078'

Microsoft Access 数据库引擎找不到输入表或查询“”INSERT INTO tblVolunteers 价值观 (Mr.,John,L.,Smith,jlsmith@email.com,800-555-1212,St. Smith's,Smith,1234,-1,10 Smith St. 史密斯维尔,德克萨斯州 77777-3333);“”。确保它存在并且其名称拼写正确。

那么,当我不仅指定了 VALUES 并且正确地从表单中提取了所有值时,它为什么还要查找表或查询呢?

【问题讨论】:

  • 这里有多个问题。整个语句不得包含在双引号中,但单个文本参数应包含在单引号中。您确定存在名为“tblVolunteers”的表吗?
  • 语句中的单引号总是导致语法错误。
  • 语句中的单引号总是产生语法错误(在我弄清楚它是什么之前,我的脑袋像复活节彩蛋一样被打破,MSoft 不愿意标记实际错误)。 MSoft 实际上推荐我使用的三双引号。我不能说为什么单引号不起作用,但请注意错误消息准确地显示了我应该得到的。只有 Access 出于某种原因想要查找表或查询,而不是使用指定的 VALUE。 (请注意,这个查询确实有效,除了......!)
  • 正确使用单引号。如果您确实必须使用 SQL 连接变量,请使用 Gustav 的CSql() function。它处理各种变量并防止 SQL 注入。
  • 在您的情况下,由于St. Smith's,简单地用单引号包裹文本是行不通的。

标签: sql vba ms-access


【解决方案1】:

基本上你需要在文本周围加上双引号,所以你可以使用 CHR(34)

strSQL = "INSERT INTO tblVolunteers " & vbCrLf & _
        "VALUES (" & CHR(34) & [txtTitle] & CHR(34) & "," & CHR(34) &  [txtFirstName] & CHR(34) &  "," & CHR(34) &  [txtMiddle] & CHR(34) &  "," & CHR(34) &  [txtLastName] &  CHR(34) & "," & CHR(34) &  [txtEmail] & CHR(34) &  _
        "," & CHR(34) &  [txtPhone] & CHR(34) &  "," & CHR(34) &  [txtChurch] & CHR(34) &  "," & CHR(34) &  [txtGroup] & CHR(34) &  "," & CHR(34) &  [txtCouncil] & CHR(34) &  "," & CHR(34) &  [chkParCo] & CHR(34) &  "," & CHR(34) &  _
        [txtMailAdd] & CHR(34) &  ");"

【讨论】:

  • 基本上你需要在文本周围加上双引号,这样你就可以使用 CHR(34)
  • 那没有用,但我想知道你为什么认为它会?同样,根据 MSoft 的说法,我使用的三双引号是首选,而字符串中的单引号总是会产生语法错误。而且,如果您查看错误消息,发送到 SQL 的字符串是完全正确的。
  • 我已经执行了这样的查询INSERT INTO tblVolunteers VALUES ("Mr.","John","L.","Smith","jlsmith@email.com","800-555-1212","St. Smith's","Smith","1234","-1","10 Smith St. Smithville","TX 77777-3333")所以它应该可以在访问中尝试它
  • 除了三重引号是在数据库文件之前,而不是在你发布的那个洞周围,所以你错了。是 stuill 想知道为什么它不能在访问中使用双引号它显示没有错误所以它应该在 vba 中这样做
  • 值周围没有引号,因为它们不是文字文本,而是表单上文本框和组合框的内容: strSQL = """INSERT INTO tblVolunteers " & vbCrLf & _ "VALUES (" & [txtTitle] & "," & [txtFirstName] & "," & [txtMiddle] & "," & [txtLastName] & "," & [txtEmail] & _ "," & [txtPhone] & "," & [txtChurch] & "," & [txtGroup] & "," & [txtCouncil] & "," & [chkParCo] & "," & _ [txtMailAdd] & ");""" 这就是 MSoft 展示它的方式我看不出它会如何工作。
【解决方案2】:

您可以使用我的函数CSql 并像这样连接值:

strSQL = "INSERT INTO tblVolunteers " & _
    "VALUES (" & CSql([txtTitle]) & "," & CSql([txtFirstName]) & "," & CSql([txtMiddle]) & "," & _ 
    CSql([txtLastName]) & "," & CSql([txtEmail]) & "," & CSql([txtPhone]) & "," & CSql([txtChurch] & "," & _ 
    CSql([txtGroup]) & "," & CSql([txtCouncil]) & "," & CSql([chkParCo]) & "," & CSql([txtMailAdd]) & ");"

或者您可以跳过这个混乱并使用 DAO 进行更简洁的编码和更轻松的调试:

Dim Records As DAO.Recordset
Dim Sql     As String

Sql = "Select * From tblVolunteers"
Set Records = CurrentDb.OpenRecordset(Sql, dbOpenDynaset, dbAppendOnly)
Records.AddNew
    Records!Title.Value = Me!txtTitle.Value
    Records!FirstName.Value = Me!txtFirstName.Value
    Records!Middle.Value = Me!txtMiddle.Value
    Records!LastName.Value = Me!txtLastName.Value
    Records!Email.Value = Me!txtEmail.Value
    Records!Phone.Value = Me!txtPhone.Value
    Records!Church.Value = Me!txtChurch.Value
    Records!Group.Value = Me!txtGroup.Value
    Records!Council.Value = Me!txtCouncil.Value
    Records!ParCo.Value = Me!chkParCo.Value
    Records!MailAdd.Value = Me!txtMailAdd.Value
Records.Update
Records.Close

【讨论】:

  • 嗯,这是 Access 第一次标记“错误”代码而不是整个代码:Records.Append 以蓝色突出显示附加消息,并显示消息“编译错误:未找到方法或数据成员”。
  • @MichaelE.Ehinger:是.AddNew。已更正 - 谢谢。
  • 糟糕! .AddNew 作品。谢谢。
【解决方案3】:

使用 Access Query Design View.....从单个字段开始,然后逐个字段构建...

您可以将其切换到 SQl 视图以查看语法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多