最近想在单据里加一个计数字段(用的是DBGidEH控件),效果如下图:实现判断自动个数字段的计数,当NO.1-10这十个字段里的值有一个大于30时,算1;有2个大于30就算2;有3个就算3;有4个算4;依此类推。
其实在EXCEL里就用COUNT函数就可以有劳动动好心人帮帮忙?谢谢!
其实在EXCEL里就用COUNT函数就可以有劳动动好心人帮帮忙?谢谢!
解决方案 »
- 关于Array of byte 转换 Float 问题
- [Error] RLINK32: Too many resources to handle.
- 请问如何隐藏程序进程
- 请教有关DELPHI调用C++的DLL的问题!!!
- 三层系统使用ADO的问题,望高手指点!
- 代码实现将模糊图象变清晰的问题。求助!
- 高分求解:怎样得到DBGrid的某一行某一列中单元的文本(不通过数据集)
- 请问如何安装*.pas控件?
- 在线的朋友请进,有个问题!
- !!!!!!!!!!!!!!!!!!!!!100分排错,不满意可再加一百分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- delphi中错误 incompatible types: 'string' and 'TEdit'
- AnsiString的一个疑问,简答,大家一起来讨论
if (cds1.Fieldbyname('No.1').AsString)>30.....or (cds1.Fieldbyname('No.10').AsString)>30 then i=1
………………代码类似
begin
DBGrid1.DataSource.DataSet.First;
Num := 0;
for i := 0 to DBGrid1.DataSource.DataSet.FieldCount -1 do
begin
if DBGrid1.DataSource.DataSet.Fields[I+1].AsInteger > 30 then
Inc(Num);
end;
DBGrid1.DataSource.DataSet.Next;
end;
SELECT ID_NAME,NO.1,NO.2,NO.3,NO.4,NO.5,NO.6,NO.7,NO.8,NO.9,NO.10,
DECODE(SIGN(NO.1-30),1,1,0) +
DECODE(SIGN(NO.2-30),1,1,0) +
DECODE(SIGN(NO.3-30),1,1,0) +
DECODE(SIGN(NO.4-30),1,1,0) +
DECODE(SIGN(NO.5-30),1,1,0) +
DECODE(SIGN(NO.6-30),1,1,0) +
DECODE(SIGN(NO.7-30),1,1,0) +
DECODE(SIGN(NO.8-30),1,1,0) +
DECODE(SIGN(NO.9-30),1,1,0) +
DECODE(SIGN(NO.10-30),1,1,0) AS 个数
FROM TABLE ...
支持这个。
双击你的 TADOQuery ,New 一个 Field ,属性选择 Calc。
然后在这个 Field 的 OnCalc 上写。
var
I,Num: Integer;
begin
Result := -1;
try
while not DBGrid.DataSource.DataSet.Eof do
begin
DBGrid.DataSource.DataSet.First;
Num := 0;
for I := 0 to DBGrid.DataSource.DataSet.FieldCount -1 do
begin
if DBGrid.DataSource.DataSet.Fields[I+1].AsInteger > 30 then
Inc(Num);
end;
DBGrid.DataSource.DataSet.Next;
end;
Result := Num;
except
Exit;
end;
end;
你只要传入你要计算的DBGrid名称就好了