【问题标题】:Syntax error creating an SQL query dynamically动态创建 SQL 查询的语法错误
【发布时间】:2012-08-03 15:23:14
【问题描述】:

我正在使用 VB6 和 MS Access。我的 sql 命令是

insert into BatchInfo (BName,BDate,Currency) values('" & Me.txtBatchName.Text & "','" & Me.dtpBatchDate.Value & "','" & Me.cboCurrency.Text & "')

命令在运行时的输出是

"insert into BatchInfo (BName,BDate,Currency) values('batch1','8/2/2012','AED')"

这是 BatchInfo 表的架构

BatchID   AutoNumber
BName     Text
BDate     Date/Time
Currency  Text

我找不到任何语法错误。请帮忙。

【问题讨论】:

  • 如果您要构建 SQL 字符串,请清理您的数据库输入,否则您将get problems

标签: sql ms-access vb6


【解决方案1】:

Currency是保留字,因此转义;

insert into BatchInfo (BName, BDate, [Currency]) values (...

【讨论】:

    【解决方案2】:

    MS Access 通常喜欢# 在其日期周围的标志:

    insert into BatchInfo (BName,BDate,Currency) 
    values('" & Me.txtBatchName.Text & "','#" & Me.dtpBatchDate.Value & "#','" & Me.cboCurrency.Text & "')
    

    【讨论】:

    • @Deanna 我强烈建议使用年、月、日格式(yyyy-mm-dd、yyyy/mm/dd)而不是美式,尤其是对于非美国地区的人。
    • @Remou 我也会使用任何其他 RDBMS。 Access (and VB6, and VBA, etc) explicitly expect #mm/dd/yyyy#.
    • 很抱歉,Allen Browne 并没有在这种情况下讲述整个故事,这对 Allen Browne 来说是一件非常罕见的事情。 Access 确实默认使用美国日期,这会给其他地区的人带来问题,但 Access 需要的是一个明确的日期,而 4 位数的年、月、日是您可以获得的最明确的日期。
    • 遗憾的是,MSDN 让我失望了,我找不到明确的参考资料,但query criteria 上的这个页面在示例示例中使用了#mm/dd/yyyy#。
    • 在非美国地区工作的人的问题之一是 Access 并不总是需要美国日期,例如,在查询设计窗口 (v.2010) 中,如果您键入 #2012 /07/05# 访问自己,它将更改为#05/07/2012#,而不是#07/05/2012#,因此在美国地区以外工作的人通常最好使用年、月、日。这对每个人来说都不会那么混乱。
    【解决方案3】:

    您使用的是单引号,而不是双引号。

    试试这个

    insert into BatchInfo (BName,BDate,Currency) values(""" & Me.txtBatchName.Text & """,#" & Me.dtpBatchDate.Value & #",""" & Me.cboCurrency.Text & """)
    

    【讨论】:

    • 但是这个语句可以正常工作。 "insert into Admission_Master values('" & id & "','" & Me.txtstdcode.Text & "','" & Me.cmbcourse.Text & "','" & modules & "','" & Me.dtpadmtd.Value & "','" & cfees1 & "','" & Me.dtpsdt.Value & "','" & Me.dtpedt.Value & "','N/A'," & CBool(False) & ",'" & cfees1 & "')"
    • 一些 RDBMS 同时接受 '" 分隔符。其他人(例如mysql)只喜欢其中一个
    • 我一直只在 Access 中使用双引号 ""。很高兴知道还有另一种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多