读书人

为何单步执行能成功直接运行就提示无

发布时间: 2013-08-09 15:16:24 作者: rapoo

为什么单步执行能成功,直接运行就提示无法更新,当前被锁定
做了一个数据更新的窗体,用于从SQL数据库更新数据到ACCESS,运行时提示‘无法更新,当前被锁定’,但是我单步执行或者是设置几个断点,就能正常成功,麻烦各位帮忙看下,万分感谢!

procedure TF_sjtb.Button3Click(Sender: TObject);
var
sqlstr,yc,bd:string;
begin
inherited;
label2.Caption:='更新中,请稍候';
screen.Cursor := crHourGlass;
try

//更新第一张表
f_dm.ADOConnection1.Execute('DELETE FROM shangpin');
with ADOQuery1 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
sqlstr:='';
sqlstr:='INSERT into shangpin SELECT * FROM [ODBC;Driver=SQL Server;Server=172.55.0.11;UID=sa;PWD=web361;database=shuju].shangpin' ;
ADOQuery1.SQL.Add(sqlstr);
ADOQuery1.Prepared;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
end;

//第一张表数据比对
ADOCommand1.CommandText:='select count(*) from shangpin';
ADOCommand2.CommandText:='select count(*) from shangpin';
yc:=VarToStr(ADOCommand1.Execute.Fields.Item[0].Value);
bd:=VarToStr(ADOCommand1.Execute.Fields.Item[0].Value);
if yc<>bd then
begin
label2.Caption:='商品信息更新失败,远程记录数'+yc+',本地记录数'+bd;
showmessage('商品信息更新失败');
Exit;
end;

//更新第二张表
f_dm.ADOConnection1.Execute('DELETE FROM GUIGE1');
with ADOQuery1 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
sqlstr:='';
sqlstr:='INSERT into GUIGE1 SELECT * FROM [ODBC;Driver=SQL Server;Server=172.55.0.11;UID=sa;PWD=web361;database=shuju].GUIGE1' ;
ADOQuery1.SQL.Add(sqlstr);
ADOQuery1.Prepared;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
end;

//第2张表数据比对
ADOCommand1.CommandText:='select count(*) from GUIGE1';
ADOCommand2.CommandText:='select count(*) from GUIGE1';
yc:=VarToStr(ADOCommand1.Execute.Fields.Item[0].Value);
bd:=VarToStr(ADOCommand1.Execute.Fields.Item[0].Value);
if yc<>bd then
begin
label2.Caption:='颜色GUIGE1信息更新失败,远程记录数'+yc+',本地记录数'+bd;
showmessage('颜色GUIGE1信息更新失败');


Exit;
end;

//更新完成后
ADOQuery1.Close;
label2.Caption:='商品目录更新成功';
showmessage('商品目录更新成功');
except
label2.Caption:='商品目录更新失败';
showmessage('商品目录更新失败');
end;
screen.Cursor := crDefault ;
end;
[解决办法]
f_dm.ADOConnection1.Execute('DELETE FROM shangpin'); //先注销这句再看看。 with ADOQuery1 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
sqlstr:='';
sqlstr:='INSERT into shangpin SELECT * FROM [ODBC;Driver=SQL Server;Server=172.55.0.11;UID=sa;PWD=web361;database=shuju].shangpin' ;
ADOQuery1.SQL.Add(sqlstr);
ADOQuery1.Prepared;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
end;


[解决办法]
更新一下jet驱动试试,应该是Access驱动的事

读书人网 >.NET

热点推荐