同志们,进来逛逛.特别有请数据库查询高手.(100分)

  • 主题发起人 主题发起人 古城
  • 开始时间 开始时间

古城

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有这么一个问题.
SQL查询,如:
query1.close;
query1.sql.clear;
query1.sql.add('select * from bbs');
query1.sql.add('where hello='''+combobox1.text+'''');
query1.open;
bbs为表,hello为表bbs的字段
想把它转化成动态描述,如:
memo1.lines.text :='where hello='''+combobox1.text+'''
query1.sql.add(memo1.lines.text);
这么就执行不了,我在网吧上网,可能''处描述得不大正确
但语法检查没有毛病,但就是执行不了.
是不是memo1内的内容不能再有动态的东东
请大家帮帮忙.






 
hello 为字符性字段才需要加单引号。
 
这句memo1.lines.text :='where hello='''+combobox1.text+''' 最后应改为''''
 
试试这样:memo1.lines.text :='where hello='''+trim(combobox1.text)+'''
或是:memo1.lines.text :='where hello=trim(combobox1.text)
 
这样写就对了
memo1.lines.text :='where hello='+''''+trim(combobox1.text)+''''
 
memo1.lines.text :='where hello='+quotedstr(combobox1.text)
query1.sql.add(memo1.lines.text);
 
query1.sql.add('select * from bbs ');//加1个空格
^^
 
caocheng的方法应该最佳
 
最好的方法是
try
open;
except
showmessage(sql.text);
exit;
end;
当你看到自己的语句时就知道错在哪里了!
 
用参数的方式比较好,因为如果combobox1.text的内容含有'按你的语句就会出错
query1.close;
query1.sql.clear;
memo1.lines.text :='where hello=:T1';
query1.sql.add(memo1.lines.text);
query1.ParamByName('T1').AsString:=combobox1.text
query1.open;
 
添加完以后跟踪一下 query1.sql 的内容!
 
我试试看
 
好像不行
不是书写问题,可能是这种实现机制不可以。
 
where hello='''+combobox1.text+''''改为:
where hello='+''''+combobox1.text+''''
 
memo1.lines.text :='select * from bbs where hello= '+#39+combobox1.text+#39;
query1.sql.add(memo1.lines.text);
 
为什么那么多人经常问这样的问题,
 
query1.close;
query1.sql.clear;
query1.sql.add('select * from bbs');
query1.sql.add('where hello=:str');
query1.ParamByName('str').AsString :=combobox1.text;
query1.open;
 
这样写就对了
query1.close;
query1.sql.clear;
query1.sql.add('select * from bbs');
query1.sql.add('where where hello='+#39+trim(combobox1.text)+#39);
query1.open;

 
如果一个SQL太复杂的话,那就用参数化查询!我一直这么做,条理十分清楚。不象用
'太容易头大了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部