免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2396 | 回复: 6
打印 上一主题 下一主题

请教查询SQL语句 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-02 15:45 |只看该作者 |倒序浏览
请教一条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;


请大家指教,谢谢。

论坛徽章:
0
2 [报告]
发表于 2009-07-02 15:46 |只看该作者



上图是操作界面。

SQL查询的目的是:

select sum(kct06.kcqcje) from kct06

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

论坛徽章:
0
3 [报告]
发表于 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;

论坛徽章:
0
4 [报告]
发表于 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('where  kcckdm=:dm');
                             /// parambyname('nd').AsSmallInt:=b;
                             /// parambyname('yf').AsSmallInt:=c;
                             parambyname('dm').AsString:=a;
                             open;
                       end;


这是怎么回事呢?

论坛徽章:
0
5 [报告]
发表于 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的程序中该如何进行转换? 都用到哪些函数??   谢谢

论坛徽章:
0
6 [报告]
发表于 2009-07-03 09:04 |只看该作者
诸位是不屑回复我的帖子,还是不会? 还是不想助人为乐????

论坛徽章:
33
ChinaUnix元老
日期:2018-07-04 15:10:362015年亚洲杯之阿联酋
日期:2015-02-06 17:15:532015亚冠之武里南联
日期:2015-06-06 15:40:252015亚冠之北京国安
日期:2015-06-17 15:42:412022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:322015亚冠之阿尔纳斯尔
日期:2015-09-20 09:42:1215-16赛季CBA联赛之北京
日期:2016-01-15 10:03:5915-16赛季CBA联赛之青岛
日期:2016-04-26 16:44:4915-16赛季CBA联赛之广夏
日期:2018-07-04 15:33:21C
日期:2016-10-25 16:12:142017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之同曦
日期:2017-02-22 22:41:10
7 [报告]
发表于 2009-07-03 11:21 |只看该作者
对DELPHI不太会,帮你顶一下吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP