新手,sql简单的日期替换问题,谢谢帮忙!

NEEZA哪吒 2019-11-18 08:58:40
把日期根据条件替换到SQL数据库中。
...全文
180 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NEEZA哪吒 2019-11-19
  • 打赏
  • 举报
回复
引用 5 楼 早打大打打核战争 的回复:
建议使用参数化查询: ADOQuery1.SQL.Clear; ADOQuery1.SQL.Text := 'Update Project Set XSNAME = :日期 where 内部编号 = :内部编号'; ADOQuery1.Parameters.ParamByName('日期').Value := DBEdit1.Text; ADOQuery1.Parameters.ParamByName('内部编号').Value := DBEdit2.Text; ADOQuery1.ExecSQL; 早在很多多多年以前(可能我还在上高中的时候 :),Borland就有人写文章建议尽量使用参数化查询,不要自己拼接SQL字符串,参数化查询有很多优点: 1. 结构清晰,不容易出错,自己拼接SQL串,尤其涉及很多字符型数据带引号的,很容易出错,也不好修改 2. 同样的SQL多次执行,只是查询数据不一样,参数化查询只需要每次重新设置参数即可,不用重写SQL,因此不需要每次prepare,性能会提升 3. 参数化查询中的字符型参数,会根据目标数据库的字符集设置进行正确转换,而硬编码到SQL中的字符型数据则不会进行转换,这一点非常重要,一些D7时代的数据库软件,升级到高版本,查询结果出错、数据乱码,很多是因为自行拼接SQL的原因 4. 参数化查询能读写BLOB字段,自行拼接SQL则不行 5. ... (可能还有,我忘记了)
谢谢,你真的是很NB!好用了!
tzlaoliu 2019-11-19
  • 打赏
  • 举报
回复
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='Update Project Set XSNAME ='''+ quotedstr(DBedit1.Text) + ''' where 内部编号 ='''+quotedstr(DBedit2.Text)'''';
ADOQuery1.ExecSQL;
NEEZA哪吒 2019-11-19
  • 打赏
  • 举报
回复
这样写不对,帮忙看看哪里错了。 ADOQuery1.SQL.Clear; ADOQuery1.SQL.Text:='Update Project Set XSNAME ='+ quotedstr(DBedit1.Text) + ' where 内部编号 ='+quotedstr(DBedit2.Text)'; ADOQuery1.ExecSQL;
  • 打赏
  • 举报
回复
建议使用参数化查询:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'Update Project Set XSNAME = :日期 where 内部编号 = :内部编号';
ADOQuery1.Parameters.ParamByName('日期').Value := DBEdit1.Text;
ADOQuery1.Parameters.ParamByName('内部编号').Value := DBEdit2.Text;
ADOQuery1.ExecSQL;

早在很多多多年以前(可能我还在上高中的时候 :),Borland就有人写文章建议尽量使用参数化查询,不要自己拼接SQL字符串,参数化查询有很多优点:
1. 结构清晰,不容易出错,自己拼接SQL串,尤其涉及很多字符型数据带引号的,很容易出错,也不好修改
2. 同样的SQL多次执行,只是查询数据不一样,参数化查询只需要每次重新设置参数即可,不用重写SQL,因此不需要每次prepare,性能会提升
3. 参数化查询中的字符型参数,会根据目标数据库的字符集设置进行正确转换,而硬编码到SQL中的字符型数据则不会进行转换,这一点非常重要,一些D7时代的数据库软件,升级到高版本,查询结果出错、数据乱码,很多是因为自行拼接SQL的原因
4. 参数化查询能读写BLOB字段,自行拼接SQL则不行
5. ... (可能还有,我忘记了)
NEEZA哪吒 2019-11-18
  • 打赏
  • 举报
回复
日期是edit1、1001那个是edit2
elqshhh 2019-11-18
  • 打赏
  • 举报
回复
方法1:SQL语句,update 表 set 日期=2019-01-01 where 内部编号='1001',执行完刷新一次dbgird控件 方法2: with adoquery1 do begin First; while not eof do begin edit; if FieldByName('内部编号').AsString='1001' then FieldByName('日期').AsString :='2019-01-01'; post; next; end; end;

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧