掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
スレッド内でSQL文を発行するには? (ID:19594)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
メインスレッドから生成された複数のサブスレッド内で それぞれ動的にTADOConnectionクラス、TADOQueryクラスの インスタンスを生成し、サブスレッド内でDBサーバの更新処理を 行おうと考えています。 スレッド内でTADOConnectionクラス及びTADOQueryクラスのインスタンスを 生成(Create)しようとすると 「プロジェクト〜は、例外クラスEOleSysError(メッセージ'CoInitializeは 呼び出されていません。')を送出しました。」 の例外が発生します。 インスタンス生成部分を別関数にし、Synchronize()でくくってその関数を コールすると例外は発生しません。 ただ、その場合でもその後TADOConnection、TADOQueryのインスタンスにアクセスする箇所 全てで上記エラーが発生するので、それら全てをSynchronize()でくくって しまう必要があり、それだと、スレッド処理にした意味がないのかなと思っています。 (Synchronizeはメイン(画面)のコンテキストで処理を行う?から) TADOConnectionクラス、TADOQueryクラスをスレッド内で動的に インスタンスを生成し、動作させることはできないのでしょうか? ※同時に複数の処理を行う必要があり、同時に複数のSQL文発行を行いたい為、 スレッドを複数たて、そのスレッド内でSQL文の発行をと考えています。 −−−−−−−−−−−−−−−−−−−−−−−−−−−− //********************************* // スレッドクラス(TThreadそのままです) //********************************* TThreadTest = class(TThread) protected procedure Execute; override; end; var Form1: TForm1; Thread1: TThreadTest; //****************************** // ボタン押下でスレッド起動する //****************************** procedure TForm1.Button1Click(Sender: TObject); begin Thread1 := TThreadTest.Create(True); Thread1.Resume; end; //******************** // スレッドメイン関数 //******************** procedure TThreadTest.Execute; var ConDB: TADOConnection; SQLQuery: TADOQuery; begin ConDB := TADOConnection.Create(nil); // ←例外発生 ConDB.Connected := True; SQLQuery := TADOQuery.Create(nil); SQLQuery.Connection := ConDB; while not Terminated do begin // SQLQuery処理 end; SQLQuery.Free; ConDB.Free; end; −−−−−−−−−−−−−−−−−−−−−−−−−−−−
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.