4

Delphi 7を使用して、スレッド内でデータベース作業を実行しようとすると、次のエラーが発生します。

「CoInitializeは呼び出されていません」

スレッド内にADOConnection.Openを含む単純なコードを使用しました。

しかし、同じコードを何らかのアイデアの形で使用すれば、問題なく機能しますか?

4

3 に答える 3

14

@mjn:前の回答であなたの発言にコメントすることは許可されていないので、新しい回答を作成しました。コンストラクターからCoInitializeを呼び出すことは、プログラマーが行う典型的なエラーの1つです。

コンストラクターは別のスレッドのコンテキストで実行されますが、現在のスレッドでCOMを初期化する必要があります(スレッドプロシージャが実行されている場合、つまりExecuteメソッドの一部として)

于 2013-01-13T10:43:23.857 に答える
10
procedure TYourThread.execute;
begin
  CoInitialize(nil); 
  FConnection:=TConnection.Create(...);
  try
    ThreadCode ....
  finally
    FConnection.free;
    CoUninitialize;
  end;
end;
于 2013-01-13T07:33:21.707 に答える
0

もう1つの原因は、Application.Initializeです。メインアプリケーションのDPRに欠落しているか、コメントアウトされています。

于 2015-09-09T05:44:02.883 に答える