有关线程的一个小问题,大家帮帮忙啊!!!

li_yan_woods 2004-01-07 04:37:07
我在form1(unit1)中有一个按钮onclick事件:
procedure TForm1.Button1Click(Sender: TObject);
var
newThread:testThread;
begin
newThread:=testThread.Create(false);
end;
新建了一个线程testThread文件(unit2):
procedure testThread.Execute;
var
mmadoquery:Tadoquery;
begin
mmadoquery:=Tadoquery.Create(application.Owner); mmadoquery.ConnectionString:='Provider=SQLOLEDB.1;Password=liyan;Persist Security Info=True;User ID=sa;Initial Catalog=photo2003;Data Source=LI_YAN_WOODS';
showmessage('OK');
end;
在mmadoquery.ConnectionString:=就出错了,showmessage('OK')就跳过了
报错:尚未调用coInitialize
帮帮忙啊!!只是在线程中动态创建了一个mmadoquery啊,这是不是因为线程的问题啊


...全文
128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
helodd 2004-01-08
  • 打赏
  • 举报
回复
学习.
  • 打赏
  • 举报
回复
详见delphibbs.com帖子号码1146017
  • 打赏
  • 举报
回复
constructor TUploadDataThread.Create( h : HWND; CurrSignNo : Integer; Suspend : Boolean; FOT : Boolean );
var
UniqueNumber: Integer;
begin
LogDebugMsg( LogFileName, 'UploadDataThread Begin' );
FHandle := h;
FCurrSignNo := CurrSignNo;
CoInitialize( nil ); // 这个在线程中是必需的
try
UniqueNumber := GetUniqueNumber; // 这个可以在 delphi 的 demo 中找到
FCS := TADOConnection.Create( nil );
FCL := TADOConnection.Create( nil );
FCImg := TADOConnection.Create( nil );
FQS := TADOQuery.Create( nil );
FQL := TADOQuery.Create( nil );
FQU := TADOQuery.Create( nil );
FQImg := TADOQuery.Create( nil );
FCS.Name := 'dbS' + IntToStr( UniqueNumber );
FCL.Name := 'dbL' + IntToStr( UniqueNumber );
FCImg.Name := 'dbImg' + IntToStr( UniqueNumber );
FQS.Connection := FCS;
FQL.Connection := FCL;
FQU.Connection := FCL;
FQImg.Connection := FCImg;
with FCS do
begin
Provider := 'Provider=SQLOLEDB.1';
LoginPrompt := False;
KeepConnection := True;
ConnectionString := BaseConnectionString + 'Initial Catalog=' + TollDatabaseName + ';Data Source=' + ServerName + ';Password="' + ServerDBPassword + '"';
end;
with FCL do
begin
Provider := 'Provider=SQLOLEDB.1';
LoginPrompt := False;
KeepConnection := True;
ConnectionString := BaseConnectionString + 'Initial Catalog=' + LocalDatabaseName + ';Data Source=' + LocalName + ';Password="' + LocalDBPassword + '"';
end;
with FCImg do
begin
Provider := 'Provider=SQLOLEDB.1';
LoginPrompt := False;
KeepConnection := True;
ConnectionString := BaseConnectionString + 'Initial Catalog=' + ImageDatabaseName + ';Data Source=' + ServerName + ';Password="' + ServerDBPassword + '"';
end;

FreeOnTerminate := FOT;
inherited Create( Suspend );
except
on E: Exception do
begin
LogDebugMsg( LogFileName, '创建UploadData线程时出错.' + eBaseMsg + E.Message );
end;
end;
end;

destructor TUploadDataThread.Destroy;
begin
FQS.Free;
FQL.Free;
FQU.Free;
FQImg.Free;
FCS.Free;
FCL.Free;
FCImg.Free;
CoUnInitialize;//注意这个
LogDebugMsg( LogFileName, 'UploadDataThread End' );
inherited Destroy;
end;
li_yan_woods 2004-01-07
  • 打赏
  • 举报
回复
其实这个问题说白了也很简单呐,其实就是怎么在线程中
procedure testThread.Execute;
begin
end; 中使用adoquery来进行一般的查询和执行语句,help ME!!!
li_yan_woods 2004-01-07
  • 打赏
  • 举报
回复
帮帮忙啊,各位大哥们!!!分还可以再加,没问题的
自已up一下了!可怜中..........

2,508

社区成员

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

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