SQL语句在Delphi中的使用规则

来源:互联网 发布:什么是网络安全意识 编辑:程序博客网 时间:2024/05/16 14:20

1:' 是 Pascal 的字符串定界符

问:请教

ADOQuery1_adduser.SQL.Text:='insert into person(p_name,pwd,loginlevel) values ()';

后面的()中我要加入几个变量,应该怎么写啊?

ADOQuery1_adduser.SQL.Text:='insert into person(p_name,pwd,loginlevel) values (Var1,Var2,Var3)';

这样对吗?

答:
错。数据库 并不能理解 Delphi源码中声明的变量var1、var2。

应该先把SQL语句当成普通字符串来处理,也就是说 你要作些串连接操作 把这些字符串常量和变量 连成一个字符串当运行时,这个字符串操作的值 就是最终提交给数据集组件执行的SQL语句。

方案一:(这是最原始的做法)
'... values(''' + var1 + ''',''' + var2 +  ''',''' + var3 + ''')'

问:这里为什么是三个'?
答:' 是 Pascal 的字符串定界符。如果要有字符串里表示一个',必须转义,也就是使用两个'。你所看到的三个'''其中必有一个是原本的定界符,左边的 或者 右边的。其他两个''一起构成最终字符串里的一个'。

问:这里不管这三个变量是什么类型,都这样写吗?如果前两个是string,第三个是integer?
答:只有对于字符串字段,才需要在SQL语句里对值加上引号'...'。数值 的 不要加。
如果第三个是Integer,那么:
'... values(''' + var1 + ''',''' + var2 +  ''',' + IntToStr(var3) + ')'

方案二:使用QuotedStr:
'... values(' + QuotedStr(var1) + ',' + QuotedStr(var2) +  ',' + IntToStr(var3) + ')'

方案三:(推荐方案)使用Format(),以提高代码可读性
sql.Text := Format('insert into ... values(%s, %s, %d)', [QuotedStr(var1), QuotedStr(var2), var3]);


0 0
原创粉丝点击