如何將 Microsoft Access 表單連結至 ADO 資料錄集

文章翻譯 文章翻譯
文章編號: 281998 - 檢視此文章適用的產品。
進階使用者:需要專家層級的程式碼撰寫、互動作業和多使用者技能。

本文適用在 Microsoft Access 資料庫 (.mdb) 和 Microsoft Access 專案 (.adp)。

全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您若要建立連結至 ActiveX Data Objects (ADO) Recordset 物件的可更新表單時,所需要的條件。

其他相關資訊

如果要將 Microsoft Access 表單連結至資料錄集,必須將表單的 Recordset 屬性設定為有效的 Data Access Objects (DAO) 或 ADO Recordset 物件。

Recordset 屬性是由 Microsoft Access 2000 引進,其允許您將表單連結至 DAO 或 ADO Recordset 物件。然而,只有在使用 MSDataShape 和 SQL Server OLEDB 提供者開啟 ADO 連線時,Access 2000 中的表單才支援更新能力。 如需有關這個 Access 2000 限制的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
227053 ACC2000:Forms Based on ADO Recordsets Are Read-Only
在 Microsoft Access 2002 或更新版本中,您可以建立使用其他 OLEDB 提供者連結至 ADO 資料錄集的可更新表單。當表單連結至 ADO 資料錄集時,可更新的表單必須滿足幾個一般需求。這些一般需求包括:
  1. 基礎的 ADO 資料錄集必須可更新。
  2. 資料錄集必須包含一個或多個唯一索引的欄位,例如表格的主索引鍵。
更新能力的其他需求依提供者而有所不同。本文將告訴您使用 Microsoft SQL Server、Jet、ODBC 和 Oracle OLEDB 提供者時,有哪些其他的需求。

Microsoft SQL Server 的需求

當您將表單連結至使用 Microsoft SQL Server 資料的 ADO 資料錄集時,支援更新能力有兩個主要的需求:
  • 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 連線。ADO 程式碼可以共用 ADO 連線 (Microsoft Access 用該連線來連接目前在 Access 專案 (ADP) 檔案中開啟的 SQL Server 資料庫);或者您也可以程式撰寫方式建立不同 SQL Server 資料庫的新 ADO 連線。

共用 Microsoft Access 使用的 ADO 連線

如果使用 Access 專案檔案 (.adp) 連接至 Microsoft SQL Server 資料庫,可能就能夠讓 ADO 程式碼共用 Microsoft Access 使用的 ADO 連線。本連線透過 CurrentProject.AccessConnection 屬性公開。

下列範例展示如何將表單連結至以 SQL Server 資料為基礎的 ADO 資料錄集,它會與 Microsoft Access 共用 ADO 連線。
  1. 開啟範例專案 NorthwindCS.adp。
  2. 在「設計」檢視中開啟 [客戶] 表單。
  3. 清除表單的 RecordSource 屬性以取消連結表單。
  4. 將表單的 OnOpen 屬性設定為下列事件程序:
    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 Customers"
          .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 連線。例如,如果在連接至與應用程式不同的 SQL Server 資料庫之 Access 資料庫 (.mdb) 或 Access 專案檔案 (.adp) 中撰寫程式碼,您可能需要使用本方法。 請注意當使用本方法時,Microsoft 建議您關閉已經開啟但是不再需要的 ADO 連線。例如,您可能想要關閉表單 UnLoad 事件中的 ADO 連線。

下列範例展示如何開啟專屬的 Microsoft SQL Server 資料庫 ADO 連線,並且將表單連結至連線:
  1. 開啟範例資料庫 Northwind.mdb。
  2. 在「設計」檢視中開啟 [客戶] 表單。
  3. 清除表單的 RecordSource 屬性以取消連結表單。
  4. 將表單的 OnOpen 屬性設定為下列事件程序:
    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 Customers"
          .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. 將下列程式碼新增至表單的 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 資料錄集,但是 Microsoft 建議使用 DAO 來取代。DAO 針對 Jet 進行高度最佳化,而且當搭配 Jet 資料庫使用時執行速度通常比 ADO 快。

當您將表單連結至使用 Microsoft Jet 資料的 ADO 資料錄集時,有兩個選擇方案:
  • 資料錄集的 ActiveConnection 屬性必須使用 Microsoft Access 10.0 OLEDB 服務提供者以及 Microsoft Jet 4.0 OLEDB 資料提供者,而且資料錄集必須是伺服器端指標。

    - 或 -
  • 資料錄集的 ActiveConnection 屬性必須僅使用 Microsoft Jet 4.0 OLEDB 資料提供者,而且資料錄集必須是用戶端指標。
與本文稍早的<Microsoft SQL Server>一節相似,使用 Jet 資料庫時可以選擇資料錄集使用哪一個 ADO 連線。ADO 程式碼可以共用 ADO 連線 (Microsoft Access 用該連線來連接目前開啟的 Jet 資料庫檔案 (.mdb)),或者您可以利用程式撰寫方式建立另一個 Jet 資料庫檔案的新 ADO 連線。

共用 Microsoft Access 使用的 ADO 連線

如果在包含資料錄集所需資料的相同 Microsoft Access 資料庫 (.mdb) 中撰寫程式碼,可能就能夠讓 ADO 程式碼共用 Microsoft Access 使用的 ADO 連線。本連線透過 CurrentProject.AccessConnection 屬性公開。下列範例展示如何透過共用 Microsoft Access 目前使用的 ADO 連線,將表單連結至 Jet 資料庫中的 ADO 資料錄集:
  1. 開啟範例資料庫 Northwind.mdb。
  2. 在「設計」檢視中開啟 [客戶] 表單。
  3. 清除表單的 RecordSource 屬性以取消連結表單。
  4. 將表單的 OnOpen 屬性設定為下列事件程序:
    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 Customers"
          .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 連線。 例如,如果在不包含需要存取資料的資料庫中撰寫程式碼,您可能必須使用本方法。請注意當使用本方法時,Microsoft 建議您關閉已經開啟但是不再需要的 ADO 連線。例如,您可能想要關閉表單 UnLoad 事件中的 ADO 連線。

下列範例展示如何開啟專屬的 Microsoft Jet 資料庫 ADO 連線,並且將表單連結至連線:
  1. 建立新的空白資料庫。
  2. 從範例資料庫 Northwind.mdb 匯入 [客戶] 表單。
  3. 在「設計」檢視中開啟 [客戶] 表單。
  4. 清除表單的 RecordSource 屬性以取消連結表單。
  5. 將表單的 OnOpen 屬性設定為下列事件程序:
    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 Customers"
          .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. 將下列程式碼新增至表單的 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 資料錄集時,有兩項主要的需求:
  • 資料錄集使用的 ADO 連線,必須使用 ODBC 的 Microsoft OLEDB 提供者。
  • ADO 資料錄集必須是用戶端指標。
下列範例展示如何開啟 ODBC 資料庫的 ADO 連線,並且將表單連結至連線。

注意: 這些步驟假設 ODBC 資料庫包含名為 CUSTOMERS 的資料表 (它的結構與範例資料庫 Northwind.mdb 中的 [客戶] 資料表相同)。此外還假設您已建立名為 MyDSN 的 ODBC DSN (您需要其使用的 ODBC 驅動程式來連接至後端資料庫)。
  1. 開啟範例資料庫 Northwind.mdb。
  2. 在「設計」檢視中開啟 [客戶] 表單。
  3. 清除表單的 RecordSource 屬性以取消連結表單。
  4. 將表單的 OnOpen 屬性設定為下列事件程序:
    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. 將下列程式碼新增至表單的 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 資料錄集時,有兩項主要的需求:

  • 資料錄集使用的 ADO 連線,必須使用 Oracle 的 Microsoft OLEDB 提供者。
  • ADO 資料錄集必須是用戶端指標。
下列範例展示如何開啟 Oracle 資料庫的 ADO 連線,並且將表單連結至連線。

注意: 這些步驟假設 Oracle 資料庫包含名為 CUSTOMERS 的資料表 (它的結構與範例資料庫 Northwind.mdb 中的 [客戶] 資料表相同)。
  1. 開啟範例資料庫 Northwind.mdb。
  2. 在「設計」檢視中開啟 [客戶] 表單。
  3. 清除表單的 RecordSource 屬性以取消連結表單。
  4. 將表單的 OnOpen 屬性設定為下列事件程序:
    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. 將下列程式碼新增至表單的 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 知識庫」中的文件:
281784 Difference Between Connection and AccessConnection Properties
本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。Microsoft 不以暗示或其他方式,提供與這些產品的效能或可靠性有關的保證。

屬性

文章編號: 281998 - 上次校閱: 2004年6月10日 - 版次: 4.1
這篇文章中的資訊適用於:
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
關鍵字:?
kbhowto KB281998
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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