Delphi 7を使用して、スレッド内でデータベース作業を実行しようとすると、次のエラーが発生します。
「CoInitializeは呼び出されていません」
スレッド内にADOConnection.Openを含む単純なコードを使用しました。
しかし、同じコードを何らかのアイデアの形で使用すれば、問題なく機能しますか?
Delphi 7を使用して、スレッド内でデータベース作業を実行しようとすると、次のエラーが発生します。
「CoInitializeは呼び出されていません」
スレッド内にADOConnection.Openを含む単純なコードを使用しました。
しかし、同じコードを何らかのアイデアの形で使用すれば、問題なく機能しますか?
@mjn:前の回答であなたの発言にコメントすることは許可されていないので、新しい回答を作成しました。コンストラクターからCoInitializeを呼び出すことは、プログラマーが行う典型的なエラーの1つです。
コンストラクターは別のスレッドのコンテキストで実行されますが、現在のスレッドでCOMを初期化する必要があります(スレッドプロシージャが実行されている場合、つまりExecuteメソッドの一部として)。
procedure TYourThread.execute;
begin
CoInitialize(nil);
FConnection:=TConnection.Create(...);
try
ThreadCode ....
finally
FConnection.free;
CoUninitialize;
end;
end;
もう1つの原因は、Application.Initializeです。メインアプリケーションのDPRに欠落しているか、コメントアウトされています。