gpt4 book ai didi

sql-server-2008 - 查询适用于 sql server management studio 2008,但不适用于 delphi

转载 作者:行者123 更新时间:2023-12-03 15:17:53 28 4
gpt4 key购买 nike

我正在开发一个程序来使用 SQL Server 更新 Delphi 7 中表中的某些字段。程序是这样的:

sql := 'UPDATE tb_dt_contract SET '
+' id_schedule = '+quotedstr(label_id_schedule.Caption)
+',start_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_start.Date))
+',finish_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_finish.Date))
+',contract_location = '+quotedstr(uppercase(Edit_location.Text))
+',sign_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_sign.Date))
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;

当我运行该程序时,它给我一个错误:“‘=’附近的语法不正确”。但是当我使用 showmessage 查看查询并在 sql server management 2008 中运行它时,它工作正常。

然后我尝试将查询分成这样的部分:

SQL := 'UPDATE tb_dt_contract SET '
+' id_schedule = '+QUOTEDSTR(label_id_schedule.CAPTION)
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;

SQL := 'UPDATE tb_dt_contract SET '
+' start_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_start.Date))
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;

SQL := 'UPDATE tb_dt_contract SET '
+' finish_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_finish.Date))
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;

SQL := 'UPDATE tb_dt_contract SET '
+' contract_location = '+quotedstr(uppercase(edit_location.Text))
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;

SQL := 'UPDATE tb_dt_contract SET '
+' sign_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_sign.Date))
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;

然后我发现它只在更新日期类型字段时触发错误。我已经开发了其他程序来使用类似的查询更新不同的表,并且工作正常。我尝试关闭该项目并重新打开它,但它仍然给我该错误消息。请告诉我应该做什么..

最佳答案

为了避免转换并创建独立于数据库的已保存查询,您应该使用参数,如果多次使用,这也可以加快操作速度。

  Adoquery1.SQL.Text := 'UPDATE tb_dt_contract SET finish_date=:df where WHERE id =:id';
// in some cases it may be necessary to add the three comented lines
//Adoquery1.Parameters.ParseSQL(Adoquery1.SQL.Text,true);
//Adoquery1.Parameters.ParamByName('df').DataType := ftDateTime;
//Adoquery1.Parameters.ParamByName('id').DataType := ftInteger;
Adoquery1.Parameters.ParamByName('df').Value :=DateTime_finish.Date;
Adoquery1.Parameters.ParamByName('ID').Value :=StrToInt(label_id.Caption);
Adoquery1.ExecSQL;

关于sql-server-2008 - 查询适用于 sql server management studio 2008,但不适用于 delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13854592/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com