delphi 如何循环遍历acess表 然后计算存入到另一张表
delphi吧
全部回复
仅看楼主
level 7
KIrito897 楼主
delphi 如何循环遍历acess表 然后计算存入到另一张表
2015年05月10日 11点05分 1
level 7
KIrito897 楼主
具体是 讲一张表的数据遍历一次,讲数据加工下然后 将新的数据集存在另一张表。。现在我做的只能保存一条记录了
2015年05月10日 11点05分 2
level 7
KIrito897 楼主
2015年05月10日 11点05分 3
level 7
KIrito897 楼主
大神呢
2015年05月10日 11点05分 4
level 7
KIrito897 楼主
2015年05月10日 12点05分 5
level 7
KIrito897 楼主
大神 帮我看看
2015年05月10日 12点05分 6
level 10
直接用sql语言做就好了
或者delphi写 First 移到第一条记录 not Eof 本条记录不为空 Next 移到下条记录
2015年05月10日 12点05分 8
第一个表有五个记录,第二个表还是只存了一个记录啊
2015年05月10日 12点05分
回复 KIrito897 :建议你看看adoquery的用法,就知道哪里错了
2015年05月10日 12点05分
好的
2015年05月10日 13点05分
回复 KIrito897 :还是不太清楚啊
2015年05月10日 13点05分
level 7
KIrito897 楼主
2015年05月10日 12点05分 9
level 9
看了你的源码,感觉你还是比较擅长使用ADOTable比较多些。改回用ADOTable吧,使用ADOQuery不用这样写,需要修改的过多了。
2015年05月11日 01点05分 10
那个怎么写啊 ,请把框架写我看看
2015年05月11日 03点05分
level 9
使用TADOTable控件
旧表ADOTable1,新表ADOTable2
清空ADOTable2
ADOTable1.First;
While not ADOTable1.Eofdo begin
….. //计算
ADOTable2.Append;
…… //将ADOTable1相同的字段数据赋值给 ADOTable2字段
…… //将计算结果赋值给ADOTable2字段
ADOTable2.post;
ADOTable1.next; end;
使用TADOQuery 控件
Var SQL_s:String;
begin
ADOQuery1.close;
ADOQuery1.SQL.clear;
ADOQuery1.SQL.add('Select * from Bid');
ADOQuery1.Open;
while not ADOQuery1.Eof do begin
...... //赋值及计算
ADOQuery2.close;
ADOQuery2.SQL.clear;
SQL_s:='Insert into ...' //(你的写法)
ADOQuery2.SQL.add(SQL_s);
ADOQuery2.ExecSQL;
ADOQuery1.next; end;
ADOQuery2.close; //打开新表
ADOQuery2.SQL.clear;
ADOQuery2.SQL.add('Select * from Estimate);
ADOQuery2.Open;
end;
2015年05月11日 03点05分 11
哎,规范写法复制过来大变样了 [委屈] ADOQuery2.SQL.add('Select * from Estimate');
2015年05月11日 03点05分
3强我试试啊
2015年05月11日 03点05分
回复
������168168
:怎么还是不行啊,新表里只有一行记录,不能重复创建
2015年05月11日 03点05分
level 7
KIrito897 楼主
改过的代码 。。@云中龙168168
procedure TfrmMain.NcaculateClick(Sender: TObject);
var
bid1: TBid;
estimate: TEstimate;
sql_s: string;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.add ('select * from Bid');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
bid1.CompanyNo := ADOQuery1.FieldByName('CompanyNo').AsString;
bid1.Quantity := ADOQuery1.FieldByName('Quantity').AsInteger;
bid1.MaterialPrice := ADOQuery1.FieldByName('MaterialPrice').AsInteger;
bid1.Workdayprice := ADOQuery1.FieldByName('Workdayprice').AsInteger;
bid1.Mechanicalprice := ADOQuery1.FieldByName('Mechanicalprice').AsInteger;
bid1.OtherPrice := ADOQuery1.FieldByName('OtherPrice').AsInteger;
bid1.FinishTime := ADOQuery1.FieldByName('FinishTime').AsInteger;
estimate.EstimateFactor := 0.2*bid1.Quantity + 0.3*bid1.MaterialPrice
+ 0.2*bid1.Workdayprice + 0.15*bid1.Mechanicalprice + 0.05*bid1.OtherPrice
+ 0.1*bid1.FinishTime;
estimate.CompanyNo :=bid1.CompanyNo;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
sql_s := ('insert into Estimate(CompanyNo, EstimateFactor )'+
'values(:CompanyNo, :EstimateFactor)');
ADOQuery2.SQL.Add(sql_s);
ADOQuery2.Parameters.ParamByName('CompanyNo').Value :=bid1.CompanyNo;
ADOQuery2.Parameters.ParamByName('EstimateFactor').Value := estimate.EstimateFactor;
ADOQuery2.ExecSQL;
ADOQuery1.Next;
end;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select * from Esitmate');
ADOQuery2.Open;
end;
2015年05月11日 04点05分 12
还是只有一条记录啊
2015年05月11日 04点05分
@KIrito897 除非你的源库只有一条记录,要不肯定不会只有一条记录,之前我给出的模式是实际做过测试,其次,如果新库有多条相同的记录,你检测一下insert 是否出错。再次,建议你还是多看看书吧,有些基础的东西是问不出来的,只有自己多练才能掌握
2015年05月12日 01点05分
回复 云中龙168168 :嗯嗯 我已经 解决了就是 循环前 没有删除新表
2015年05月12日 04点05分
@KIrito897 嘻嘻,是刻意不写出来,得到过于容易就会成为习惯 [哈哈]
2015年05月13日 01点05分
1