2017-09-30 28 views
0

每當我嘗試運行這段代碼,它返回一個語法錯誤,我遵循了什麼在這裏發表一些格式,但沒有我似乎工作。我怎樣才能解決這個問題?如何解決這個SQL更新語句,因爲它在delphi中返回語法錯誤?

with adoQuerysupplier do             
begin 
sql.Clear; 
sql.Add('UPDATE SupplierList'); 
SQL.Add('SET :Column = :newdetail'); 
SQL.Add('WHERE :Column1 = :OldDetail'); 
Parameters.ParseSQL(adoQuerysupplier.SQL.Text, True); 
Parameters.ParamByName('Column').Value:= column; 
Parameters.ParamByName('Column1').Value:= column; 
Parameters.ParamByName('newdetail').Value:= newdetail; 
Parameters.ParamByName('OldDetail').Value:= olddetail; 
ExecSQL; 

所有變量都是字符串並且被成功捕獲。這是我的第一個問題,所以如果我有任何格式錯誤,我提前道歉。請讓我知道是否需要發佈更多代碼。表名是不是一個變量

+2

「語法錯誤」?這就是它說的嗎? – Blorgbeard

+0

如果使用FireDAC,您可以使用宏(它們可以用值替代標誌物)。但這似乎不適合你。 – Victoria

+0

我收到的錯誤是'UPDATE語句中的語法錯誤'。是的,即使我想,我也不能使用FireDac,這是爲了一個項目。但非常感謝你的建議。 – crackedlogic

回答

6

你不能使用字段名稱參數。如果你真的必須這樣做,你需要寫一個大的switch語句。或者將查詢建立爲字符串:

sql.Add('UPDATE SupplierList'); 
SQL.Add('SET [' + column2 + '] = :newdetail'); 
SQL.Add('WHERE [' + column1 + '] = :OldDetail'); 
Parameters.ParseSQL(adoQuerysupplier.SQL.Text, True); 
Parameters.ParamByName('newdetail').Value:= newdetail; 
Parameters.ParamByName('OldDetail').Value:= olddetail; 

考慮可能的SQL注入!