2017-02-14 16 views
0

私はDelphi 7で作業しています。異なるDelphiアプリケーション間でADO接続オブジェクトを共有したいと思います。どのようにタイプライブラリを使用してそれを行うには?COM(タイプライブラリ)からTADOConnectionを返す方法

私はString/integer/someデータ型だけを返すことができますが、私はTADOConnectionを見ませんでした。 tADOConnectionを返すには?

enter image description here

+2

DelphiクラスをCOMオブジェクトにすることはできません。 COMはそれがサポートする特定の型だけを返し、Delphiクラスはそれらのうちの1つではありません。それに直面して、あなたがしようとしていることは、それが価値があるよりはるかに多くの問題を抱えているようです。アプリケーション間でAdoConnectionを「共有」する必要があると思われるのはなぜですか?あなたはそれが何を期待していますか? – MartynA

+0

@MartynA:私たちは常時実行する必要のあるベースアプリケーションを持っています。だから私は、TADOConnectionオブジェクトを作成し、ベースアプリケーションのDataBaseに接続し、他のすべてのアプリケーションで同じ接続を使用したいと思います。 – DelphiLearner

+0

COM "マーシャル"について知っていますか? – MartynA

答えて

1

A TADOConnectionのは、AdoDB.PASで定義されている他のすべてのTAdoxxxオブジェクトとともに、 は「の上に座って」とWindowsのADOサブシステムで作成されたオブジェクトを使用しています。 D7ソースユニットAdoInt.Pasを見ると、これはC:\ PROGRAM FILES \ COMMON FILES \ SYSTEM \ ADO \ MSADO15.DLLのタイプライブラリインポート です。オブジェクトインターフェイス の1つが_Connectionであり、これはTAdoConnectionのすべての作業 を実行するインスタンスです。

AdoInt.Pasで定義されたオブジェクトは、プロセスの境界を越えて動作するインターフェースの一部、TAdoQuery様サーバとDelphi側AdoCustomDataset子孫間 を仲介ADOレベルのオブジェクトである 最も顕著RecordSetオブジェクト、 これについての章はDavid Sceppaの "Programming ADO"(Microsoft Press) であり、COMを介してRecordSetオブジェクトを利用できるようにするテストCOMサーバーを作成しています。

ただし、私が実験で確立できた限り、 は、TAdoConnectionまたはその基礎となるConnectionObjectをCOMを使用してプロセス の境界を越えて処理することはできません。

しかし、もともとこの方向へのあなたの考えを動機付けたのは、単に新しいプロジェクトで同じ方法でAdoConnectionsを設定しなければならないという単純なものであれば、個人的に私はTAdoConnectionのカスタム子孫を派生させるだけです常にコードで使用するプロパティを作成し、Delphiに登録してコンポーネントパレットに表示させます。

+0

http://stackoverflow.com/questions/3266532/ok-to-use-tadoconnection -in-threads – kobik

+0

@kobik:ありがとうございますが、バックグラウンドでクエリの結果を取得するのを簡単にするために、別のスレッドのAdoConnections間でConnectionObjectを共有しているため、これらの回答が正しいかどうかはわかりません。 – MartynA

+1

@kobik:更新を見て、 "私はあなたにこう言った"という誘惑に抵抗するかもしれない;) – MartynA

関連する問題