午夜求助(关于Dll中放置ADOQuery控件导致程序崩溃的问题)

merrymin 2010-06-22 12:40:08
问题描述:

我的程序大致分为两块,一块是应用程序,一块是为之服务的Dll。
其中,Dll主要进行数据库的操作(为了将界面显示和数据逻辑操作分开),因此,Dll中引用了存在于应用程序中的一个DataModule(亦即一个DataModule,被应用程序和Dll共用,Add进去的),而DataModule中放置了ADOConnection控件、ADOQuery控件和DataSetProvider控件。
为了便于操作数据库,我在Dll中分别写了一个执行'Select'与另一个执行其它'update'、‘delete’...的函数与过程,。这样之后,那个执行'Select'的函数就开始捣乱了。我在应用程序中无论是静态调用它,还是动态调用它,程序在执行几轮之后(执行相同的操作几次,比如说按钮事件我多点击几次),就崩溃了,报出的错误是大家经常看到的内存错误。。。
以下附代码:


{以下是执行select语句的操作,问题就出现在它身上}
class function TDataBaseOper.ExeSel(asql: WideString): OleVariant; //此处返回值如果为TDataSet的话会有更
//奇怪的问题,因此在此处返回OleVariant,然后在应用程序中去转换为TDataSet
begin
try
With DataModule1.ADOQry do
begin
try
Close;
SQL.Clear;
SQL.Add(asql);
Open;
Result := DataModule1.DSPrd.Data;
Close;
except
on e: Exception do
begin
Application.MessageBox(PChar(‘数据库操作失败’+ #13#10 + e.Message), '错误’, MB_OK + MB_ICONWARNING + MB_TOPMOST);
Exit;
end;
end;
end;
finally
//
end;
end;



问题补充:在获取小量数据时,程序调用上面的方法能执行的次数比较大,最多我测试到了60次。而如果一次select操作获取的数据量过大时,那么应用程序调用这个位于Dll中的方法能执行的次数锐减至2次。(次数是说明程序在出现内存错误之前能“正常”执行的次数)

这两天被这个问题快给逼疯了,本以为自己查阅资料就能解决的,结果没有任何进展,只能向大神们请教了 !
...全文
98 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
天火 2010-06-22
  • 打赏
  • 举报
回复
学习学习。
merrymin 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mysterx 的回复:]
DLL中我一般用原生ADO自己创建,自己控制,所以没有遇到过楼主的问题。
[/Quote]

O(∩_∩)O~,用DataModule集中进行管理,个人觉得这样更方便!
merrymin 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]
你用到了WideString
[/Quote]

是啊,没想到最后还是栽它手上了,我已经尽量避免了,没想到一时糊涂犯错了!

[Quote=引用 6 楼 wliaoc 的回复:]
解决了?准备JF了,呵呵
[/Quote]

JF!!!
java程序员zbin 2010-06-22
  • 打赏
  • 举报
回复
wo lai jf
wliaoc 2010-06-22
  • 打赏
  • 举报
回复
解决了?准备JF了,呵呵
Harryfin 2010-06-22
  • 打赏
  • 举报
回复
用PCHAR的话就要注意字符串的内存到底是谁控制,有时其实更容易出错。如果不是和其它语言通讯,我一般都用内存共享。
  • 打赏
  • 举报
回复
DLL中我一般用原生ADO自己创建,自己控制,所以没有遇到过楼主的问题。
bdmh 2010-06-22
  • 打赏
  • 举报
回复
你用到了WideString
merrymin 2010-06-22
  • 打赏
  • 举报
回复
CTMD,洗洗后来了灵感,应用程序和Dll都Uses了Sharemem单元,问题迎刃而解!
当初就是为了避免在Dll中使用string类型的参数,因而所有的string我都利用PChar来代替,没想到这万恶的Delphi还是把问题丢给了我!

大家说说自己类似的经历吧,准备接分!
merrymin 2010-06-22
  • 打赏
  • 举报
回复
自己顶一次
洗洗睡了!

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧