[ACC2003] Microsoft Access フォームを ADO レコードセットに連結する方法

文書翻訳 文書翻訳
文書番号: 281998 - 対象製品
この記事は、以前は次の ID で公開されていました: JP281998
上級者向け : 高度なコーディング能力、相互運用性、およびマルチユーザー環境の経験が必要です。

この資料は Microsoft Access データベース (.mdb)、および Microsoft Access プロジェクト (.adp) について記述したものです。

すべて展開する | すべて折りたたむ

目次

概要

この資料では、ADO (ActiveX Data Objects) Recordset オブジェクトに連結された更新可能なフォームを作成するための必要条件について説明します。

詳細

Microsoft Access フォームをレコードセットに連結するには、フォームの Recordset プロパティを有効な DAO (Data Access Objects) レコードセット オブジェクトまたは ADO レコードセット オブジェクトに設定する必要があります。

Microsoft Access 2000 で導入された Recordset プロパティを使用して、フォームを DAO レコードセット オブジェクトまたは ADO レコードセット オブジェクトに連結できます。ただし、Access 2000 のフォームは、ADO 接続が MSDataShape プロバイダおよび SQL Server OLEDB プロバイダを使用して開かれている場合にのみ更新可能です。 Access 2000 におけるこの制限の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
227053 [ACC2000] ADOレコードセットに基づくフォームが読取専用になる
Microsoft Access 2002 またはそれ以降では、その他の OLEDB プロバイダを使用する ADO レコードセットに連結された更新可能なフォームを作成できます。ADO レコードセットに連結されたフォームが更新可能になるためには、いくつかの一般的な必要条件を満たす必要があります。この一般的な必要条件を以下に示します。
  1. 元になる ADO レコードセットが更新可能である。
  2. レコードセットに、テーブルの主キーのような一意インデックスを持つフィールドが 1 つ以上含まれている。
更新可能にするためのその他の必要条件は、プロバイダによって異なります。この資料では、Microsoft SQL Server、Jet、ODBC、および Oracle OLEDB の各プロバイダを使用するときのその他の必要条件について説明します。

Microsoft SQL Server の必要条件

Microsoft SQL Server データを使用する ADO レコードセットにフォームを連結する場合、フォームを更新可能にするための主要な必要条件は以下の 2 つです。
  • ADO レコードセットの接続には、サービス プロバイダとして Microsoft Access 10.0 OLEDB プロバイダを使用する。
  • ADO レコードセットの接続には、データ プロバイダとして Microsoft SQL Server OLEDB プロバイダを使用する。
: Microsoft Access 10.0 OLEDB プロバイダは、Microsoft Access で使用するために特別に作成された OLEDB サービス プロバイダです。このプロバイダは、Microsoft Access 以外のアプリケーションで使用するように設計されていないため、その他のアプリケーションではサポートされません。

Microsoft Access 内で ADO レコードセットを作成するときは、レコードセットで使用する ADO 接続を選択できます。Access プロジェクト (ADP) ファイルで現在開かれ、Microsoft Access によって使用されている SQL Server データベースへの ADO 接続を共有することも、別の SQL Server データベースへの ADO 接続を新しく作成することもできます。

Microsoft Access で使用されている ADO 接続を共有する

Microsoft SQL Server データベースに接続された Access プロジェクト ファイル (.adp) を使用している場合は、Microsoft Access で使用されている ADO 接続を共有できます。この接続は、CurrentProject.AccessConnection プロパティを使用して取得できます。

以下の例は、Microsoft Access と ADO 接続を共有して、SQL Server データに基づく ADO レコードセットにフォームを連結する方法を示しています。
  1. サンプル プロジェクト NorthwindCS.adp を開きます。
  2. デザイン ビューで "得意先" フォームを開きます。
  3. フォームの連結を解除するために、"レコードソース" プロパティの値を削除します。
  4. このフォームの "開く時" プロパティに、次のイベント プロシージャを指定します。
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Use the ADO connection that Access uses
       Set cn = CurrentProject.AccessConnection
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM 得意先"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .Open 
       End With
       
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  5. フォームを保存して閉じます。
  6. フォーム ビューで "得意先" フォームを開きます。
  7. フォームでレコードの追加、編集、または削除を行います。
フォームは、SQL Server データを基にした更新可能なレコードセットに連結されています。

別の ADO 接続を開く

SQL Server への独自の ADO 接続を開いて管理することが必要な場合があります。たとえば、Access データベース (.mdb) でコードを作成している場合、またはアプリケーションとは異なる SQL Server データベースに接続された Access プロジェクト ファイル (.adp) でコードを作成している場合は、この方法を使用する必要があります。この方法を使用する場合、ADO 接続が不要になったときに、開いていた ADO 接続を閉じることをお勧めします。たとえば、フォームの "読み込み解除時" イベントで ADO 接続を閉じるようにします。

以下の例は、Microsoft SQL Server データベースへの独自の ADO 接続を開いてフォームを連結する方法を示しています。
  1. サンプル データベース Northwind.mdb を開きます。
  2. デザイン ビューで "得意先" フォームを開きます。
  3. フォームの連結を解除するために、"レコードソース" プロパティの値を削除します。
  4. このフォームの "開く時" プロパティに、次のイベント プロシージャを指定します。
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Create a new ADO Connection object
       Set cn = New ADODB.Connection
       'Use the Access 10 and SQL Server OLEDB providers to
       'open the Connection
       'You will need to replace MySQLServer with the name
       'of a valid SQL Server
       With cn
          .Provider = "Microsoft.Access.OLEDB.10.0"
          .Properties("Data Provider").Value = "SQLOLEDB"
          .Properties("Data Source").Value = "MySQLServer"
          .Properties("User ID").Value = "sa"
          .Properties("Password").Value = ""
          .Properties("Initial Catalog").Value = "NorthwindCS"
          .Open
       End With
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM 得意先"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .Open 
       End With
       
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  5. フォームの "読み込み解除時" (Form_Unload) イベントに次のコードを追加します。
    Private Sub Form_Unload(Cancel As Integer)
       'Close the ADO connection we opened
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
    					
  6. フォームを保存して閉じます。
  7. フォーム ビューで "得意先" フォームを開きます。
  8. フォームでレコードの追加、編集、または削除を行います。
フォームは、SQL Server データを基にした更新可能なレコードセットに連結されています。

Microsoft Jet の必要条件

Jet データベースのデータを使用する ADO レコードセットにフォームを連結することもできますが、Jet データベースには DAO を使用することをお勧めします。DAO は Jet 向けに高度に最適化されており、通常、Jet データベースを使用するときは ADO より高速です。

Microsoft Jet データを使用する ADO レコードセットにフォームを連結するときは、次の 2 つのいずれかの条件を満たす必要があります。
  • レコードセットの ActiveConnection プロパティで、Microsoft Jet 4.0 OLEDB データ プロバイダだけでなく、Microsoft Access 10.0 OLEDB サービス プロバイダを使用し、かつレコードセットをサーバー側カーソルにする。

    または
  • レコードセットの ActiveConnection プロパティで、Microsoft Jet 4.0 OLEDB データ プロバイダだけを使用し、かつレコードセットをクライアント側カーソルにする。
この資料の「Microsoft SQL Server の必要条件」と同様、Jet データベースを使用しているときも、レコードセットで使用する ADO 接続を選択できます。Microsoft Access で現在開かれ、使用されている Jet データベース ファイル (.mdb) への ADO 接続を共有することも、別の Jet データベース ファイルへの新しい ADO 接続を作成することもできます。

Microsoft Access で使用されている ADO 接続を共有する

レコードセットで必要なデータを含む同じ Access データベース (.mdb) でコードを作成している場合は、Microsoft Access で使用されている ADO 接続を利用できます。この接続は、CurrentProject.AccessConnection プロパティで取得できます。以下の例は、Microsoft Access で現在使用されている ADO 接続を共有して、Jet データベースの ADO レコードセットにフォームを連結する方法を示しています。
  1. サンプル データベース Northwind.mdb を開きます。
  2. デザイン ビューで "得意先" フォームを開きます。
  3. フォームの連結を解除するために、[レコードソース] プロパティの値を削除します。
  4. このフォームの "開く時" プロパティに、次のイベント プロシージャを指定します。
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
                    
       Set cn = CurrentProject.AccessConnection
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM 得意先"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .CursorLocation = adUseServer
          .Open 
       End With
       
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  5. フォームを保存して閉じます。
  6. フォーム ビューで "得意先" フォームを開きます。
  7. フォームでレコードの追加、編集、または削除を行います。
フォームは、Jet データを使用した更新可能なレコードセットに連結されています。

別の ADO 接続を開く

Jet データベースへの独自の ADO 接続を開いて管理することが必要な場合があります。たとえば、アクセスする必要のあるデータを含むデータベースとは別のデータベースでコードを作成している場合は、この方法を使用する必要があります。この方法を使用する場合、ADO 接続が不要になったときに、開いていた ADO 接続を閉じることをお勧めします。たとえば、フォームの "読み込み解除時" イベントで ADO 接続を閉じるようにします。

以下の例は、Microsoft Jet データベースへの独自の ADO 接続を開いてフォームを連結する方法を示しています。
  1. 新しい空のデータベースを作成します。
  2. サンプル データベース Northwind.mdb から "得意先" フォームをインポートします。
  3. デザイン ビューで "得意先" フォームを開きます。
  4. フォームの連結を解除するために、"レコードソース" プロパティの値を削除します。
  5. このフォームの "開く時" プロパティに、次のイベント プロシージャを指定します。
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Create a new ADO Connection object
       Set cn = New ADODB.Connection
       With cn
          .Provider = "Microsoft.Access.OLEDB.10.0"
          .Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"
          .Properties("Data Source").Value = _
              "C:\Program Files\Microsoft Office\Office10" & _
              "\Samples\Northwind.mdb"
          .Open
       End With
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM 得意先"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .Open 
       End With
       
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  6. フォームの "読み込み解除時" (Form_Unload) イベントに次のコードを追加します。
    Private Sub Form_Unload(Cancel As Integer)
       'Close the ADO connection we opened
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
    					
  7. フォームを保存して閉じます。
  8. フォーム ビューで "得意先" フォームを開きます。
  9. フォームでレコードの追加、編集、または削除を行います。
フォームは、Jet データを使用した更新可能なレコードセットに連結されています。

ODBC の必要条件

ODBC データベースのデータを使用する ADO レコードセットにフォームを連結する場合、フォームを更新可能にするための主要な必要条件は以下の 2 つです。
  • レコードセットが使用する ADO 接続では、Microsoft OLEDB Provider for ODBC を使用する。
  • ADO レコードセットをクライアント側カーソルにする。
以下の例は、ODBC データベースへの ADO 接続を開いてフォームを連結する方法を示しています。

: 以下の手順では、サンプル データベース Northwind.mdb の "得意先" テーブルと同じ構造の CUSTOMERS という名前のテーブルが ODBC データベースに含まれていると仮定しています。また、バックエンド データベースに接続するために必要な、ODBC ドライバを使用する MyDSN という名前の ODBC DSN が作成されていると仮定しています。
  1. サンプル データベース Northwind.mdb を開きます。
  2. デザイン ビューで "得意先" フォームを開きます。
  3. フォームの連結を解除するために、"レコードソース" プロパティの値を削除します。
  4. このフォームの "開く時" プロパティに、次のイベント プロシージャを指定します。
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
       Dim strConnection As String
       strConnection = "ODBC;DSN=MyDSN;UID=sa;PWD=;DATABASE=Northwind"
       'Create a new ADO Connection object
       Set cn = New ADODB.Connection
       With cn
          .Provider = "MSDASQL"
          .Properties("Data Source").Value = strConnection
          .Open
       End With
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Customers"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .CursorLocation = adUseClient
          .Open 
       End With
       
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  5. フォームの "読み込み解除時" (Form_Unload) イベントに次のコードを追加します。
    Private Sub Form_Unload(Cancel As Integer)
       'Close the ADO connection we opened
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
    					
  6. フォームを保存して閉じます。
  7. フォーム ビューで "得意先" フォームを開きます。
  8. フォームでレコードの追加、編集、または削除を行います。
フォームは、ODBC データを基にした更新可能なレコードセットに連結されています。

Oracle の必要条件

Oracle データベースのデータを使用する ADO レコードセットにフォームを連結する場合、フォームを更新可能にするための主要な必要条件は以下の 2 つです。
  • レコードセットが使用する ADO 接続では、Microsoft OLEDB Provider for Oracle を使用する。
  • ADO レコードセットをクライアント側カーソルにする。
以下の例は、Oracle データベースへの ADO 接続を開いてフォームを連結する方法を示しています。

: 以下の手順では、サンプル データベース Northwind.mdb の "得意先" テーブルと同じ構造の CUSTOMERS という名前のテーブルが Oracle データベースに含まれていると仮定しています。
  1. サンプル データベース Northwind.mdb を開きます。
  2. デザイン ビューで "得意先" フォームを開きます。
  3. フォームの連結を解除するために、"レコードソース" プロパティの値を削除します。
  4. このフォームの "開く時" プロパティに、次のイベント プロシージャを指定します。
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Create a new ADO Connection object
       Set cn = New ADODB.Connection
       With cn
          .Provider = "MSDAORA"
          .Properties("Data Source").Value = "MyOracleServer"
          .Properties("User ID").Value = "username"
          .Properties("Password").Value = "password"          
          .Open
       End With
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Customers"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .CursorLocation = adUseClient
          .Open 
       End With
      
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  5. フォームの "読み込み解除時" (Form_Unload) イベントに次のコードを追加します。
    Private Sub Form_Unload(Cancel As Integer)
       'Close the ADO connection we opened
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
    					
  6. フォームを保存して閉じます。
  7. フォーム ビューで "得意先" フォームを開きます。
  8. フォームでレコードの追加、編集、または削除を行います。
フォームは、Oracle データを基にした更新可能なレコードセットに連結されています。

関連情報

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
281784 [ACC2002] Connection プロパティと AccessConnection プロパティの違い
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。明示または黙示にかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

関連情報

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

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

プロパティ

文書番号: 281998 - 最終更新日: 2005年6月10日 - リビジョン: 4.2
この資料は以下の製品について記述したものです。
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
キーワード:?
kbado kbdatabinding kbdatabase kbdesign kbprogramming kbhowto KB281998
"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