读书人

计算1-30列中所有行中不等于空的算法解

发布时间: 2012-04-03 12:38:19 作者: rapoo

计算1-30列中所有行中不等于空的算法
我用dbgrideh控件填充数据库no1-no30字段的数据后,要计算出这些字段所有不等于空的行数,并把计算结果加入对应列的页脚,代码如下:但得不到我要的结果,请大家帮忙看一下代码有什么问题?怎样修改才能达到我要的结果。
var
i,j:integer;
begin
ADODataSetFenbu.DisableControls;
for j := 1 to 30 do
begin
i := 0;
ADODataSetFenbu.first;
while not ADODataSetFenbu.eof do
begin
if ADODataSetFenbu.FieldByName('No'+inttostr(j)).AsString <> '' then
i := i + 1;
ADODataSetFenbu.next;
end;
DBGridEhFenbu.columns[j].footers[0].valuetype := fvtStatictext;
DBGridEhFenbu.columns[j].footers[0].value := inttostr(i);
end;
ADODataSetFenbu.EnableControls;
end;

[解决办法]
应该没问题,可能是字段有空格的情况,没排除到
可以直接用SQL查得到,要排除空格就加上ltrim()

select count(1) cnt1 from t where len(isnull(No1,''))<>0

select sum(case when len(isnull(No1,''))=0 then 0 else 1 end) as cnt1,
sum(case when len(isnull(No2,''))=0 then 0 else 1 end) as cnt2,
...
from t

读书人网 >.NET

热点推荐