请教VCL,多线程和数据库查询(100分)

  • 主题发起人 williame
  • 开始时间
W

williame

Unregistered / Unconfirmed
GUEST, unregistred user!
请教高手:
为什么说VCL在多线程中编写是不安全的,我制作了一个实验程序,希望在线程中完成对数据库的
查询,用的是TADOQUERY,在线程中我创建一个ADOQUERY实例.但是执行查询时总是出错误,提示
adoquery没有初始化.
当我使用同步以后,问题就没有了.
这是为什么????
 
在线程里访问vcl要加同步,我刚解决一个这样的问题,最好是加,不然,呵呵,有你受的。
 
要是在线程里创建,应该不用同步吧。我个人感觉应该是这样的。呵呵
你这样试试,看他还出不出错!
CoInitialize(nil);
sendAdo := TADOQuery.Create(nil);
sendAdo.ConnectionString := '......';
.........................
........................
sendAdo.Free;
CoUnInitialize;
我就是这样在线程中调用 AdoQuery的,也没用同步呀。呵呵
 
wzca :
我在DELPHI中使用CoInitialize(nil);
报错,能不能详细说说怎么用?
 
加上use activex;
 
// 我写的DLL。测试DLL里用ADO。呵呵
ibrary wzc;
uses
SysUtils,
Classes,
DB,
ADODB,
Windows,
ActiveX;
{$R *.res}
Function Func1:Integer;stdcall;
var
Ado: TADOQuery;
begin
MessageBOX(0,'begin
DLL','title',MB_OK);
CoInitialize(nil);
Ado := TADOQuery.Create(nil);
Ado.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=nt_sys;Data Source=gtsp100';
MessageBOX(0,'Connectionstring ok','title',MB_OK);
Ado.Close;
Ado.SQL.Text := 'Select * From Temp1';
Ado_Open;
Ado.Close;
Ado.Free;
MessageBOX(0,'Over DLL','title',MB_OK);
Result := 0;
CoUnInitialize;
end;
Exports Func1;
begin
end.
 
多线程查询速度很慢的,
 
在多线程里访问VCL?从来不用,好慢的,还容易被强奸。
 
多线程里用私有的 VCL,尽可能少去访问公有的VCL,就好了。
私有的还要被强奸的话,就要去告 Borland 了。呵呵
 
接受答案了.
 
顶部