我以前做的程序,现在需要修改一下,但是,出现 BOF或EOF中有一个是"真",或者当前的记录已被删除,所需的操作要求一个当前的记录。以前编译没有出错,现在出现上述问题,代码如下:
procedure TAFX_fysjlr.lg();
var
i,count:integer;
node:TdxTreelistnode;
sum:real;
begin
if DBEdit_dw.Text='' then
begin
showmessage('请选择单位!');
exit;
end ;
if DBEdit_xm.Text='' then
begin
showmessage('请选择项目!');
exit;
end ;
sum:=0.0;
//以下提取数据库中已经存在的符合条件的数据并重新生成 dxTreeList1的记录
dxTreeList1.ClearNodes;
ADOQuery_sj.Close;
ADOQuery_sj.SQL.Clear;
ADOQuery_sj.SQL.Text:='select xmmc,special,Unit_price,amonut,sub_price,Provider_name,memo from fyxm_detail where dw_id=:dwid and fyxm_id=:xmid and input_date=:d_date';
ADOQuery_sj.Parameters[0].Value:=pdw(glnode.Data)^.dwid;
ADOQuery_sj.Parameters[1].Value:=pfyxm(gloabnode.Data)^.fyxmid;
ADOQuery_sj.Parameters[2].Value:=datetostr(olddate);
ADOQuery_sj.open;
count:=ADOQuery_sj.RecordCount;
if count>0 then
begin
ADOQuery_sj.First;
for i:=0 to count-1 do
begin
node:=dxTreeList1.add;
node.Values[0]:=ADOQuery_sj.Fields[0].AsString;
node.Values[1]:=ADOQuery_sj.Fields[1].AsString;
node.Values[2]:=ADOQuery_sj.Fields[2].Asfloat;
node.Values[3]:=ADOQuery_sj.Fields[3].Asfloat;
node.Values[4]:=ADOQuery_sj.Fields[4].Asfloat;
node.Values[5]:=ADOQuery_sj.Fields[5].AsString;
node.Values[6]:=ADOQuery_sj.Fields[6].AsString;
sum:=sum+node.Values[4];
if (ADOQuery_sj.Bof) or (ADOQuery_sj.eof) then exit;
ADOQuery_sj.Next;
end;
edit_sum.Text:=floattostr(sum);
end;
end;
问题老出现在查询那一步,有几位大虾让我打补丁,但是我打完补丁后ADO组件不能用了,最后还是重新装delphi,我以上的问题该如何解决啊
procedure TAFX_fysjlr.lg();
var
i,count:integer;
node:TdxTreelistnode;
sum:real;
begin
if DBEdit_dw.Text='' then
begin
showmessage('请选择单位!');
exit;
end ;
if DBEdit_xm.Text='' then
begin
showmessage('请选择项目!');
exit;
end ;
sum:=0.0;
//以下提取数据库中已经存在的符合条件的数据并重新生成 dxTreeList1的记录
dxTreeList1.ClearNodes;
ADOQuery_sj.Close;
ADOQuery_sj.SQL.Clear;
ADOQuery_sj.SQL.Text:='select xmmc,special,Unit_price,amonut,sub_price,Provider_name,memo from fyxm_detail where dw_id=:dwid and fyxm_id=:xmid and input_date=:d_date';
ADOQuery_sj.Parameters[0].Value:=pdw(glnode.Data)^.dwid;
ADOQuery_sj.Parameters[1].Value:=pfyxm(gloabnode.Data)^.fyxmid;
ADOQuery_sj.Parameters[2].Value:=datetostr(olddate);
ADOQuery_sj.open;
count:=ADOQuery_sj.RecordCount;
if count>0 then
begin
ADOQuery_sj.First;
for i:=0 to count-1 do
begin
node:=dxTreeList1.add;
node.Values[0]:=ADOQuery_sj.Fields[0].AsString;
node.Values[1]:=ADOQuery_sj.Fields[1].AsString;
node.Values[2]:=ADOQuery_sj.Fields[2].Asfloat;
node.Values[3]:=ADOQuery_sj.Fields[3].Asfloat;
node.Values[4]:=ADOQuery_sj.Fields[4].Asfloat;
node.Values[5]:=ADOQuery_sj.Fields[5].AsString;
node.Values[6]:=ADOQuery_sj.Fields[6].AsString;
sum:=sum+node.Values[4];
if (ADOQuery_sj.Bof) or (ADOQuery_sj.eof) then exit;
ADOQuery_sj.Next;
end;
edit_sum.Text:=floattostr(sum);
end;
end;
问题老出现在查询那一步,有几位大虾让我打补丁,但是我打完补丁后ADO组件不能用了,最后还是重新装delphi,我以上的问题该如何解决啊
解决方案 »
- 为什么不能触发dbgrid的onkeypress事件(ADOQUERY中指针已经变化,但DBGRID显示的内容却不变)?
- rc文件问题请教
- 一个送分的问题,如何把一个动态的记录数组做为参数传给一个函数?再问,如何在DataModule关掉整个程序,谢谢!
- 熟悉cxgrid朋友请进,关于cxgrid行选择的问题。
- 如何得到比较精准的浮点数?
- com+组件可以安装在同一台计算机的不同com+应用程序里吗?
- 用Apro做传真系统,当发送的文件大于17张时就发不出去,希望各位老大能指条明路
- 软驱经常自己读写,如何处理?高手预留!!
- 一个在MDI中打开窗口的过程,小弟不明白什么意思,请帮忙解释一下。谢谢。
- 完装VCL为何出错?
- VB下写的OCX可以DELPHI下使用吗?
- 如何在程序中控制光驱的速度?
ADOQuery_sj.Sql.add('select count(1) as C from .... where....');
ADOQuery_sj.open;
if ADOQuery_sj.Fields.FieldByName('C').AsInteger > 0 then
....
------------------------------------------------------------
count:=ADOQuery_sj.RecordCount;
if count>0 then
begin
ADOQuery_sj.First;
for i:=0 to count-1 do
begin
node:=dxTreeList1.add;
node.Values[0]:=ADOQuery_sj.Fields[0].AsString;
node.Values[1]:=ADOQuery_sj.Fields[1].AsString;
node.Values[2]:=ADOQuery_sj.Fields[2].Asfloat;
node.Values[3]:=ADOQuery_sj.Fields[3].Asfloat;
node.Values[4]:=ADOQuery_sj.Fields[4].Asfloat;
node.Values[5]:=ADOQuery_sj.Fields[5].AsString;
node.Values[6]:=ADOQuery_sj.Fields[6].AsString;
sum:=sum+node.Values[4];
if (ADOQuery_sj.Bof) or (ADOQuery_sj.eof) then exit;
ADOQuery_sj.Next;
end;
edit_sum.Text:=floattostr(sum);
end;
---------------------------------------------------------------
while not ADOQuery_sj.Eof do
begin
node:=dxTreeList1.add;
node.Values[0]:=ADOQuery_sj.Fields[0].AsString;
node.Values[1]:=ADOQuery_sj.Fields[1].AsString;
node.Values[2]:=ADOQuery_sj.Fields[2].Asfloat;
node.Values[3]:=ADOQuery_sj.Fields[3].Asfloat;
node.Values[4]:=ADOQuery_sj.Fields[4].Asfloat;
node.Values[5]:=ADOQuery_sj.Fields[5].AsString;
node.Values[6]:=ADOQuery_sj.Fields[6].AsString;
sum:=sum+node.Values[4];
ADOQuery_sj.Next;
end;
edit_sum.Text:=floattostr(sum);