xxzqb 发表于 2009-07-02 15:45

请教查询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;


请大家指教,谢谢。

xxzqb 发表于 2009-07-02 15:46




上图是操作界面。

SQL查询的目的是:

select sum(kct06.kcqcje) from kct06

where kckjnd = 年份and kckjyf = 月份and kcckdm = “要查询的仓库或店铺代码”

xxzqb 发表于 2009-07-02 15:48

修改可一下,把变量的函数放到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;

xxzqb 发表于 2009-07-02 15:49

怀疑是查询变量的问题,再次修改 如下:

如果只用一个字符串类型的查询变量,则查询速度马上立马恢复到秒级 。

         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;


这是怎么回事呢?

xxzqb 发表于 2009-07-02 15:52

测了一天,感觉是否在数据类型转换上面除了问题???

即:

parambyname('nd').AsSmallInt:=b;
parambyname('yf').AsSmallInt:=c;

中的AsSmallInt 。

在Sybase数据库中, ‘nd’的数据类型是smallint,'yf'的数据类型是 tinyint, 'kcqcje'的数据类型是decimal(15,2) ,'kcckdm'的数

据类型是char(8 )。


请问这些数据类型在Delphi的程序中该如何进行转换? 都用到哪些函数??   谢谢

xxzqb 发表于 2009-07-03 09:04

诸位是不屑回复我的帖子,还是不会? 还是不想助人为乐????

WFCJZ 发表于 2009-07-03 11:21

对DELPHI不太会,帮你顶一下吧
页: [1]
查看完整版本: 请教查询SQL语句