关于sql语句中的引号、单引号的用法(50分)

B

bitd

Unregistered / Unconfirmed
GUEST, unregistred user!
有一句 sql语句:
SELECT * FROM tableA WHERE XM LIKE '%EDIT1.TEXT%' OR UPPER(XM) = 'EDIT1.TEXT'
不知对不对?
要把它加入动态sql语句中如何写?
例如类似的语句:
query1.SQL.clear;
query1.sql.add('select xm from tableA');
query1.sql.add('where xm=:a1');
query1.Parameters.ParamValues['a1']:=edit1.text;
query1.open;
 
用惯了就好了
 
在Delphi中的一個雙引號或四個單引號轉到後台可相當於SQL中的一個單引號
 
SQL:='SELECT * FROM tableA WHERE XM LIKE ''%'
+ EDIT1.TEXT
+ '%'' OR UPPER(XM) = '''
+ EDIT1.TEXT
+ ''''
 
同意huawdg的写法,我一直是这么干的,比用动态的SQL效率更好!~
 
huawdg: 你的代码好象通不过。

to :X-man: 不写入动态sql中怎么用?
 
query1.SQL.clear;
query1.sql.add('select xm from tableA');
query1.sql.add('where xm like :a1');
query1.Parameters.ParamValues['a1']:='%' + edit1.text + '%';
query1.open;
使用动态SQL参数可以让你不用去写'号,delphi可以自己维护。
但如果你给参数赋了一个空字符串则会出错,也就是说动态参数不能为空。

如果使用+号来连接SQL则要注意单个'号在delphi中不同的表示。如果是跟在字符串之后,
则三个'号就表示两个'号,四个'号表示一个'号。
你试试:ShowMessage('sql str ''' + 'test' + '''');
+号连接这种方法相对来说容易出错。(如huawdg在第一行就少写了一个'号。 :)
如果你要用+号且SQL又很复杂则建议你用InputBox把生成的SQL弹出来。
inputbox('', '', Query.Sql);(这个方法不适应于上面的动态参数方法)
然后拷贝到相应的数据库中去执行,那么你可以得到更多的错误提示。这样便于调试。
 

query1.Parameters.ParamValues['a1']:=edit1.text;
改為
[red]query1.Parameters.ParamByName('a1').AsString:=QuotedStr(edit1.text);[/red]

edit1.text=1 or xm in (select xm from talbe1)之類的東西試試
 
我在用这个的时候,遇到常量就是'''常量''',遇到变量就''''+变量+'''',从来都不错!
 
to::blue_morning 感谢你的详细回答。
to:岚岚 : 能否说得详细一点?多谢了
 
query1.Parameters.ParamValues['a1'].asstring:=edit1.text;
 
>>SQL:='SELECT * FROM tableA WHERE XM LIKE ''%'
>> + EDIT1.TEXT
>> + '%'' OR UPPER(XM) = '''
>> + EDIT1.TEXT
>> + ''''
我也这么用。不过,写法有问题。如果edit1.text中有单引号,你就死定了。
这样写才对。 sql := ' select ..... xm like ' + QuotedStr('%' + edit1.text + '%')
+ ' or upper(xm) = ' + + QuotedStr(edit1.text)
 
同意陈晨的看法
 
多人接受答案了。
 
顶部