[HOWTO] Visual Basic コンポーネントの COM オブジェクト コンストラクタ文字列にアクセスする方法

文書翻訳 文書翻訳
文書番号: 271284 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

Microsoft Windows 2000 では、COM+ ランタイムにインストールされているダイナミック リンク ライブラリ (DLL) の各コンポーネントに対して一意のオブジェクト コンストラクタ文字列を構成することができます。コンストラクタ文字列は、初期化文字列を指定するためによく使用されます。この初期化文字列は、コンポーネントのすべてのオブジェクト インスタンスからアクセス可能である必要があります。この資料では、コンポーネントのオブジェクト インスタンスで使用可能な、Visual Basic コンポーネント用の COM+ オブジェクト コンストラクタ文字列の構成方法を示すサンプル コードを紹介します。

詳細

コンストラクタ文字列は、データベース接続を確立するためにコンポーネントのオブジェクト インスタンスで使用されるデータベース接続文字列を指定するためによく使用されます。この目的でコンストラクタ文字列を使用する利点は、コンポーネントのコード内に接続文字列をハードコードせずに済むことです。データベース サーバーの名前の変更、対象のデータベースの変更やその他の修正を加えるには、コンポーネントの COM+ オブジェクト コンストラクタを修正するだけでよく、コンポーネントのコードの変更や実際の DLL の再コンパイルは必要ありません。データベース接続情報の格納だけでなく、COM+ オブジェクト コンストラクタ文字列は、コンポーネントのすべてのオブジェクトインスタンスからアクセス可能である必要がある、初期化文字列を指定するためにも使用できます。

COM+ オブジェクト コンストラクタ文字列の構成方法

Visual Basic コンポーネントのオブジェクト インスタンスから、構成されている COM+ オブジェクト コンストラクタ文字列にアクセスできるためには、そのコンポーネントに IObjectConstruct という COM+ インターフェイスが実装されている必要があります。IObjectConstruct では、Construct (IObjectConstruct_Construct) という名前のメソッドが公開されています。このメソッドは、そのコンポーネントのオブジェクト インスタンスの作成時に実行されます。このメソッドにパラメータとして渡される Constructor オブジェクトを使用して、構成されている COM+ オブジェクトのコンストラクタ文字列を取得できます。この機能の使用方法を示すサンプルを実行するには、以下の手順を実行します。
  1. Visual Basic で新しい ActiveX DLL プロジェクトを開きます。
  2. プロジェクトの名前を prjConstruct に変更します。
  3. クラス モジュールの名前を clsConstruct に変更します。
  4. プロジェクトに COM+ Services Type Library および Microsoft ActiveX Data Objects 2.5 Library への参照を設定します。
  5. 以下のコードをコピーし、クラス モジュールに貼り付けます。
    'General Declarations Section
    Implements IObjectConstruct
    Dim connstr As String
    Private Sub IObjectConstruct_Construct(ByVal pCtorObj As Object)
    Dim mConstructString As IObjectConstructString
    Set mConstructString = pCtorObj
    connstr = mConstructString.ConstructString
    End Sub
    Public Function GetAuthors() As ADODB.Recordset
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = New ADODB.Connection
    cn.Open connstr
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.Open "Select * from Authors", cn, adOpenStatic, adLockBatchOptimistic
    Set rs.ActiveConnection = Nothing
    Set GetAuthors = rs
    GetObjectContext.SetComplete
    End Function
    						
    このサンプル コードは、COM+ オブジェクト コンストラクタ文字列にアクセスするための IObjectConstruct_Construct の実装方法を示しています。Construct オブジェクト パラメータは、IObjectConstructString インターフェイスにキャストする必要があります。IObjectConstructString では、COM+ オブジェクト コンストラクタ文字列へのアクセスに使用される ConstructString と呼ばれるプロパティが公開されています。コンストラクタ文字列をグローバル変数に割り当てる方法および GetAuthors 関数で再利用する方法に注目してください。
  6. DLL をコンパイルします。COM+ サーバー アプリケーションを作成して prjConstruct.clsConstruct コンポーネントをホストするには、以下の手順を実行します。
    1. コントロール パネルで [管理ツール] をダブルクリックし、[コンポーネント サービス] をダブルクリックして、コンポーネント サービス Microsoft 管理コンソール (MMC) スナップインを開きます。
    2. [コンポーネント サービス]、[コンピュータ]、[マイ コンピュータ]、[COM+ アプリケーション] の順に展開します。[COM+ アプリケーション] をクリックします。
    3. [COM+ アプリケーション] を右クリックし、[新規作成] をポイントし、[アプリケーション] をクリックします。
    4. 空のアプリケーションを作成します。名前は VBComPlusTest とし、[アクティブ化の種類] の [サーバー アプリケーション] をクリックし、対話ユーザーの資格情報を使用するようにアプリケーション ID を指定します。
    5. ウィザードの手順を完了し、[完了] をクリックします。これにより、prjConstruct.clsConstruct Visual Basic コンポーネントをホストするためのサンプル COM+ アプリケーションが作成されます。
  7. VBComPlusTest COM+ アプリケーションに prjConstruct.clsConstruct コンポーネントをインストールするには、以下の手順を実行します。
    1. コンポーネント サービス MMC スナップインで、[VBComPlusTest] を展開します。[コンポーネント] サブフォルダをクリックします。
    2. [コンポーネント] を右クリックし、[新規作成] をポイントし、[コンポーネント] をクリックします。
    3. COM+ コンポーネント インストール ウィザードで、[次へ] をクリックし、[新しいコンポーネントをインストールする] をクリックし、prjConstruct.dll をクリックし、[次へ] をクリックします。
    4. ウィザードの手順を完了し、[完了] をクリックします。
  8. prjConstruct.clsConstruct Visual Basic コンポーネントを右クリックし、[プロパティ] をクリックします。
  9. [アクティブ化] タブをクリックし、[オブジェクトの構築を有効にする] チェック ボックスをオンにします。
  10. [コンストラクタ文字列] ボックスに、次の ADO 接続文字列を指定し、[OK] をクリックします。

    : このサンプルでは、Microsoft SQL Server PUBS サンプル データベースを使用しています。
    "Provider=SQLOLEDB;Data Source=<Your SQL Server>;Initial Catalog=pubs;" & _
                       "User Id=<User Id>;Password=<Password>"
    					

COM+ オブジェクト コンストラクタ文字列の使用方法

  1. Visual Basic COM+ コンポーネントのテスト用に、Visual Basic で新しい標準 EXE プロジェクトを作成します。デフォルトで Form1 が作成されます。
  2. リスト ボックス (List1) とコマンド ボタン (Command1) を Form1 に追加します。
  3. 次のコードをコピーして、Command1 の Click イベントに貼り付けます。
    Dim obj As Object
    Dim rs As Object
    Set obj = CreateObject("prjConstruct.clsConstruct")
    Set rs = obj.GetAuthors()
    Do While Not rs.EOF
      List1.AddItem rs.fields("au_fname")
      rs.movenext
    Loop
    Set obj = Nothing
    					
  4. 標準 EXE プロジェクトを保存し、実行します。
  5. [Command1] をクリックして、リスト ボックスに Authors テーブルのすべての著者名を挿入します。
COM+ オブジェクト コンストラクタ文字列の便利さを確認するために、コンストラクタ文字列の DataSource プロパティの値を、PUBS サンプル データベースのある別の SQL Server を指すように変更します。クライアント コードを実行すると、新しいデータ ソースからレコードが取得され、表示されます。これを確認できるように、2 番目の SQL Server PUBS データベースの Authors テーブルには新しいレコードを追加しておきます。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 271284 (最終更新日 2001-08-23) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

プロパティ

文書番号: 271284 - 最終更新日: 2004年5月24日 - リビジョン: 1.0
この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
キーワード:?
kbhowto kbmdacnosweep KB271284
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com