求助!!我以前贴过一张,现在又很迷茫,下面是我的一个过程!!(100分)

  • 主题发起人 主题发起人 老鳖
  • 开始时间 开始时间

老鳖

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Tmxinput.ToolButton9Click(Sender: TObject);
var
fatherid:array[0..20] of string;
num,i:integer;
begin
dbgrid2.Visible:=true;
dbgrid1.Visible:=false;

if query1.Active=true then
begin
query1.Close;
query1.SQL.Clear;
//query1.SQL.Add('select distinct count(上一级) as number from zgsb');
query1.SQL.Add('select distinct 上一级 from zgsb');
query1.Active:=true;
query1.Open;
num:=query1.RecordCount;
for i:=0 to (num-1) do
begin
query1.First;
repeat
begin
fatherid:=query1.FieldValues['上一级'];
query1.Next;
end;
until query1.Eof;
end;
end;
for i:=(num-1) to 0 do
begin
if query1.locate('上一级',fatherid,[locaseinsensitive]) then
begin
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select sum(建筑费) from zgsb');
query1.SQL.Add('where 上一级=:str');
query1.ParamByName('str').Value:=fatherid;
end
else
begin
messagedlg('记录未找到',mterror,[mbok],0);
exit;
end;
query1.Open;
query1.Edit;
query1.Post;
end;
end;
 
我的表的结构是这样的
表编号,顺序号,工程和费用名称,下级(bool),上一级,建筑费,设备费,...
1 1 aa 有 0 0 0 0
1 1.1 bb 有 1 0 0 0
1 1.1.1 cc 有 1.1 0 0 0
1 1.1.1.1 d 无 1.1.1 10 10 10
1 1.1.1.2 e 无 1.1.1 10 10 10
...
1 1.2 f 有 1 0 0 0
1 1.2.1 ff 无 1.2 10 10 10
...
2 ...
...
3...
现在我想把有下级的记录用程序自动加起来,以上是我写的语句,可是执行是query1为空
为什么呀??
 
1、有Open就不要Active:=True
2、程序循环有问题,逻辑混乱
 
看这头晕,建议你把两个sql用两个query来执行,不要都用query1.
-------------
query1.SQL.Add('where 上一级=:str');
query1.ParamByName('str').Value:=fatherid;
-------------
怎么看不懂压??
 
好像循环有点问题
for i:=0 to (num-1) do
begin
query1.First;
repeat
begin
fatherid:=query1.FieldValues['上一级']; //i没变,只得到最后一条记录的值
//如果这是你的目的,也用不着循环啊!
query1.Next;
end;
until query1.Eof;
end;
你的目的是什么?得到所有有下级的记录,并把下级的费用加起来?
试一试这个?
adoquery1.close;
adoquery1.sql.Clear;
Adoquery1.sql.add(''select distinct 顺序号 from zgsb where 下级=''有''';
adoquery1.open;
adoquery1.first;
while not adoquery1.eof do
begin
adoquery2.Close;
AdoQuery2.sql.Clear;
adoquery2.sql.add('select sum(建筑费) 建筑费 from zgsb where 上一级='''+
adoquery.field('顺序号').asstring+'''');
adoquery2.open;
// 赋值还是别的过程
adoquery2.first;
end;
end;
 
book523,谢谢你,求和过程我已经搞定了,但是现在我想不同的表编号下实现相同的求和过程
该怎么做???我现在只能实现表编号为1的记录的求和!望赐教!!
 
后退
顶部