数据库与线程问题

unixzyy 2009-10-27 04:01:04
我首先在主线程中把数据库已经打开。if(Form1->ADOConnection1->Connected!=true) Form1->ADOConnection1->Open();然后在线程中定义TADOQuery *sql1,如下:
class Ttransmit : public TThread
{
private:
HANDLE m_hwnd;
TADOQuery *sql1;
protected:
void __fastcall Execute();
public:
__fastcall Ttransmit(bool CreateSuspended);
void __fastcall Init(int msock,HANDLE hwnd,AnsiString CADD);
};
最后在线程中做sql1->Connection=Form1->ADOConnection1;结果这一步一直执行不结束,请问这是怎么回事,能这样使用吗?是不是非要在每个线程中把数据库单独打开ADOConnection1->Open()

请高手帮忙,在线很急,谢谢!
...全文
97 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
unixzyy 2009-10-28
  • 打赏
  • 举报
回复
高手救命呀。。。。。。。
wg961423 2009-10-28
  • 打赏
  • 举报
回复
TADOQuery *ADOQ=new TADOQuery(NULL);
ADOQ->Connection=Form1->ADOConnection1;
unixzyy 2009-10-28
  • 打赏
  • 举报
回复
我改用本地的ACCESS数据库做查询也很快。不论用不用线程,真是奇怪了。
unixzyy 2009-10-28
  • 打赏
  • 举报
回复
目前问题是这样的:我用ODBC与远程SYBASE数据库连接的。如果不用线程,一个单独的程序执行查询是非常快的。用了线程后,这个sql查询要几分钟才返回结果,这是怎么回事?
unixzyy 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 eaglefew 的回复:]
在进入线程函数之前, 先设置好sqll 的连接, 然后在Open
[/Quote]
进入线程之前?不会吧,我这是一个守护进程,如果在进入线程之前做,那多个客户端同时请求进来时,sql1不是会改变吗。
EagleFew 2009-10-28
  • 打赏
  • 举报
回复
在进入线程函数之前, 先设置好sqll 的连接, 然后在Open
unixzyy 2009-10-28
  • 打赏
  • 举报
回复
问题解决:我在这主程序加个启动服务的按钮,在这个Action加上了一个查询数据库功能,即Form1->sql1->open();Form1->sql1_close()这样线程中的查询就能正常了。
我只是奇怪为何用ACCESS数据库时不需要这样做,Sybase必须这样先在主程序中打开一下才行。给分
周药师 2009-10-27
  • 打赏
  • 举报
回复

TADOQuery *sql1= new TADOQuery(this);
sql1->Connection=Form1->ADOConnection1 ;
unixzyy 2009-10-27
  • 打赏
  • 举报
回复
还是不行呀,在执行sql1->open()时进程死了。怎么回事?
unixzyy 2009-10-27
  • 打赏
  • 举报
回复
晕死了,好久没搞编程了。
TADOQuery *sql1=NULL;
sql1 = new TADOQuery(NULL);
这样定义就可以了,我直接在.h中定义了。
周药师 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 unixzyy 的回复:]
最后在线程中做sql1->Connection=Form1->ADOConnection1;结果这一步一直执行不结束,请问这是怎么
应该是:
[/Quote]

sql1->ConnectionString = Form1->ADOConnection1->ConnectionString ;

1,178

社区成员

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

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