多现成操作ADO的时候出错,解决办法。

chengran1984 2009-08-28 09:52:23
当启动一个线程对数据库进行操作的过程中,我又启动了另外一个线程操作数据库,然后马上就会报错(如果第一个线程执行完了,就不会报错),

查了下资料,据说要动态创建ADOQuery 和ADOConnection

然后我就在线程的回调函数里面写了下面的
var
ADOQServerlist: TADOQuery;
ADOCServerlist: TADOConnection;
begin
ADOQServerlist:=TADOQuery.Create(Nil);
ADOCServerlist:=TADOConnection.Create(Nil);
ADOQServerlist.Connection:=ADOCServerlist;


但是当启动这个线程的时候报错如下

---------------------------
Application Error
---------------------------
Exception EAccessViolation in module Manage.exe at 000ABABB.

Access violation at address 004ABABB in module 'Manage.exe'. Read of address 00000220.


---------------------------
确定
---------------------------


==================================还有下面的错===============================
---------------------------
Debugger Exception Notification
---------------------------
Project Manage.exe raised exception class EOSError with message 'System Error. Code: 5.
拒绝访问。'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

怎么回事?

...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
newfang 2009-08-29
  • 打赏
  • 举报
回复
如果select时就慢,建多少线程也没用,可以考虑使用分页查询。
starluck 2009-08-29
  • 打赏
  • 举报
回复

在建立ADO系统控件的前加个: CoInitialize
chengran1984 2009-08-28
  • 打赏
  • 举报
回复
因为数据比较多,在装入viewlist的时候,如果不使用多线程,会造成程序假死.
newfang 2009-08-28
  • 打赏
  • 举报
回复
单看这点儿代码看不出来什么,不过根据提示:Access violation at address 004ABABB in module 'Manage.exe'. Read of address 00000220,貌似控件没有创建出来的时候,别的线程已经开始访问它了……
多线程访问数据同步问题考虑好就可以了,个人觉得adoconnection没有必要动态创建……

不过多线程数据库不太好控制,不知道楼主为什么要搞多线程……

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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