誰帮我简化一下代码,谢谢!(100分)

Z

zhj218

Unregistered / Unconfirmed
GUEST, unregistred user!
问题一:执行几次后会出现不同的结果。
adoquery1.SQL.Clear;
adoquery1.SQL.Add('delete from shuser.glfx');
adoquery1.ExecSQL;
adoquery1.SQL.Clear;
ADOquery1.SQL.Add('delete from shuser.cljc');
adoquery1.EXECSQL;
adoquery1.SQL.Clear;
ADOquery1.SQL.Add('delete from shuser.cljc1200');
adoquery1.EXECSQL;
adoquery1.SQL.Clear;
ADOquery1.SQL.Add('delete from shuser.jx');
adoquery1.EXECSQL;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into shuser.glfx(deh,deh1,cj_dz,cj_name,cj_sl,cj_dw,cj_dj) select dejj1.deh,dejj1.deh1,de.cj_dz,de.cj_name,de.fc_sl*dejj1.fy_sl,de.cj_dw,de.cj_dj from de,shuser.dejj1 where de.deh1=dejj1.deh1 ');
adoquery1.ExecSQL;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('insert into cljc(cj_dz,cj_name,cj_dj,cj_dw,cj_sl) select cj_dz,cj_name,cj_dj,cj_dw,sum(cj_sl) from glfx group by cj_dz,cj_name,cj_dj,cj_dw');
adoquery2.ExecSQL;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('insert into jx(cj_dz,cj_name,cj_dj,cj_dw,cj_sl) select cj_dz,cj_name,cj_dj,cj_dw,cj_sl from cljc where cj_dz>1199');
adoquery2.ExecSQL;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into shuser.cljc1200(cj_dz,cj_dz1,cj_name,cj_sl,cj_dw,cj_dj) select key_deh,deb.cj_dz,deb.cj_name,deb.fc_sl*cljc.cj_sl,deb.dw,deb.cj_dj from deb,shuser.cljc where deb.key_deh=cljc.cj_dz and cljc.cj_dz>1000 ');
adoquery1.ExecSQL;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('delete from cljc where cj_dz between 1001 and 1199');
adoquery2.ExecSQL;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('insert into cljc(cj_dz,cj_name,cj_dj,cj_dw,cj_sl) select cj_dz1,cj_name,cj_dj,cj_dw,sum(cj_sl) from cljc1200 group by cj_dz1,cj_name,cj_dj,cj_dw');
adoquery2.ExecSQL;
 
建议改用AdoCommand控件
AdoCommand1.Commandtext:=SqlString;
AdoCommand1.execute;
只要Sql语句写对,就不会出错,而且执行速度也快。
 
没什么好减的
 
你漏掉了ADOQUERY1.CLOSE和ADOQUERY2.CLOSE,这样会出错的。
 
应该不会吧!
 
都一并完成写成存储过程吧,
不过这种对数据库有改写作用的语句最好
用事务,不然数据库死琐,大罗神仙也救不了
BEGIN TRAN
--加入有写操作的SQL语句
if @@error>0
begin
ROLLBACK TRAN
RAISERROR ('操作失败',16,1)
return
end
ELSE
commit tran
GO

 
to:火龙真人
能说清楚一点吗,根据我的程序怎么完成一并操作,谢谢!
 
哪么多费看了都眼花 帮你减少一点吧

adoquery1.SQL.Clear;
adoquery1.SQL.Add('delete from shuser.glfx');
ADOquery1.SQL.Add('delete from shuser.cljc');
ADOquery1.SQL.Add('delete from shuser.cljc1200');
ADOquery1.SQL.Add('delete from shuser.jx');
adoquery1.SQL.Add('insert into shuser.glfx(deh,deh1,cj_dz,cj_name,cj_sl,cj_dw,cj_dj) select dejj1.deh,dejj1.deh1,de.cj_dz,de.cj_name,de.fc_sl*dejj1.fy_sl,de.cj_dw,de.cj_dj from de,shuser.dejj1 where de.deh1=dejj1.deh1 ');
adoquery2.SQL.Add('insert into cljc(cj_dz,cj_name,cj_dj,cj_dw,cj_sl) select cj_dz,cj_name,cj_dj,cj_dw,sum(cj_sl) from glfx group by cj_dz,cj_name,cj_dj,cj_dw');
adoquery2.SQL.Add('insert into jx(cj_dz,cj_name,cj_dj,cj_dw,cj_sl) select cj_dz,cj_name,cj_dj,cj_dw,cj_sl from cljc where cj_dz>1199');
adoquery1.SQL.Add('insert into shuser.cljc1200(cj_dz,cj_dz1,cj_name,cj_sl,cj_dw,cj_dj) select key_deh,deb.cj_dz,deb.cj_name,deb.fc_sl*cljc.cj_sl,deb.dw,deb.cj_dj from deb,shuser.cljc where deb.key_deh=cljc.cj_dz and cljc.cj_dz>1000 ');
adoquery2.SQL.Add('delete from cljc where cj_dz between 1001 and 1199');
adoquery2.SQL.Add('insert into cljc(cj_dz,cj_name,cj_dj,cj_dw,cj_sl) select cj_dz1,cj_name,cj_dj,cj_dw,sum(cj_sl) from cljc1200 group by cj_dz1,cj_name,cj_dj,cj_dw');
adoquery2.ExecSQL;

 
減什么減,不是挺好的。
 
with ADOQuery1 do begin
with SQL do begin
Clear;
Add('');
Add('');
end;
Open;
end;
with adoquery2 do begin
with sql do begin
begin
clear;
add('');
end;
open;
end;
 
执行几次后会出现不同的结果,是怎么回事,请各位高手指教
 
不要用 delete from XXXXXXX

建议用 TRUNCATE TABLE XXXXX 这样效率会更好!
 
procedure SQLExecute;
var
sqllist:array[0..9] of string;
i:integer;
begin
sqllist[0]:='your sql ...';
sqllist[1]:=''your sql ...';
.
.
sqllist[9]:=''your sql ...';
for i:=0 to 9 do
begin
application.processmessage;
adoquery.sql.clear;
adoquery.sql.add(sqllist);
try
adoquery.execsql;
except
raise;
end;
end;
end;
 
TO:zanpen2001
哈哈!我也这么想的给你说了。
……
for i:=0 to 9 do
begin
with adoquery do //再少几个字母,呵
begin
application.processmessage;
sql.clear;
sql.add(sqllist);
try
execsql;
except
raise;
end;
……
 
为什么执行多次的时候,用ADOQUERY形式显示到DBGRID里会出现不同的结果。有的时候记录会少一段
 
多人接受答案了。
 
顶部