全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1108
推到 Plurk!
推到 Facebook!

关于dbexpress放入dll中使用后出现的异常

缺席
tcftt
一般會員


發表:1
回覆:0
積分:0
註冊:2006-09-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-24 14:00:40 IP:61.174.xxx.xxx 未訂閱
程序由MainForm和formDLL组成:(formDLL是一个DLL文件)
功能:MainForm调用formDLL,对数据表testtable进行操作.

MainForm包含一个sqlcnt组件(TSqlConnection)(连接至SQL2K 数据库)

formDLL包含,conn组件(TSqlConnection),dsp组件(TDataSetProvide),cds组件(TClientDataSet),sqy组

件(TSqlQuery),
ds组件(TDataSource),dg组件(TDataGrid);
sqy.sql为select col1,col2,col3 from testtable
conn直接引用MainForm中的Sqlcnt.
sql.connection:=conn;
这些组件互相连接,

MainForm调用formDll正常.

对formDll进行操作:
cds.Active:= true时,
dg中可以正常显示数据.

保存数据至数据表时(cds.ApplyUpdate(0)),分两种情况:
情况A:当插入的数据,在数据表中不存在,因此可以正常操作,数据可以正常保存至数据表中.
情况B:当插入的数据,已存在于数据表中,此时,利用cds的OnReconcileError事件,可以捕捉到错误代码ErrorCode为1(即此数据已存在数据表中).捕捉到错误后,什么都不做,只显示我自定义的警告信息"此数据已存在".

退出formDll正常(至少表面没有弹出什么异常信息).
formDll.Free;
formDll:=nil;

操作就如上所述这么简单.

问题出在:当退出应用程序时,情况A,程序可以正常退出.
但是,一旦在操作formDll时出现过情况B,那么退出应用程序时,就一定会提示异常,
异常信息为: "0x004b3bd2"指令引的"0x00d5c5f0"内存,该内存不能为"read"
点击确定后,又弹出对话框:Runtime error 216 at 004b3bd2.

应用程序环境为xp(sp2),bds2006(update 2),delphi.

由于对DLL是初级接触,不知道什么地方会有问题.希望大家能参详参详.
在此先谢谢大家了!(由于源代码在家里的电脑上,这里暂时没有,如有需要,我再贴上来)
系統時間:2024-11-23 2:04:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!