類似代碼:
CoInitialize(nil) ; //CoInitialize was not called
Qry := TADOQuery.Create(nil) ;
try
// MUST USE OWN CONNECTION
// Qry.Connection := Form1.ADOConnection1;
Qry.ConnectionString := ConnStr;
Qry.CursorLocation := clUseServer;
Qry.LockType := ltReadOnly;
Qry.CursorType := ctOpenForwardOnly;
Qry.SQL.Text := SQLString;
Qry.Open;
while NOT Qry.Eof and NOT Terminated do
begin
ListBox.Items.Insert(0, Format('%s - %d', [Qry.Fields[0].asString,Qry.Fields[1].AsInteger])) ;
//Canvas Does NOT Allow Drawing if not called through Synchronize
Synchronize(RefreshCount) ;
Qry.Next;
end;
finally
Qry.Free;
end;
CoUninitialize() ;
在建立多線程Delphi ADO資料庫應用程式時你需要知道如何解決3個陷阱:
1 使用該dbGo任何對象前必須手動調用CoInitialize,最後調用CoUninitialize。不調用CoInitialize將導致“CoInitialize沒被調用”的錯誤。CoInitialize方法初始化當前線程上的COM庫。 ADO是COM。
2 您不能使用主線程(應用程式)的TADOConnection對象。每個線程需要建立自己的資料庫連接。如果使用Tadoquery對象直接連接資料庫的話,TADOConnection對象就可以省了,省了許多事。
3 您必須使用 Synchronize程式與序主線程“交談”和 訪問主表單上的任何控制項。