程序代码执行出错!!!各位老大帮忙啊! ( 积分: 100 )

  • 主题发起人 主题发起人 xhliang
  • 开始时间 开始时间
X

xhliang

Unregistered / Unconfirmed
GUEST, unregistred user!
有一管理系统,通过客户端向服务器端修改多表数据,代码如下,不知何故,一天下来会发生数笔数据出错的情况情况。请各位指教!
procedure TForm16.Button8Click(Sender: TObject);
begin
if (edit12.text = '') or (edit3.text = '')or(edit5.text='')or(edit11.text='') then
begin
showmessage('请填入积分卡号等数据!');
end
else
begin
with adoquery2 do
begin
adoquery2.close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('insert into dm_khjf(dm,xfjf,j_date) values ('''+edit12.text+''','''+edit3.text+''',GetDate())');//将数据插入表
adoquery2.SQL.Add('update dm_kh set xfjf=xfjf+'''+edit3.text+''' where dm='''+edit12.text+'''');//修改表中数据
adoquery2.SQL.Add('insert into dm_khjfb(wzdm,mc,dj2,sl) select dm_khjfa.wzdm,dm_khjfa.mc,dm_khjfa.dj2,dm_khjfa.sl from dm_khjfa');//将数据插入另一表
adoquery2.SQL.Add('update dm_khjfb set j_date=GetDate() where dm is null');//修改另一表数据
adoquery2.SQL.Add('update dm_khjfb set jfz=b.jfz from dm_khjfb a join dm_khjfc b on a.wzdm=b.wzdm');
adoquery2.SQL.Add('update dm_khjfb set xfjf=jfz*sl where dm is null');
adoquery2.SQL.Add('update dm_khjfb set dm='''+edit12.Text+''' where dm is null');
adoquery2.sql.add('update dm_khjfb set j_jine=sl*dj2 where j_jine is null');
adoquery2.sql.add('update dm_khjfb set czdm='''+frmparame.edit3.text+''' where czdm=''''');
adoquery2.sql.add('update dm_khjfb set ckdm='''+edit11.text+''' where ckdm=''''');
adoquery2.ExecSQL;
end;
 
1、异常处理
2、事务处理
3、使用存储过程
 
看的头都大了,搞不清你要做什么!
和楼上一样,建议用存储过程。
 
该客户端每天要向服务器端插入和修改数百条数据。主要问题是不知何故有时一天会出现数笔数据出错的情况,多谢各位指教!
 
楼主查看一下SQL SERVER的日志吧。
 
有点乱!
 
lfausten说得很好,处理事务多了用存储过程很好
 
帮你顶一个
 
我有个建议.你去试试:
在此

procedure TForm16.Button8Click(Sender: TObject);
begin
if (edit12.text = '') or (edit3.text = '')or(edit5.text='')or(edit11.text='') then
begin
showmessage('请填入积分卡号等数据!');
end
else
begin
with adoquery2 do
begin
adoquery2.close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('insert into dm_khjf(dm,xfjf,j_date) values ('''+edit12.text+''','''+edit3.text+''',GetDate())');//将数据插入表
1.在这个地方,你先要确定插入记录的地方,比如插到最后一条记录.
2.在插入记录之前,你是否要检查有相同的记录;
3.你的数据库有没设置成可以输入空值.
 
WITH adoquery1 DO
TRY
Connection.BeginTrans;
你的代码
Connection.CommitTrans;
EXCEPT
Connection.RollbackTrans
END;
 
多谢各位指教!多谢
修改为如下:不知还会出错否?
procedure TForm16.Button8Click(Sender: TObject);
begin
if (edit12.text = '') or (edit3.text = '')or(edit5.text='')or(edit11.text='') then
begin
showmessage('请填入积分卡号等数据!');
end
else
begin
WITH adoquery2 DO
TRY
Connection.BeginTrans;
adoquery2.close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('insert into dm_khjf(dm,xfjf,j_date) values ('''+edit12.text+''','''+edit3.text+''',GetDate())');
adoquery2.ExecSQL;
adoquery2.close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('update dm_kh set xfjf=xfjf+'''+edit3.text+''' where dm='''+edit12.text+'''');
adoquery2.ExecSQL;
adoquery2.close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('insert into dm_khjfb(wzdm,mc,dj2,sl) select dm_khjfa.wzdm,dm_khjfa.mc,dm_khjfa.dj2,dm_khjfa.sl from dm_khjfa');
adoquery2.ExecSQL;
adoquery2.close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('update dm_khjfb set j_date=GetDate() where dm is null');
adoquery2.SQL.Add('update dm_khjfb set jfz=b.jfz from dm_khjfb a join dm_khjfc b on a.wzdm=b.wzdm');
adoquery2.SQL.Add('update dm_khjfb set xfjf=jfz*sl where dm is null');
adoquery2.SQL.Add('update dm_khjfb set dm='''+edit12.Text+''' where dm is null');
adoquery2.sql.add('update dm_khjfb set j_jine=sl*dj2 where j_jine is null');
adoquery2.sql.add('update dm_khjfb set czdm='''+frmparame.edit3.text+''' where czdm=''''');
adoquery2.sql.add('update dm_khjfb set ckdm='''+edit11.text+''' where ckdm=''''');
adoquery2.ExecSQL;
Connection.CommitTrans;
EXCEPT
Connection.RollbackTrans
END;
 
后退
顶部