2012-08-03 60 views
2

我正在使用VB6和MS Access。我的SQL命令是语法错误动态创建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 

我无法找到任何语法错误的模式。请帮忙。

+3

如果您打算构建SQL字符串,请请您务必清理您的数据库输入,否则您将[得到问题](http://xkcd.com/327/)。 – Deanna 2012-08-03 16:00:14

回答

6

Currency是保留字,逃避它正是如此;

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

干草,工作。谢谢。 – 2012-08-03 15:34:26

0

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

试试这个

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

但这个声明工作正常。 '“插入Admission_Master值(''&id&'','”&Me.txtstdcode.Text&“','”&Me.cmbcourse.Text&“','”&modules&“','”& Me.dtpadmtd.Value&“','”&cfees1&“','”&Me.dtpsdt.Value&“','”&Me.dtpedt.Value&“','N/A',”&CBool (False)&“,'”&cfees1&“')”' – 2012-08-03 15:27:37

+0

你说得对。我立场纠正。 – PowerUser 2012-08-03 15:42:19

+0

一些RDBMS接受''''和''''定界符,其他(如mysql)只喜欢其中之一 – Deanna 2012-08-03 16:02:37

2

的MS Access通常喜欢围绕其日期#迹象:

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

@Deanna I would强烈建议使用年,月,日格式(yyyy-mm-dd,yyyy/mm/dd),而不是美国人,尤其是对于非美国语言环境中的人。 – Fionnuala 2012-08-03 21:11:09

+0

@Remou我将使用其他任何RDBMS [Access(and VB6 ,VBA等)明确期望'#mm/dd/yyyy#'](http://allenbrowne.com/ser-36.html#Format) – Deanna 2012-08-06 07:42:49

+0

对不起,但艾伦布朗并没有讲完整个故事这种情况对于Allen Browne来说非常罕见,Access确实使用美式日期作为默认值,这会导致其他语言环境中的用户遇到问题,但Access需要的是明确的日期,而4位数的年,月,日是最明确的日期,你可以得到。 – Fionnuala 2012-08-06 07:59:04