为什么QUERY+UPDATESQL更新时程序会自动关闭(紧急救命,全部家产奉献)(300分)

  • 主题发起人 主题发起人 小小东
  • 开始时间 开始时间

小小东

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么QUERY+UPDATESQL更新时程序会自动关闭
开发环境为WINDWOS2000+DELPHI6
后台数据库为SQL SERVER2000企业版
程序如下:
现在有A.B两个表,如A为进货明细表,B为物资信息表
A的字段为 IN_ID 进货单ID B的字段为 WZ_NO 物资编号
WZ_NO 物资编号 WZ_NAME 物资名称
IN_PRICE 进货单价 WZ_TYPE 规格型号
IN_QTY 进货数量 WZ_TH 技术参数
... ...... ..... ......
QUERY的SQL语句如下:
SELECT A.IN_ID,A.WZ_NO,A.IN_PRICE,A.IN_QTY,B.WZ_NAME,B.WZ_TYPE,B.WZ_TH
FROM A LEFT OUTER JOIN B ON A.WZ_NO = B.WZ_NO
WHERE WZSQ.IN_ID=:TSQ_ID
程序运行时把参数TSQ_ID的值赋为进货主表的ID,与主表关联
QUERY的cachedupdate属性为TRUE
UPDATEOBJECT的属性为UPDATESQL1;
UPDATESQL1的DELETESQL语句如下:
delete from A where IN_ID = :OLD_IN_ID and WZ_NO = :OLD_WZ_NO
INSERTSQL语句如下:
insert into A (IN_ID, WZ_NO, IN_Price, IN_QTY)
values (:IN_ID, :WZ_NO, :IN_Price, :IN_QTY)
UPDATESQL语句如下:
update A set IN_ID = :IN_ID, WZ_NO = :WZ_NO, IN_Price = :IN_Price,
IN_Qty = :IN_Qty where IN_ID = :OLD_IN_ID and WZ_NO = :OLD_WZ_NO
bitbtn1的事件如下:
代码:
 begin
    with query do
      begin
       append;
       fieldbyname('in_id').value:=a;
       fieldbyname('wz_no').value:=b;
       fieldbyname('wz_name').value:=c;
       fieldbyname('wz_type').value:=d;
       fieldbyname('wz_th').value:=e;
       fieldbyname('in_price').value:=f;
      end;
   end;
其中A、B、C、D、E、F由其他数据集传入;
该BUTTON的功能是在B表增加一条新记录
BITBTN2的事件如下:
Database1.StartTransaction;
try
query.ApplyUpdates;
Database1.Commit;
query.CommitUpdates;
except
on E:EDBEngineError do
begin
其他一些捕捉错误语句
Database1.Rollback;
raise;
end;
该BUTTON的功能是把缓存数据更新到后台
当插入一条记录,按保存按扭,数据正常
保存后再增加新记录,按保存按扭,数据能更新到后台,但程序自动关闭
在ONUPDATERRROR事件捕捉不到错误,如果在DELPHI下运行提示访问地址无效
望各位大虾指教

 
可能与数据库的操作无关,你看看有没有其他的操作的影响。用f8单步执行看看在那里出问题。
 
我已经跟踪过不下10次了,没发现问题所在
 
试试下面的语句呢?
Database1.ApplyUpdates([query]);
 
huawdg 的办法早已用过,不行,难道真是DELPHI的BUG吗
 
看你的代码,只与 UpdateSql 的 InsertSQL 语句相关。
但你 Append 时,未提供 :IN_QTY 值是否有关呢?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
605
import
I
后退
顶部