注册 登录
编程论坛 Delphi论坛

怎样在query中用select统计某字段为特定值的记录数?

hspyrhzc 发布于 2007-02-16 00:10, 2928 次点击

怎样在query中用select统计某字段为特定值的记录数?

有一个租赁表,其中放的是每个客户每一部碟片的租借记录。
我已经知道了现在要租碟的客户的编号,放在变量 curkb 中
我想通过这个客户编号来统计 在租赁表中他还有多少部碟片未归还
并想将统计结果存在变量 myn 中,然后在edit中显示出来。
var
curkb: string;
myn: integer;
begin
curkb:=adoquery1.FieldByName('kb').Value;
adoquery3.SQL.Clear;
adoquery3.SQL.Text:='select count(kb) ''myn'+''''+
          ' from zl where kb='+quotedstr(curkb);
adoquery3.ExecSQL;
edit8.Text:=inttostr(myn);

运行老是出错。请问原因何在,怎么解决这个问题?

8 回复
#2
sgliuxiu2007-02-16 02:35
edit8.Text:=inttostr(myn);
是不是这句有问题?你在这句设置断点看看.
你应该将提示出错的内容写出来才好判断
#3
nongen2007-02-16 20:37

adoquery3.ExecSQL;这行出错的吧。
应该是adoquery3.SQL.Text:='select count(kb) ''myn'+''''+' from zl where kb='+quotedstr(curkb);的问题
select count(kb) as kb from zl where kb=
myn:=adoquery3.fieldbyname('kb').asinteger;
edit8.text:=inttostr(myn);
//如果你的kb是integer的话就可以。

#4
hspyrhzc2007-02-16 21:39
下面是我的新代码:
var
curkb: string; // 用来保存这次来租碟的客户编号
myn: integer; // 用来保存当前客户上次已租 仍未归还的记录数目
begin
curkb:=adoquery1.FieldByName('kb').Value; // kb 是字符型数据
adoquery3.SQL.Clear;
adoquery3.SQL.Text:='select count(kb) as myn from zl
where kb='+quotedstr(curkb);
adoquery3.ExecSQL;
edit7.Text:=inttostr(myn);

现在能运行了,可是无论客户是否存在未还的碟片,edit7中总是显示出 4927492
现在问题又出在哪里呢?
#5
xu20002007-02-16 23:55
myn没有赋值。
#6
nongen2007-02-17 01:16
现在能运行了,可是无论客户是否存在未还的碟片,edit7中总是显示出 4927492
现在问题又出在哪里呢?


这里因为你没有赋值,所以,4927492其实只是个随机数
#7
hspyrhzc2007-02-17 16:47
adoquery3.SQL.Text:='select count(kb) as myn from zl
where kb='+quotedstr(curkb);


首先,我是用 as myn 将统计结果赋给 myn 了啊

其次,即使是随机数,也不可能每次都是 4927492 呀
#8
xu20002007-02-17 16:56
as只是字段的别名,不是你的变量。
myn:=adoquery1.fieldsbyname('myn').asstring;
#9
hspyrhzc2007-02-17 18:29
再附代码:
var
curkb: string;
begin
curkb:=adoquery1.FieldByName('kb').Value; // 取得当前租碟客户的编号
adoquery3.SQL.Clear;
adoquery3.SQL.Text:='select count(kb) as mykb from zl
where kb='+quotedstr(curkb);
// 在租赁表zl中统计这个编号的客户已租的记录条数
// 保存在名为 mykb 的字段中.后面再使用.
adoquery3.ExecSQL;
edit7.Text:=adoquery3.FieldByName('mykb').AsString;
// 取出字段 mykb的值,再以字符形式赋给 edit7

这次彻底解决了这个问题.感谢xu2000的帮助.
1