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

解決


takk  2003-08-05 20:21:41  No: 4314  IP: [192.*.*.*]

コンソールアプリで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  IP: [192.*.*.*]

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

編集    削除
takk  2003-08-05 23:24:33  No: 4316  IP: [192.*.*.*]

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

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

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

編集    削除
takk  2003-08-05 23:25:29  No: 4317  IP: [192.*.*.*]

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

編集    削除
にしの  2003-08-06 00:25:04  No: 4318  IP: [192.*.*.*]

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

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

編集    削除
nanashi  2003-08-06 00:41:39  No: 4319  IP: [192.*.*.*]

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

編集    削除
takk  2003-08-06 01:00:59  No: 4320  IP: [192.*.*.*]

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

編集    削除