请帮忙看看,下面的代码,为什么在某些机器的系统下会出错?(57)

  • 主题发起人 ynduanlian
  • 开始时间
Y

ynduanlian

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库是ACCESS的数据库,用一个ADOQuery执行两条更新语句: ADOQry2.Connection.BeginTrans;ADOQry2.SQL.Clear;if EdtOdograph.Text<>'' Then StrSql:='Update Rent set EndTime='''+ DateTimeToStr(Dt2)+''',Odograph2='+EdtOdograph.Text+' where RentID='+StrRentIDelse StrSql:='Update Rent set EndTime='''+ DateTimeToStr(Dt2)+''' where RentID='+StrRentID; ADOQry2.SQL.Add(StrSql); ADOQry2.ExecSQL; ADOQry2.SQL.Clear; if (iOdograph2>iOdograph1) then StrSql:='Update Car set State=''A'',Odograph='+EdtOdograph.Text+' where CarID='''+StrCarID+'''' else StrSql:='Update Car set State=''A'' where CarID='''+StrCarID+''''; ADOQry2.SQL.Add(StrSql); ADOQry2.ExecSQL; ADOQry2.Connection.CommitTrans;上述代码在我的测试系统下没有出现过错误,但是有一个用户的机器上确实出现了异常,并且根据他传达回的Access数据库发现,第一次ADOQry2.ExecSQL成功了,第二次却没有成功(第一句SQL的数据是修改了,但第二次没有修改),也就是说发生异常后“事务”更本没有起作用。 请高手指教: 1、是否ACCESS数据库不支持事务,为什么在程序异常后,事务的一部分成功了,另一部分却没有执行? 2、为什么在某些系统下会出现异常?代码有什么问题吗?在第二次执行ADOQry2.SQL.Clear前是否有必要增加一句:ADOQry2.Close()?
 
1、ACCESS数据库支持事务2、有必要增加一句:ADOQry2.Close;
 
肯定支持事务,但你没用正确。ADOQry2.Connection.BeginTrans;try ADOQry2.SQL.Clear; if EdtOdograph.Text <> '' then StrSql := 'Update Rent set EndTime=''' + DateTimeToStr(Dt2) + ''',Odograph2=' + EdtOdograph.Text + ' where RentID=' + StrRentID else StrSql := 'Update Rent set EndTime=''' + DateTimeToStr(Dt2) + ''' where RentID=' + StrRentID; ADOQry2.SQL.Add(StrSql); ADOQry2.ExecSQL; ADOQry2.SQL.Clear; if (iOdograph2 > iOdograph1) then StrSql := 'Update Car set State=''A'',Odograph=' + EdtOdograph.Text + ' where CarID=''' + StrCarID + '''' else StrSql := 'Update Car set State=''A'' where CarID=''' + StrCarID + ''''; ADOQry2.SQL.Add(StrSql); ADOQry2.ExecSQL; ADOQry2.Connection.CommitTrans;except ADOQry2.Connection.RollbackTrans;end;----------------这个语句比较简单,应该不会发生异常,可能是数据问题了。
 
多人接受答案了。
 
顶部