两条语句同事插入数据到两个表中,用了事务为什么不起作用? 200分(200)

  • 主题发起人 主题发起人 jake668
  • 开始时间 开始时间
J

jake668

Unregistered / Unconfirmed
GUEST, unregistred user!
同时两条语句插入数据到两个表中,用了事务,为什么会偶尔出现,前面一条数据保存成功,后面一条数据没有保存,但没有错误信息提示呢.一个月只是偶尔出现一条数据有这样的问题语句如下:SqlText:=' Insert Bas_Employee (EmpCode,Empname,CertCardNo,Sex,DeptCode,JobCode' +' Values (' +QuotedStr(Trim(BEdt_Empcode.Text))+',' +QuotedStr(BEdt_EmpName.Text)+',' +QuotedStr(BEdt_CertCardNO.Text)+',' +QuotedStr(BEdt_Sex.Text)+',' +QuotedStr(BEdt_DeptCode.Text)+',' +QuotedStr(Cmbox_JobCode.Text)+')'; SQLText:=SQLText + 'Insert Bas_EmpPayInfo (EmpCode) Values (' +QuotedStr(Trim(BEdt_Empcode.Text))+')'; AdoQry_Tmp.close; AdoQry_Tmp.SQL.Text:=SQLText; DBconnect.BeginTrans; Try Adoqry_Tmp.ExecSQL; DBConnect.CommitTrans; Except DBConnect.RollbackTrans; DispInfo('数据保存出错,请检查!',1); Abort; End;
 
不要一起提交,分2次
 
smlabc:如果分两次提交,前面语句保存的成功,后面语句没有成功,那不是要手动去删除前面保存的数据.各位高手你们是怎么处理这样的多表数据同时保存.谢谢!
 
启用了事务之后,直到你commit或rollback,多次操作数据库是一样的。
 
fengxiaoxiao启用了事务之后,直到你commit或rollback,多次操作数据库是一样的。多次操作数据库是一样的---没有怎么明白你的意思:
 
SqlText:=' Insert Bas_Employee (EmpCode,Empname,CertCardNo,Sex,DeptCode,JobCode' +' Values (' +QuotedStr(Trim(BEdt_Empcode.Text))+',' +QuotedStr(BEdt_EmpName.Text)+',' +QuotedStr(BEdt_CertCardNO.Text)+',' +QuotedStr(BEdt_Sex.Text)+',' +QuotedStr(BEdt_DeptCode.Text)+',' +QuotedStr(Cmbox_JobCode.Text)+');';这里加一个;号试一下吧 SQLText:=SQLText + 'Insert Bas_EmpPayInfo (EmpCode) Values (' +QuotedStr(Trim(BEdt_Empcode.Text))+')';
 
要是不明白,就直接按我说的做,多做做就明白了
 
fengxiaoxiao启用了事务之后,直到你commit或rollback,多次操作数据库是一样的。多次操作数据库是一样的---没有怎么明白你的意思:fengxiaoxiao 的意思:AdoQry_Tmp.close; AdoQry_Tmp.SQL.Text:=SQLText; DBconnect.BeginTrans; Try Adoqry_Tmp.ExecSQL; // //在这里加其他 类始Adoqry.ExecSQL;的SQL执行语句 // DBConnect.CommitTrans; //该句都是一次提交操作的(SQL执行语句) Except DBConnect.RollbackTrans; DispInfo('数据保存出错,请检查!',1); Abort; End;
 
supermay正解
 
AdoQry_Tmp.SQL.add(sql1);AdoQry_Tmp.SQL.add(sql2);搞定
 
启用了事务之后,直到你commit或rollback,用多个ADOqry和用一个是一样。
 
来自:Notouchsupermay不是少了一个";"的问题,是提交数据时100次中可能有一次后面的那条语句不成功,但又不提示出错。
 
你用了事务控制,后面执行不成功的话,会回滚掉前一条语句的操作地阿,按理不会出现你的这种情况的阿
 
TO:JC不懂问题就是不会回滚掉前一条语句的操作,前一条语句的数据保存成功,后面的语句数据没有保存,造成数据不完整.应该也有不少人遇到这种问题吧.
 
刚刚仔细的看了下你SQL 语句,发现了几个疑点.//1SqlText:=' Insert Bas_Employee (EmpCode,Empname,CertCardNo,Sex,DeptCode,JobCode'这里貌似少了个 ")"是否应:SqlText:=' Insert Bas_Employee (EmpCode,Empname,CertCardNo,Sex,DeptCode,JobCode)'//2 你的第2个Insert的表时候是增加个主键?因为只插入EmpCode字段重复了怎么办?因为我觉得如果你没定义主健得时候这样插入的时候是不会引发错误的
 
定义了主健,但我查看明细表中没有相同的数据,这些都有考虑过的.
 
1>使用的是什么数据库,如果是MYSql,对于数据表类型不是InnoDb的,启动事务也没有用。2>自己测试一下,在BEdt_Empcode编辑框里输入一个不合法的数据,例如包含单引号的一个字符串,使得你拼装出来的SQL不合法,查看Adoqry_Tmp.ExecSQL 是否会有异常提示。
 
后退
顶部