请教查询SQL语句
请教一条SQL语句我用Delphi通过BDE连接Sybase数据库,现在要进行查询。
带参数的查询为什么那么慢呢?(大约3分钟),而不带参数的查询用不了2秒钟。
代码如下:
带参数的查询:
with query3 do
begin
close;
sql.clear;
sql.add('select sum(kcqcje) as d1 from kct06');
sql.add('where kckjnd=:nd and kckjyf=:yf and kcckdm=:dm');
parambyname('dm').AsString:=trim(edit2.Text);
parambyname('nd').AsSmallInt:=strtoint(trim(combobox2.Text));
parambyname('yf').AsSmallInt:=strtoint(trim(combobox3.Text));
open;
edit3.Text:=fieldbyname('d1').AsString;
end;
不带参数的查询:
with query4 do
begin
close;
sql.Clear;
sql.add('select sum(kcqcje) as d2 from kct06');
sql.add('where kckjnd=2009 and kckjyf=6 and kcckdm=''10100137''');
open;
edit4.Text:=fieldbyname('d2').AsString;
end;
请大家指教,谢谢。
上图是操作界面。
SQL查询的目的是:
select sum(kct06.kcqcje) from kct06
where kckjnd = 年份and kckjyf = 月份and kcckdm = “要查询的仓库或店铺代码” 修改可一下,把变量的函数放到begin 。。。。 end 外面,但是速度仍然太慢。
代码如下:
a:=trim(edit2.Text);
b:=strtoint(trim(combobox2.Text));
c:=strtoint(trim(combobox3.Text));
with query3 do
begin
close;
sql.clear;
sql.add('select sum(kcqcje) as d1 from kct06');
sql.add('where kckjnd=:nd and kckjyf=:yf and kcckdm=:dm');
parambyname('nd').AsSmallInt:=b;
parambyname('yf').AsSmallInt:=c;
parambyname('dm').AsString:=a;
open;
edit3.Text:=fieldbyname('d1').AsString;
end; 怀疑是查询变量的问题,再次修改 如下:
如果只用一个字符串类型的查询变量,则查询速度马上立马恢复到秒级 。
a:=trim(edit2.Text);
/// b:=strtoint(trim(combobox2.Text));
/// c:=strtoint(trim(combobox3.Text));
with query3 do
begin
close;
sql.clear;
sql.add('select sum(kcqcje) as d1 from kct06');
sql.add('wherekcckdm=:dm');
/// parambyname('nd').AsSmallInt:=b;
/// parambyname('yf').AsSmallInt:=c;
parambyname('dm').AsString:=a;
open;
end;
这是怎么回事呢? 测了一天,感觉是否在数据类型转换上面除了问题???
即:
parambyname('nd').AsSmallInt:=b;
parambyname('yf').AsSmallInt:=c;
中的AsSmallInt 。
在Sybase数据库中, ‘nd’的数据类型是smallint,'yf'的数据类型是 tinyint, 'kcqcje'的数据类型是decimal(15,2) ,'kcckdm'的数
据类型是char(8 )。
请问这些数据类型在Delphi的程序中该如何进行转换? 都用到哪些函数?? 谢谢 诸位是不屑回复我的帖子,还是不会? 还是不想助人为乐???? 对DELPHI不太会,帮你顶一下吧
页:
[1]