2012-08-03 67 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