网上看了个ADO线程的帖子
然后把他加入到MDI窗口中来用
子窗口查询后,关闭时跳出这个错误:
system Error code:1400 无效的窗口句柄
control '' has no parent window
如果再建立新窗口会跳出
A component named form1 already exists
然后无法建立整个MDI关掉后,报这样的错误
exception einvalidpointer in module project1.exe at 00003d39 invalid pointer operation单元代码是unit Mdatabas;interfaceuses
Classes, ADODB,activex;
type
TDatabaseThread = class(TThread)
private
FADODataSet:TADODataSet;
FADOQuery:TADOQuery;
FADOCommand:TADOCommand;
SQLString:string;
protected procedure Execute; override;
public
constructor Create(ADO:TADODataSet;S:String); overload;
constructor Create(ADO:TADOQuery;S:String); overload;
constructor Create(ADO:TADOCommand;S:String); overload;
destructor destroy;
end;implementationuses Unit1;
{ TDatabaseThread }
constructor TDatabaseThread.Create(ADO:TADODataSet;S:String);
begin
FADODataSet:=ADO;
SQLString:=S;
inherited Create(False);
end;constructor TDatabaseThread.Create(ADO:TADOQuery;S:String);
begin
FADOQuery:=ADO;
SQLString:=S;
inherited Create(False);
end;constructor TDatabaseThread.Create(ADO:TADOCommand;S:String);
begin
FADOCommand:=ADO;
SQLString:=S;
inherited Create(False);
end;destructor tDatabaseThread.destroy;
begin
FADODataSet.Free;
FADOQuery.Free;
FADOCommand.Free;
couninitialize;
end;
procedure TDatabaseThread.Execute;
begin
FreeOnTerminate:=True;
coinitialize(nil);
if FADODataSet<>nil then
begin
FADODataSet.Close;
FADODataSet.CommandType:=cmdText;
FADODataSet.CommandText:=SQLString;
FADODataSet.Open;
end;
if FADOQuery<>nil then
begin
FADOQuery.Close;
FADOQuery.SQL.Clear;
FADOQuery.SQL.Add(SQLString);
FADOQuery.ExecSQL;
end;
if FADOCommand<>nil then
begin
FADOCommand.CommandText:=SQLString;
FADOCommand.Execute;
end;
couninitialize;
if Terminated then exit;
end;end.子窗口运行时调用语句直接是:
mdatabas.tdatabasethread.create(ADODataset1,'select * from a');请问这如何解决
像MDI子窗口,如何实现ADO的多线程查询
然后把他加入到MDI窗口中来用
子窗口查询后,关闭时跳出这个错误:
system Error code:1400 无效的窗口句柄
control '' has no parent window
如果再建立新窗口会跳出
A component named form1 already exists
然后无法建立整个MDI关掉后,报这样的错误
exception einvalidpointer in module project1.exe at 00003d39 invalid pointer operation单元代码是unit Mdatabas;interfaceuses
Classes, ADODB,activex;
type
TDatabaseThread = class(TThread)
private
FADODataSet:TADODataSet;
FADOQuery:TADOQuery;
FADOCommand:TADOCommand;
SQLString:string;
protected procedure Execute; override;
public
constructor Create(ADO:TADODataSet;S:String); overload;
constructor Create(ADO:TADOQuery;S:String); overload;
constructor Create(ADO:TADOCommand;S:String); overload;
destructor destroy;
end;implementationuses Unit1;
{ TDatabaseThread }
constructor TDatabaseThread.Create(ADO:TADODataSet;S:String);
begin
FADODataSet:=ADO;
SQLString:=S;
inherited Create(False);
end;constructor TDatabaseThread.Create(ADO:TADOQuery;S:String);
begin
FADOQuery:=ADO;
SQLString:=S;
inherited Create(False);
end;constructor TDatabaseThread.Create(ADO:TADOCommand;S:String);
begin
FADOCommand:=ADO;
SQLString:=S;
inherited Create(False);
end;destructor tDatabaseThread.destroy;
begin
FADODataSet.Free;
FADOQuery.Free;
FADOCommand.Free;
couninitialize;
end;
procedure TDatabaseThread.Execute;
begin
FreeOnTerminate:=True;
coinitialize(nil);
if FADODataSet<>nil then
begin
FADODataSet.Close;
FADODataSet.CommandType:=cmdText;
FADODataSet.CommandText:=SQLString;
FADODataSet.Open;
end;
if FADOQuery<>nil then
begin
FADOQuery.Close;
FADOQuery.SQL.Clear;
FADOQuery.SQL.Add(SQLString);
FADOQuery.ExecSQL;
end;
if FADOCommand<>nil then
begin
FADOCommand.CommandText:=SQLString;
FADOCommand.Execute;
end;
couninitialize;
if Terminated then exit;
end;end.子窗口运行时调用语句直接是:
mdatabas.tdatabasethread.create(ADODataset1,'select * from a');请问这如何解决
像MDI子窗口,如何实现ADO的多线程查询
而findcomponet('form1')又能找到该窗体~~是不是screen的问题?
上面那个事ADO线程查询的单元文件MDICHILD打开后查询调用这个单元文件进行查询
MDICHILD窗口就个按钮,DBGRID,DataSource,ADODataset
onclosed事件就写action:=carfree;
按钮的事件就是调用线程单元mdatabas.tdatabasethread.create(ADODataset1,'select * from a');
不运行查询,子窗口可以正常关闭,运行查询后子窗口关闭就是提示
system Error code:1400 无效的窗口句柄
control '' has no parent window
再要打开一个新这个子窗口就打不开了
提示就是 A component named form1 already exists而exception einvalidpointer in module project1.exe at 00003d39 invalid pointer operation 错误时整个MDI关掉时跳出来的先试下异步查询看看