delphi 里这个sql语句错在哪里,该怎么写。谢谢。
sql:
select xingming,xuehao from banji where xingming like ('%王%') and xuehao like ('%21%')
delphi:
with Query1 do
begin
close;
sql.Clear ;
sql.add('select xingming,xuehao from banji where xingming like :a1 :a2 xuehao like :a3 ');
parambyname('a1').asstring :='%'+trim(edit1.text)+'%';
parambyname('a2').asstring :=combobox1.text;
parambyname('a3').asstring :='%'+trim(edit2.text)+'%';
open ;
end;
变量 a1 是输入的姓名,a3 是输入的学号,a2 是输入的连接符 可以使and 或者 or
执行时提示出错在:a2这里。xingming like :a1 是没有错的。
请问这个怎么写。谢谢。
[解决办法]
你这样输入的SQL语句变成了:
select xingming,xuehao from banji where xingming like '%某某%' 'and' xuehao like '%xx%'
这样就错了。连接符不能用参数的形式。你这个可以用IF语句判断,或者拼接字符串的形式。
[解决办法]
显然%的旁边并无like所必须的引号。
parambyname('a1').asstring :=quotedstr('%'+trim(edit1.text)+'%');
依次类推
[解决办法]
with Query1 do begin
close;
sql.Text:='select xingming,xuehao from banji where xingming like '
+QuotedStr('%'+trim(edit1.text)+'% ')
+combobox1.text
+' xuehao like '
+QuotedStr(' %'+trim(edit2.text)+'%');
open ;
end;
[解决办法]
恩,这样写对了。我一般都这样写。不喜欢有::a1那种参数形式。
[解决办法]
:a1 的方式(绑定变量)在oracle里效率比较高。
不过也有缺点,当绑定的变量作为字段名称的时候是不能使用group by的。
[解决办法]
like后面应该是 '% %'这样的,SQL里面的'号,可以用chr(39)来代替
[解决办法]
用变量
like :a1 '+combobox1.text+' xuehao
[解决办法]
讨厌使用“:”,看起来不爽。
------解决方案--------------------
lz 你想实现的是在combobox1中选择哪个连接语句,sql就怎么执行。
例如:
combobox1中选择的是and那么sql语句中就是and连接,是or就是or连接对吧。
首先你的思路是错误的,delphi中不连接不能用参数。想实现你的功能,可以用if实现。
例如:
if combobox1.text=and then
begin
…………
end
else
if combobox1.text=or then
begin
……
end;
这样就可以实现你的功能了,虽说有点麻烦。
[解决办法]
不好意思写错了!!!!!汗!!!
是
if combobox1.Items=0 then
begin
……
end
else
if…………
[解决办法]
if combobox1.itemindex=0 then
begin
^^^^^
end
else
if^^^^^^^^
我日,平常有提示,还真没注意过这些细节!