问个问题 + 放点分

rainfall19831109 2006-09-26 05:41:58
我用BCB建立了一个控制台程序,继而把它写成了系统服务的程序,一切都是正常的
接着我的程序需要连接SQL Server,所以我就new了一个DataModule,里面放了TADOConnection和TDataSet
,然后给连接对象赋了连接字符串后,打开,再启动服务的时候,就报错了,报的是那种“发送错误到Microsoft”的错误,而同样的做法我放到一个测试程序里是正常的

经过一步步测试,发现就是一用DataModule或者数据库对象的话,都会有这个错,换了如果是TButton的话是没有这个问题

是还有什么其他原因吗?或者根本就是服务程序不让用数据库?
...全文
188 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainfall19831109 2006-09-27
  • 打赏
  • 举报
回复
问题解决。。。原来是我自己疏忽。。。
另外要提出一个
现在我写的这个是个服务,COM的初始化必须放在服务主函数里执行
如果放到了main函数里的话,就不起效了。。。
结帖。。。谢谢各位....
junqiang521 2006-09-27
  • 打赏
  • 举报
回复
学习
i_love_pc 2006-09-27
  • 打赏
  • 举报
回复
CoInitialize(NULL);
……
UnCoInitialize(NULL);

是不是成对使用的?
BlueDeepOcean 2006-09-27
  • 打赏
  • 举报
回复
应该是操作系统自身的问题,我也曾经遇到过类似的情况。但并不是每次都发生。
TR@SOE 2006-09-27
  • 打赏
  • 举报
回复
是不是因为你的服务程序中启动与SQL SERVER的连接时间过长?Windows对一个服务从启动到完成的时间是有限制的。
tanlim 2006-09-26
  • 打赏
  • 举报
回复
你的控制台程序在创建的时候,是否选择了支持VCL的选项?
rainfall19831109 2006-09-26
  • 打赏
  • 举报
回复
说明一下
CoInitialize和OleInitialize都写上了,还是这个原因。。。

另外,想问问,即使用try来写,但如果发生了exception,就算让我捕捉到也没用啊
因为我只是想创建,如果抛出了exception,就是没创建成功啊,那还有什么办法呢??
konj 2006-09-26
  • 打赏
  • 举报
回复
恩,学他人之长
YJS050320001 2006-09-26
  • 打赏
  • 举报
回复
学习
CACACACACA 2006-09-26
  • 打赏
  • 举报
回复
十有八九是没有 CoInitialize(NULL); 初始化的原因.
柯本 2006-09-26
  • 打赏
  • 举报
回复
做了个console测试,没问题,注意:
1.必须调用: CoInitialize(NULL);
2.如果console程序出错,不能被系统显示,所以最好用try...catch...
//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#include <db.hpp>
#include <adodb.hpp>
#pragma hdrstop
#pragma link "adortl.lib"

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
CoInitialize(NULL);
TADOConnection *p;
TADOQuery *q;
try
{
p=new TADOConnection(NULL);
p->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Password=\"\";Data Source=d:\\temp\\db2.mdb;Persist Security Info=True";
q=new TADOQuery(NULL);
}
catch(...)
{
printf("error to create componoment\n");
return -1;
}
q->Connection=p;
q->SQL->Text="select * from test1";
try
{
q->Open();
}
catch(...)
{
printf("Open error!");
return -1;
}
while (! q->Eof)
{
printf("%s\n",q->FieldByName("name")->AsString.c_str());
q->Next();

}
getchar();
return 0;
}
//---------------------------------------------------------------------------
windindance 2006-09-26
  • 打赏
  • 举报
回复
请检查:
你Create对象的时候,父对象是什么?
连接的时候,有没有try?
wood542344 2006-09-26
  • 打赏
  • 举报
回复
没有碰到过,来接个分,^_^

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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