Button1Click要点击执行很多遍才能计算出正确的‘外报含税价’。不明白是为什么,有人能指点一下吗。
数据库是access,就一个表。有100多个列,分别输入值,然后计算出总值。
..........
procedure TForm1.Button1Click(Sender: TObject);
Var
Str :string;
begin
Str:=dbgrideh1.datasource.dataset.FieldByName('编号').Asstring;
adoquery1.Close;
adoquery1.sql.Clear;
//注塑工序费用
adoquery1.SQL.add('update 注塑 set t21=Q21*S21/100*I21/1000000'); //注塑色母
adoquery1.SQL.add(',u21=J21/1000*S21/100*(Q21*V21+R21)'); //注塑色粉
adoquery1.SQL.add(',ae21=((Q21+R21/V21)*(1-Y21/100)*K21/1000000+(Q21+R21/V21)*Y21/100*X21/1000000+T21+U21)*(1+W21/100)+Z21*AA21+AB21*AC21+AD21');//注塑材料小计
adoquery1.SQL.add(',ag21=af21*e4'); //注塑水费
adoquery1.SQL.add(',ah21=(AL21/3600*M21)/V21*0.7');//用电量70%
adoquery1.SQL.add(',ai21=ah21*e3'); //电费
adoquery1.SQL.add(',ak21=AG21+AI21+AJ21');//制造小计
adoquery1.SQL.add(',an21=AL21/3600*E7/V21+AM21*E7');//工时费
adoquery1.SQL.add(',ap21=an21+ao21');//劳务小计
adoquery1.SQL.add(',ar21=(AE21+AK21+AP21)*(1+1-AQ21/100)');//注塑工序费用合计
//以下模具工序费用
adoquery1.SQL.add(',at21=AS21*1000*(1-Y21/100)*K21/1000000+Y21/100*X21/1000000');//试打料费
adoquery1.SQL.add(',au21=at21');
adoquery1.SQL.add(',av21=(BA21/60*M21)/V21*0.7');//电费
adoquery1.SQL.add(',aw21=av21*e3');//电费
adoquery1.SQL.add(',ay21=ax21*e4'); //电费
adoquery1.SQL.add(',az21=AW21+AY21');//模具制造小计
adoquery1.SQL.add(',bb21=ba21/60*e8');//换模费
adoquery1.SQL.add(',bd21=BC21/60*E8');//准备费用
adoquery1.SQL.add(',be21=BB21+BD21');//劳务小计
adoquery1.SQL.add(',bf21=N21/V21/3000');//换模次数
adoquery1.SQL.add(',bg21=(AU21+AZ21+BE21)*BF21/N21');//调试合计
//以下印刷工序费用
adoquery1.SQL.add(',bj21=bh21+bi21');//材料小计
adoquery1.SQL.add(',bl21=bo21/3600*bk21*e3');//电费
adoquery1.SQL.add(',bn21=bl21+bm21');//制造小计
adoquery1.SQL.add(',bq21=(BO21+BP21)/3600*E6');//劳务小计
adoquery1.SQL.add(',bs21=(BJ21+BN21+BQ21)*(1+1-BR21/100)');//印刷合计
//以下装配工序费用
adoquery1.SQL.add(',cn21=BT21*BU21+BV21*BW21+BX21*BY21+BZ21*CA21+CB21*CC21+CD21*CE21+CF21*CG21+CH21*CI21+CJ21*CK21+CL21+CM21');//材料小计
adoquery1.SQL.add(',cp21=CS21/3600*CO21*E3');//电费
adoquery1.SQL.add(',cr21=cp21+cq21');//制造合计
adoquery1.SQL.add(',cu21=(CS21/3600*E9)+CT21/3600*E9');//劳务小计
adoquery1.SQL.add(',cw21=(CN21+CR21+CU21)*(1+1-CV21/100)');//装配小计
//以下各工序合计
adoquery1.SQL.add(',cz21=(AR21+BG21+BS21+CW21)*(1+CX21/100)*(1+CY21/100)');//变动费用
adoquery1.SQL.add(',o21=CZ21+AL21/3600/24*(DA21+DB21+DC21)+BA21/60/24*BF21*(DA21+DB21+DC21)/N21');//实际成本
adoquery1.SQL.add(',p21=O21*(1+P12/100)');//外报含税价
adoquery1.SQL.add('where 编号='+Str); //当前行
adoquery1.ExecSQL;
adotable1.Active:=false; //刷新
adotable1.Active:=true;
end;end.
数据库是access,就一个表。有100多个列,分别输入值,然后计算出总值。
..........
procedure TForm1.Button1Click(Sender: TObject);
Var
Str :string;
begin
Str:=dbgrideh1.datasource.dataset.FieldByName('编号').Asstring;
adoquery1.Close;
adoquery1.sql.Clear;
//注塑工序费用
adoquery1.SQL.add('update 注塑 set t21=Q21*S21/100*I21/1000000'); //注塑色母
adoquery1.SQL.add(',u21=J21/1000*S21/100*(Q21*V21+R21)'); //注塑色粉
adoquery1.SQL.add(',ae21=((Q21+R21/V21)*(1-Y21/100)*K21/1000000+(Q21+R21/V21)*Y21/100*X21/1000000+T21+U21)*(1+W21/100)+Z21*AA21+AB21*AC21+AD21');//注塑材料小计
adoquery1.SQL.add(',ag21=af21*e4'); //注塑水费
adoquery1.SQL.add(',ah21=(AL21/3600*M21)/V21*0.7');//用电量70%
adoquery1.SQL.add(',ai21=ah21*e3'); //电费
adoquery1.SQL.add(',ak21=AG21+AI21+AJ21');//制造小计
adoquery1.SQL.add(',an21=AL21/3600*E7/V21+AM21*E7');//工时费
adoquery1.SQL.add(',ap21=an21+ao21');//劳务小计
adoquery1.SQL.add(',ar21=(AE21+AK21+AP21)*(1+1-AQ21/100)');//注塑工序费用合计
//以下模具工序费用
adoquery1.SQL.add(',at21=AS21*1000*(1-Y21/100)*K21/1000000+Y21/100*X21/1000000');//试打料费
adoquery1.SQL.add(',au21=at21');
adoquery1.SQL.add(',av21=(BA21/60*M21)/V21*0.7');//电费
adoquery1.SQL.add(',aw21=av21*e3');//电费
adoquery1.SQL.add(',ay21=ax21*e4'); //电费
adoquery1.SQL.add(',az21=AW21+AY21');//模具制造小计
adoquery1.SQL.add(',bb21=ba21/60*e8');//换模费
adoquery1.SQL.add(',bd21=BC21/60*E8');//准备费用
adoquery1.SQL.add(',be21=BB21+BD21');//劳务小计
adoquery1.SQL.add(',bf21=N21/V21/3000');//换模次数
adoquery1.SQL.add(',bg21=(AU21+AZ21+BE21)*BF21/N21');//调试合计
//以下印刷工序费用
adoquery1.SQL.add(',bj21=bh21+bi21');//材料小计
adoquery1.SQL.add(',bl21=bo21/3600*bk21*e3');//电费
adoquery1.SQL.add(',bn21=bl21+bm21');//制造小计
adoquery1.SQL.add(',bq21=(BO21+BP21)/3600*E6');//劳务小计
adoquery1.SQL.add(',bs21=(BJ21+BN21+BQ21)*(1+1-BR21/100)');//印刷合计
//以下装配工序费用
adoquery1.SQL.add(',cn21=BT21*BU21+BV21*BW21+BX21*BY21+BZ21*CA21+CB21*CC21+CD21*CE21+CF21*CG21+CH21*CI21+CJ21*CK21+CL21+CM21');//材料小计
adoquery1.SQL.add(',cp21=CS21/3600*CO21*E3');//电费
adoquery1.SQL.add(',cr21=cp21+cq21');//制造合计
adoquery1.SQL.add(',cu21=(CS21/3600*E9)+CT21/3600*E9');//劳务小计
adoquery1.SQL.add(',cw21=(CN21+CR21+CU21)*(1+1-CV21/100)');//装配小计
//以下各工序合计
adoquery1.SQL.add(',cz21=(AR21+BG21+BS21+CW21)*(1+CX21/100)*(1+CY21/100)');//变动费用
adoquery1.SQL.add(',o21=CZ21+AL21/3600/24*(DA21+DB21+DC21)+BA21/60/24*BF21*(DA21+DB21+DC21)/N21');//实际成本
adoquery1.SQL.add(',p21=O21*(1+P12/100)');//外报含税价
adoquery1.SQL.add('where 编号='+Str); //当前行
adoquery1.ExecSQL;
adotable1.Active:=false; //刷新
adotable1.Active:=true;
end;end.
解决方案 »
- 在midas中服务端,如何主动发数据给多个客户端
- 请教一个DLL兼容性的问题??? 100分
- 用delphi做网络监控 高分请教
- 急急急!函数GetTextExtentExPoint怎么用?
- 小问题,100分,来者有分
- 请问有人知道如何读取WIN2K的系统日志么?
- 请问如何减少exe文件的大小?
- 请推荐几本关于Delphi6/Kylix的书,好吗?(好象这样的书不是很多,与VC/VB相比)--内空
- 经常听说有个叫中国程序员和DELPHI大富翁的网站,有谁知道他们地址吗?
- 在设计数据库时,是不是不用别名,就可以不配置bde?
- delphi egg ,没有看过的可以来看一下..
- delphi如何制作代码生成机,delphi有没有类似java的velocity这样的模板引擎
其实一次execsql就更新了,就是adotable1刷新后,并没有取得新的数据而已
请教我该怎么才能解决这个问题?感谢~!
如果再不行,就把adoconnection断开再连,然后重新打开表
Application.ProcessMessages;
Sleep(250);
Application.ProcessMessages;
Sleep(250);
Application.ProcessMessages;
ADOQuery1.Active := true;
你看看你其他地方的代码是怎么写的,是不是对他有影响。
还有,你可以这样:
procedure TForm1.Button1Click(Sender: TObject);
Var
Str :string;
begin
Str:=dbgrideh1.datasource.dataset.FieldByName('编号').Asstring;
adoquery1.Close;
adoquery1.sql.Clear;
//注塑工序费用
adoquery1.SQL.add('update 注塑 set t21=Q21*S21/100*I21/1000000'); //注塑色母
adoquery1.SQL.add(',u21=J21/1000*S21/100*(Q21*V21+R21)'); //注塑色粉
adoquery1.SQL.add(',ae21=((Q21+R21/V21)*(1-Y21/100)*K21/1000000+(Q21+R21/V21)*Y21/100*X21/1000000+T21+U21)*(1+W21/100)+Z21*AA21+AB21*AC21+AD21');//注塑材料小计
adoquery1.SQL.add(',ag21=af21*e4'); //注塑水费
adoquery1.SQL.add(',ah21=(AL21/3600*M21)/V21*0.7');//用电量70%
adoquery1.SQL.add(',ai21=ah21*e3'); //电费
adoquery1.SQL.add(',ak21=AG21+AI21+AJ21');//制造小计
adoquery1.SQL.add(',an21=AL21/3600*E7/V21+AM21*E7');//工时费
adoquery1.SQL.add(',ap21=an21+ao21');//劳务小计
adoquery1.SQL.add(',ar21=(AE21+AK21+AP21)*(1+1-AQ21/100)');//注塑工序费用合计
//以下模具工序费用
adoquery1.SQL.add(',at21=AS21*1000*(1-Y21/100)*K21/1000000+Y21/100*X21/1000000');//试打料费
adoquery1.SQL.add(',au21=at21');
adoquery1.SQL.add(',av21=(BA21/60*M21)/V21*0.7');//电费
adoquery1.SQL.add(',aw21=av21*e3');//电费
adoquery1.SQL.add(',ay21=ax21*e4'); //电费
adoquery1.SQL.add(',az21=AW21+AY21');//模具制造小计
adoquery1.SQL.add(',bb21=ba21/60*e8');//换模费
adoquery1.SQL.add(',bd21=BC21/60*E8');//准备费用
adoquery1.SQL.add(',be21=BB21+BD21');//劳务小计
adoquery1.SQL.add(',bf21=N21/V21/3000');//换模次数
adoquery1.SQL.add(',bg21=(AU21+AZ21+BE21)*BF21/N21');//调试合计
//以下印刷工序费用
adoquery1.SQL.add(',bj21=bh21+bi21');//材料小计
adoquery1.SQL.add(',bl21=bo21/3600*bk21*e3');//电费
adoquery1.SQL.add(',bn21=bl21+bm21');//制造小计
adoquery1.SQL.add(',bq21=(BO21+BP21)/3600*E6');//劳务小计
adoquery1.SQL.add(',bs21=(BJ21+BN21+BQ21)*(1+1-BR21/100)');//印刷合计
//以下装配工序费用
adoquery1.SQL.add(',cn21=BT21*BU21+BV21*BW21+BX21*BY21+BZ21*CA21+CB21*CC21+CD21*CE21+CF21*CG21+CH21*CI21+CJ21*CK21+CL21+CM21');//材料小计
adoquery1.SQL.add(',cp21=CS21/3600*CO21*E3');//电费
adoquery1.SQL.add(',cr21=cp21+cq21');//制造合计
adoquery1.SQL.add(',cu21=(CS21/3600*E9)+CT21/3600*E9');//劳务小计
adoquery1.SQL.add(',cw21=(CN21+CR21+CU21)*(1+1-CV21/100)');//装配小计
//以下各工序合计
adoquery1.SQL.add(',cz21=(AR21+BG21+BS21+CW21)*(1+CX21/100)*(1+CY21/100)');//变动费用
adoquery1.SQL.add(',o21=CZ21+AL21/3600/24*(DA21+DB21+DC21)+BA21/60/24*BF21*(DA21+DB21+DC21)/N21');//实际成本
adoquery1.SQL.add(',p21=O21*(1+P12/100)');//外报含税价
adoquery1.SQL.add('where 编号='+Str); //当前行
adoquery1.ExecSQL;
adotable1.Active:=false; //刷新
adotable1.Active:=true;
ShowMessage('执行完成!');
end;然后再确定,看看。
adotable1.Active:=false; //刷新
adotable1.Active:=true;
这段先剥离出来,手动刷新看看是不是代码的问题,还是其他问题?
adoquery.edit;
try
adoquery.fieldbyname('field1').asstring := xxxxx1;
adoquery.fieldbyname('field2').asstring := xxxxx2;
adoquery.fieldbyname('field3').asstring := xxxxx3;
adoquery.post;
except
adoquery.cancel;
end;就可以,你怎么搞的那么麻烦
之前将adotable1.post执行下看看
adotable1.post
Str:=dbgrideh1.datasource.dataset.FieldByName('编号').Asstring;
ae21=((Q21+R21/V21)*(1-Y21/100)*K21/1000000+(Q21+R21/V21)*Y21/100*X21/1000000+T21+U21)*(1+W21/100)+Z21*AA21+AB21*AC21+AD21这个时候T21是空的哦你此次执行的时候T21还没有=你前面的值所以你要重复执行了
bdmh没错,楼主要调整好顺序!
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
Var
Str :string;
begin
Str:=dbgrideh1.datasource.dataset.FieldByName('编号').Asstring;
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('update 注塑 set t21=Q21*S21/100*I21/1000000'); //注塑色母
adoquery1.SQL.add(',u21=J21/1000*S21/100*(Q21*V21+R21)'); //注塑色粉
adoquery1.SQL.add(',ag21=af21*e4'); //注塑水费
adoquery1.SQL.add(',ai21=ah21*e3'); //电费
adoquery1.SQL.add(',an21=AL21/3600*E7/V21+AM21*E7');//工时费
adoquery1.SQL.add(',at21=AS21*1000*(1-Y21/100)*K21/1000000+Y21/100*X21/1000000');//试打料费
adoquery1.SQL.add(',av21=(BA21/60*M21)/V21*0.7');//电费
adoquery1.SQL.add(',ay21=ax21*e4'); //电费
adoquery1.SQL.add(',bb21=ba21/60*e8');//换模费
adoquery1.SQL.add(',bd21=BC21/60*E8');//准备费用
adoquery1.SQL.add(',bf21=N21/V21/3000');//换模次数
adoquery1.SQL.add(',bl21=bo21/3600*bk21*e3');//电费
adoquery1.SQL.add(',cp21=CS21/3600*CO21*E3');//电费
adoquery1.SQL.add(',ah21=(AL21/3600*M21)/V21*0.7');//用电量70%
adoquery1.SQL.add('where 编号='+Str);
adoquery1.ExecSQL;
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('update 注塑 set aw21=av21*e3');//电费
adoquery1.SQL.add('where 编号='+Str);
adoquery1.ExecSQL;
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('update 注塑 set ae21=((Q21+R21/V21)*(1-Y21/100)*K21/1000000+(Q21+R21/V21)*Y21/100*X21/1000000+T21+U21)*(1+W21/100)+Z21*AA21+AB21*AC21+AD21');//注塑材料小计
adoquery1.SQL.add(',ak21=AG21+AI21+AJ21');//制造小计
adoquery1.SQL.add(',ap21=an21+ao21');//劳务小计
adoquery1.SQL.add(',az21=AW21+AY21');//模具制造小计
adoquery1.SQL.add(',be21=BB21+BD21');//劳务小计
adoquery1.SQL.add(',au21=at21');
adoquery1.SQL.add(',bj21=bh21+bi21');//材料小计
adoquery1.SQL.add(',bn21=bl21+bm21');//制造小计
adoquery1.SQL.add(',bq21=(BO21+BP21)/3600*E6');//劳务小计
adoquery1.SQL.add(',cn21=BT21*BU21+BV21*BW21+BX21*BY21+BZ21*CA21+CB21*CC21+CD21*CE21+CF21*CG21+CH21*CI21+CJ21*CK21+CL21+CM21');//材料小计
adoquery1.SQL.add(',cr21=cp21+cq21');//制造合计
adoquery1.SQL.add(',cu21=(CS21/3600*E9)+CT21/3600*E9');//劳务小计
adoquery1.SQL.add('where 编号='+Str);
adoquery1.ExecSQL;
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('update 注塑 set bg21=(AU21+AZ21+BE21)*BF21/N21');//调试合计
adoquery1.SQL.add(',bs21=(BJ21+BN21+BQ21)*(1+1-BR21/100)');//印刷合计
adoquery1.SQL.add(',ar21=(AE21+AK21+AP21)*(1+1-AQ21/100)');//注塑工序费用合计
adoquery1.SQL.add(',cw21=(CN21+CR21+CU21)*(1+1-CV21/100)');//装配小计
adoquery1.SQL.add('where 编号='+Str);
adoquery1.ExecSQL;
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('update 注塑 set cz21=(AR21+BG21+BS21+CW21)*(1+CX21/100)*(1+CY21/100)');//变动费用
adoquery1.SQL.add('where 编号='+Str);
adoquery1.ExecSQL;
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('update 注塑 set o21=CZ21+AL21/3600/24*(DA21+DB21+DC21)+BA21/60/24*BF21*(DA21+DB21+DC21)/N21');//实际成本
adoquery1.SQL.add('where 编号='+Str);
adoquery1.ExecSQL;
adoquery1.Close;
adoquery1.sql.Clear;
adoquery1.SQL.add('update 注塑 set p21=O21*(1+P12/100)');//外报含税价
adoquery1.SQL.add('where 编号='+Str);
adoquery1.ExecSQL;
adotable1.Active:=false;
adotable1.Active:=true;
end;end.
Sleep(500);
Application.ProcessMessages;
Sleep(500);
Application.ProcessMessages; 去掉没用的adoquery1.close;最后再来一次
adotable1.Active:=false;
Application.ProcessMessages;
Sleep(500);
Application.ProcessMessages;
Sleep(500);
Application.ProcessMessages;
adotable1.Active:=true;
因为人多没分了,我准备另开一贴。