コンソールアプリでADOを使う方法

解決


takk  2003-08-05 20:21:41  No: 4314

コンソールアプリでADOを使おうと思っているのですが、
'CoInitialize は呼び出されていません。'
というエラーが出ます。
どなたかこの現象について分かる方はいらっしゃいますか?

例1.

var
    ZipCn: Variant;

begin
    ZipCn := CreateOleObject('ADODB.Connection');
    //ここでエラー

end;

例2.

var
    ZipCn: ADODB_TLB.TConnection;

begin
    ZipCn := ADODB_TLB.TConnection.Create(nil);
    //Create時の引数が分からないのでとりあえずnilを指定しています。

    ZipCn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
                              'Persist Security Info=False;' +
                              'Mode=Read;Data Source=ZipData.mdb';
    //ここでエラー

end;

ちなみに普段はGUIアプリで例1の方法を使っていますが、問題無く動いています。
コンソールアプリではADOは使えないのでしょうか?
よろしくお願いいたします。

環境:Windows 2000 SP3、Delphi 6 Personal


にしの  2003-08-05 21:47:18  No: 4315

エラーの内容は読まれて理解しています?
それとも、CoInitializeを呼んでいるのに「呼んでいない」とエラーが出るのでしょうか。
CoInitialize delphiで、google検索するとたくさん出てきます。


takk  2003-08-05 23:24:33  No: 4316

にしのさん、レスありがとうございます。

エラーの内容は全く理解していませんでした、申し訳ありません(^^;
『CoInitialize Delphi』で調べた内容を読んで、実はこれも理解できませんでしたが(汗)、
一応CoInitializeを呼ぶことでエラーも出ずに希望通りの動作をするようになりました。
GUIアプリでは暗黙のうちにこのCoInitializeが呼ばれているのでしょうか??
とりあえずコンソールアプリでADOも使えるようになったので解決とさせて頂きます。

今はまだDelphiも始めたばかりなので理解出来ないことも多いですが、
いずれこの辺りのことも理解できるように頑張りたいと思います。
ご指導ありがとうございました!


takk  2003-08-05 23:25:29  No: 4317

解決し忘れてましたf^^;


にしの  2003-08-06 00:25:04  No: 4318

> GUIアプリでは暗黙のうちにこのCoInitializeが呼ばれているのでしょうか??

使用しているユニットのどこでもよいのです。
たぶん、ActiveXとか、ComCtrlsだとかのユニットで、CoInitializeが呼ばれているのだと思います。
CoInitializeの呼び出しに成功している時、そのアプリケーションを終了する際に、CoUninitializeを呼び出すのを忘れずに。


nanashi  2003-08-06 00:41:39  No: 4319

なるほど、それなら納得ですね。
CoUninitializeについては CoInitializeを調べた時に一緒に出ていたので処理に組み込んでおきました。
細部にわたるフォローありがとうございますm(_ _)m


takk  2003-08-06 01:00:59  No: 4320

他の掲示板用の名前を使ってしまいましたf^^;
アホ過ぎてすみません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加