delphi +sql事务问题。 20
在本机运行delphi客户端软件时访问本机的sql数据库时,没出现任何状况,但是通过本机的delphi客户端软件访问远程服务器时,语句结束后,会出现出库表里有数据,但库存...
在本机运行delphi客户端软件时访问本机的sql数据库时,没出现任何状况,但是通过本机的delphi客户端软件访问远程服务器时,语句结束后,会出现出库表里有数据,但库存表里没有数据的情况,请问是什么原因啊,急,拜托了
try
DataM_Pub.ADOconn_flck.BeginTrans;
for i:=0 to 5 do
begin
fldm:=TEdit(FindComponent('Edit_fldm'+inttostr(i))).Text;
flmc:=TComboBox(FindComponent('Comb_flmc'+inttostr(i))).Text;
flgg:=TComboBox(FindComponent('Comb_flgg'+inttostr(i))).Text;
jldw:=TComboBox(FindComponent('Edit_jldw'+inttostr(i))).Text;
cksl:=TEdit(FindComponent('txtcksl'+inttostr(i))).Text;
ckdj:=TEdit(FindComponent('txtckdj'+inttostr(i))).Text;
ckje:=TEdit(FindComponent('txtckje'+inttostr(i))).Text;
yykc:=TEdit(FindComponent('txtyykc'+inttostr(i))).Text;
yjkc:=TEdit(FindComponent('txtyjkc'+inttostr(i))).Text;
kcje:=Format('%.4f',[(strtofloat(ckdj))*(strtofloat(yjkc))]);
if (StrToFloat(ckdj)<=0) or (StrToFloat(ckje)<=0) or (fldm='')then
begin
Continue;
end
else
begin
with ADOQ_pmb do
begin
Close;
Sql.clear;
SQL.Add(select 语句);
Open;
end;
flid:=ADOQ_pmb.FieldByName('flid').AsString;
with ADOQ_khxx do
begin
Close;
Sql.clear;
SQL.Add(select 语句);
Open;
end;
khid:=ADOQ_khxx.FieldByName('khid').AsString;
with ADOQ_ckb do
begin
Close;
SQL.Clear;
SQL.Add(insert into 出库表 语句);
ExecSQL;
end;
with ADOQ_kcb do
begin
Close;
SQL.Clear;
SQL.Add(Update 库存表 语句);
ExecSQL;
end;
with ADOQ_fldjb do
begin
Close;
Sql.clear;
SQL.Add(select 语句);
Open;
end;
if (ADOQ_fldjb.RecordCount=0) then
begin
with ADOQ_fldjb do
begin
Close;
SQL.Clear;
SQL.Add(insert into fldjb 语句);
ExecSQL;
end;
end
else
begin
with ADOQ_fldjb do
begin
Close;
SQL.Clear;
SQL.Add(Update 语句);
ExecSQL;
end;
end;
end;
end;
DataM_Pub.ADOconn_flck.CommitTrans;
except
on E: Exception do
begin
//回滚
DataM_Pub.ADOconn_flck.RollbackTrans;
Application.MessageBox(PChar('系统出错:' + #13 + '错误为:'
+ E.Message + ' 数据已回滚 !'), '提示', MB_OK);
Exit;
end; // with on E: Exception do
end; 展开
try
DataM_Pub.ADOconn_flck.BeginTrans;
for i:=0 to 5 do
begin
fldm:=TEdit(FindComponent('Edit_fldm'+inttostr(i))).Text;
flmc:=TComboBox(FindComponent('Comb_flmc'+inttostr(i))).Text;
flgg:=TComboBox(FindComponent('Comb_flgg'+inttostr(i))).Text;
jldw:=TComboBox(FindComponent('Edit_jldw'+inttostr(i))).Text;
cksl:=TEdit(FindComponent('txtcksl'+inttostr(i))).Text;
ckdj:=TEdit(FindComponent('txtckdj'+inttostr(i))).Text;
ckje:=TEdit(FindComponent('txtckje'+inttostr(i))).Text;
yykc:=TEdit(FindComponent('txtyykc'+inttostr(i))).Text;
yjkc:=TEdit(FindComponent('txtyjkc'+inttostr(i))).Text;
kcje:=Format('%.4f',[(strtofloat(ckdj))*(strtofloat(yjkc))]);
if (StrToFloat(ckdj)<=0) or (StrToFloat(ckje)<=0) or (fldm='')then
begin
Continue;
end
else
begin
with ADOQ_pmb do
begin
Close;
Sql.clear;
SQL.Add(select 语句);
Open;
end;
flid:=ADOQ_pmb.FieldByName('flid').AsString;
with ADOQ_khxx do
begin
Close;
Sql.clear;
SQL.Add(select 语句);
Open;
end;
khid:=ADOQ_khxx.FieldByName('khid').AsString;
with ADOQ_ckb do
begin
Close;
SQL.Clear;
SQL.Add(insert into 出库表 语句);
ExecSQL;
end;
with ADOQ_kcb do
begin
Close;
SQL.Clear;
SQL.Add(Update 库存表 语句);
ExecSQL;
end;
with ADOQ_fldjb do
begin
Close;
Sql.clear;
SQL.Add(select 语句);
Open;
end;
if (ADOQ_fldjb.RecordCount=0) then
begin
with ADOQ_fldjb do
begin
Close;
SQL.Clear;
SQL.Add(insert into fldjb 语句);
ExecSQL;
end;
end
else
begin
with ADOQ_fldjb do
begin
Close;
SQL.Clear;
SQL.Add(Update 语句);
ExecSQL;
end;
end;
end;
end;
DataM_Pub.ADOconn_flck.CommitTrans;
except
on E: Exception do
begin
//回滚
DataM_Pub.ADOconn_flck.RollbackTrans;
Application.MessageBox(PChar('系统出错:' + #13 + '错误为:'
+ E.Message + ' 数据已回滚 !'), '提示', MB_OK);
Exit;
end; // with on E: Exception do
end; 展开
3个回答
展开全部
我们有一套很复杂的系统。也没有出现过你这样的问题。
你不要考虑什么事务。如果是复杂的数据UPDATA你需要考虑其他方式实现。不能在客户端计算好了再更新。
你不要考虑什么事务。如果是复杂的数据UPDATA你需要考虑其他方式实现。不能在客户端计算好了再更新。
追问
循环会和回滚内的update、insert语句冲突吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SQL.Add(Update 库存表 语句);
ExecSQL;
别用update了,直接select,然后edit,赋值,最后post
ExecSQL;
别用update了,直接select,然后edit,赋值,最后post
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
my god 我都看不懂唉,天文啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询