大侠们,看看这样的数据库语句有什么问题(100分)

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

xlgtyx

Unregistered / Unconfirmed
GUEST, unregistred user!
我在往数据库写数据时用到事务处理但出现锁定状态
dm_ljsjk.DB_YYGL.StartTransaction;
QRY_TJ.Close;
QRY_TJ.SQL.Clear;
QRY_TJ.SQL.Add('UPDATE YK_DJMX SET YK_DJMX_SHBZ=:A1,YK_DJMX_SHR=:A2,YK_DJMX_SHRQ=:A3 WHERE YK_DJ_DM=:A4 AND YK_DJMX_LS=:A5');
QRY_TJ.Params[0].ASSTRING:='1';
QRY_TJ.Params[1].AsString:=BV_DQCZRYBM;
QRY_TJ.Params[2].AsString:=FORMATDATETIME('YYYY-MM-DD HH-MM-SS',GetServerDatetime);
QRY_TJ.Params[3].AsString:=QRY_DJ.FIELDBYNAME('YK_DJ_DM').AsString;
QRY_TJ.Params[4].asinteger:=QRY_DJMX.FIELDBYNAME('YK_DJMX_LS').AsInteger;
QRY_TJ.ExecSQL;
//先修改一个表中的数据
QRY_TJ.Close;
QRY_TJ.SQL.Clear;
QRY_TJ.SQL.Add('INSERT into Yj_DJMX (YJ_DJ_DM,YJ_DJMX_SHBZ,YJ_DJMX_GYSBM,YJ_DJMX_YPPC,B_YP_LS,B_YPXX_YPDM,');
QRY_TJ.SQL.ADD('YJ_DJMX_YPLB,YJ_DJMX_RKDW,YJ_DJMX_PFDJ,YJ_DJMX_PFSL,YJ_DJMX_PFJE,YJ_DJMX_LSDW,YJ_DJMX_LSDJ,');
QRY_TJ.SQL.ADD('YJ_DJMX_HSL,YJ_DJMX_LSSL,YJ_DJMX_LSJE,YJ_DJMX_KBM,YJ_DJMX_ZBBM,YJ_DJMX_JY,YJ_DJMX_JZBZ,YJ_DJMX_SHR,YJ_DJMX_SHRQ)');
QRY_TJ.SQL.ADD('SELECT '''+V_YJDJ_MAXDJH+''' AS YK_DJ_DM,YK_DJMX_SHBZ,YK_DJMX_GYSBM,YK_DJMX_YPPC,B_YP_LS,B_YPXX_YPDM,');
QRY_TJ.SQL.ADD('YK_DJMX_YPLB,YK_DJMX_RKDW,YK_DJMX_PFDJ,YK_DJMX_PFSL,YK_DJMX_PFJE,YK_DJMX_LSDW,YK_DJMX_LSDJ,');
QRY_TJ.SQL.ADD('YK_DJMX_HSL,YK_DJMX_LSSL,YK_DJMX_LSJE,YK_DJMX_MDKBM,YK_DJMX_MDZBBM,''µ÷²¦Èë¿â'',''0'','''+BV_DQCZRYBM+''' AS YK_DJMX_SHR,');
QRY_TJ.SQL.ADD(''''+FORMATDATETIME('YYYY-MM-DD HH-MM-SS',GetServerDatetime)+''' FROM YK_DJMX');
QRY_TJ.SQL.ADD(' WHERE YK_DJ_DM=:A1 AND YK_DJMX_LS=:A2');
QRY_TJ.Params[0].AsString:=QRY_DJ.FIELDBYNAME('YK_DJ_DM').AsString;
QRY_TJ.Params[1].asinteger:=QRY_DJMX.FIELDBYNAME('YK_DJMX_LS').AsInteger;
QRY_TJ.ExecSQL;
dm_ljsjk.DB_YYGL.Commit;
//依据这个表中的数据在修改另一个表中的数据时出现死锁,但是在另一段程序时用到了这一段代码,可以通过,为什么在这里会死锁,对这样的问题该怎么使用事务
 
可能是你的ADO没释放
 
连接之前先关闭连接再连接
 
后退
顶部