關於TQuery的問題,非高手不要進
請問下面兩种方法究竟有甚麼差別(請注意實際上一定有差別)
有一個表tab,fields(idno string key,
name string);
我想通過idno找到name 方法有兩種:
已知idno 為sstr 已知的字串
1 :with query1 do
begin
Close;
Sql.Clear;
Sql.Add( ' select * from tab1 where idno =:idno ');
parambyname('idno').asstring :=sstr;
open;
end;
2 :1 :with query1 do
begin
Close;
Sql.Clear;
Sql.Add( ' select * from tab1 where idno '+''''+sstr+'''');
open;
end;
這兩種方法有時會返回結果不同請高手結我原因
问题点数:0、回复次数:7Top
1 楼yzf111(好累)回复于 2003-09-03 23:37:47 得分 0
2 :1 :with query1 do
....
Sql.Add( ' select * from tab1 where idno='''+sstr+'''');
...
end;
还有就是最好trim(sstr)
Top
2 楼yzf111(好累)回复于 2003-09-03 23:38:40 得分 0
应该是没有差别的Top
3 楼ychuiming(飞天)回复于 2003-09-03 23:45:34 得分 0
select * from tab1 where idno '+''''+sstr+''''
应为
'select * from tab1 where idno '''+sstr+''''Top
4 楼madyak(无天)回复于 2003-09-04 00:51:49 得分 0
第一种方法适用于固定的查询,整个SQL语句是固定不变的,通过参数来实现要查询目的
通常结合 if Not Query1.Prepared then
Query1.Prepare;结构来提高执行效率;确实能提高运行速度;
第二种方法适用于组合查询,整个SQL语句是经常变化的尤其是where..条件部分.条件由用户在哪些文本框中输入了内容决定。不适用与
if Not Query1.Prepared then
Query1.Prepare;结合,执行效率要低些。
如果前者不用Query1.Prepare二者效率应该是一样的。
不应该返回不同的结果集,第二个例子少写了个等号,如果有问题多检查SQL语句
Top
5 楼Piao40993470(ミ飘ミ)回复于 2003-09-04 01:12:54 得分 0
应该没什么差别的。。((关键还是要看你最后生成的SQL语句的真实值,,((机器是不会骗人的,但人经常被自己所骗。Top
6 楼zjqyb(风清扬*任它溺水三千,我只取一瓢饮*)回复于 2003-09-04 07:03:20 得分 0
如果是paradoz,access,foxpro的数据量很大的情况下
1的速度比2慢很多,但结果是一样的
Top
7 楼coffieblue(常量)回复于 2003-09-04 08:04:17 得分 0
你使用的何种数据库
string 在 不同数据库 会有不同的技术实现
有时 会有不必要的空格也被存储
使用trim来规范取出的结果
或者在数据库设计中 使用 动态域 例如sqlserver中的varcharTop




