設為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 9341|回復: 8
打印 上一主題 下一主題

[窗體] 【分享】如何將 Microsoft Access 窗體綁定到 ADO 記錄集

[復制鏈接]
跳轉到指定樓層
1#
發(fā)表于 2012-8-30 10:45:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
原文:http://support.microsoft.com/kb/281998/zh-cn

要將 Microsoft Access 窗體綁定到記錄集,您必須設置為有效的數(shù)據(jù)訪問對象 (DAO) 或 ADO記錄集對象的窗體的記錄集屬性。

Recordset 屬性在 Microsoft Access 2000 中, 引入的它使您可以將窗體綁定到 DAO 或 ADO 記錄集 對象。但是,在 Access 2000 中的窗體支持更新,僅當 ADO 連接通過使用 MSDataShape 和 SQL Server OLEDB 提供程序打開。 有關在 Access 2000 中此限制的其他信息,請單擊下面文章編號,以查看 Microsoft 知識庫中相應的文章:
227053

ACC2000: 窗體基于 ADO 記錄集是只讀的 在 Microsoft Access 2002 或更高版本中,您可以創(chuàng)建一個可更新的窗體綁定到 ADO 記錄集使用其他 OLEDB 提供程序。窗體必須滿足幾個常規(guī)要求時它綁定到 ADO 記錄集是可更新窗體。這些常規(guī)的要求如下所示: 1.基本的 ADO 記錄集必須可更新。
2.記錄集必須包含一個或多個唯一索引的如表的主鍵字段。
在 Microsoft Access 2002 或更高版本,您可以創(chuàng)建可更新的窗體綁定到 ADO 記錄集,使用其他 OLEDB 提供商。窗體必須滿足以下幾個常規(guī)要求它綁定到 ADO 記錄集時可以更新該窗體。這些常規(guī)的要求如下:
Microsoft SQL Server 的要求
更新的其他要求因不同的提供程序。本文介紹當您使用的 Microsoft SQL Server、 Jet、 ODBC 和 Oracle OLEDB 提供程序是什么其他要求。
•ADO 記錄集的連接必須使用 Microsoft Access 10.0 OLEDB 提供程序作為其服務提供商。
•ADO 記錄集的連接必須使用 Microsoft SQL Server OLEDB 提供程序作為其數(shù)據(jù)提供程序。
注:Microsoft Access 10.0 OLEDB 提供程序是專為在 Microsoft Access 中使用已編寫一個 OLEDB 服務提供程序。它不設計在 Microsoft Access 之外的應用程序中使用,并在其他應用程序中不受支持。

您在創(chuàng)建 Microsoft Access 中的 ADO 記錄集時您可以的選擇向其作為 ADO 連接將使用記錄集。ADO 代碼可以共享 Microsoft Access 在為當前打開 SQL Server 數(shù)據(jù)庫在 Access 項目 (ADP) 文件 ; 使用 ADO 連接或可以通過編程方式創(chuàng)建一個新的 ADO 連接到不同的 SQL Server 數(shù)據(jù)庫。
共享使用 Microsoft Access 的 ADO 連接
當您創(chuàng)建 ADO 記錄集,Microsoft Access 中的時,可以的選擇哪些 ADO 連接將使用該記錄集。ADO 代碼可以共享 Microsoft Access 使用 Access 項目 (ADP) 文件 ; 中當前打開的 SQL Server 數(shù)據(jù)庫的 ADO 連接或者,您可以以編程方式創(chuàng)建新的 ADO 連接到不同的 SQL Server 數(shù)據(jù)庫。

下面的示例演示如何將窗體綁定到 ADO 記錄集基于 SQL Server 數(shù)據(jù)與 Microsoft Access 共享 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 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.添加、 編輯,或在窗體中刪除記錄。
下面的示例演示如何將窗體綁定到 ADO 記錄集基于與 Microsoft Access 共享一個 ADO 連接的 SQL Server 數(shù)據(jù)。
打開一個單獨的 ADO 連接
請注意將窗體綁定到一個基于 SQL Server 的數(shù)據(jù)的可更新記錄集。

某些時候,您可能需要打開和管理您自己在 ADO 連接到 SQL Server。例如,您將不得不使用這種方法,如果您 Access 項目文件 (.adp) 連接到您的應用程序比另一個 SQL Server 數(shù)據(jù)庫的 Access 數(shù)據(jù)庫 (.mdb) 中編寫代碼。請注意當使用這種方法時,Microsoft 建議您關閉您打開時不再需要的 ADO 連接。例如,您可能想要關閉窗體的 UnLoad 事件中 ADO 連接。1.打開示例數(shù)據(jù)庫 Northwind.mdb。
2.在設計視圖中打開客戶窗體。
3.清除窗體,以取消綁定窗體的 記錄源 屬性。
4.Set the OnOpen property of the form to the following event procedure:

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.將下面的代碼添加到窗體的卸載事件:

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.添加、 編輯,或在窗體中刪除記錄。
下面的示例演示如何打開自己 ADO 連接到 Microsoft SQL Server 數(shù)據(jù)庫以及如何將窗體綁定到它:
Microsoft Jet 的要求
請注意將窗體綁定到一個基于 SQL Server 的數(shù)據(jù)的可更新記錄集。

即使就可以將窗體綁定到 ADO 記錄集,使用 Jet 數(shù)據(jù)庫中的數(shù)據(jù),Microsoft 建議您改為使用 DAO。DAO 高度優(yōu)化的 Jet 和通常比 ADO 與 Jet 數(shù)據(jù)庫一起使用時更快地執(zhí)行。•也可以在 Microsoft Jet 4.0 OLEDB 數(shù)據(jù)提供程序 和 記錄集必須是服務器端游標記錄集的 ActiveConnection 屬性必須使用 Microsoft Access 10.0 OLEDB 的服務提供商。

-或者-
•僅 Microsoft Jet 4.0 OLEDB 數(shù)據(jù)提供程序 和 記錄集必須在客戶端游標,必須使用記錄集的 ActiveConnection 屬性。
當您將窗體綁定到 ADO 記錄集使用 Microsoft Jet 數(shù)據(jù)時,有兩種替代方法:
共享使用 Microsoft Access 的 ADO 連接
類似于本文內上文中的"Microsoft SQL Server"部分,您可以的選擇哪些使用 Jet 數(shù)據(jù)庫時將通過記錄集使用 ADO 連接。ADO 代碼可以共享 Microsoft Access 將使用 Jet 數(shù)據(jù)庫文件 (.mdb) 當前打開的 ADO 連接,或者您可以以編程方式創(chuàng)建新的 ADO 連接到單獨的 Jet 數(shù)據(jù)庫文件。1.打開示例數(shù)據(jù)庫 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 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 數(shù)據(jù)。
打開一個單獨的 ADO 連接
請注意將窗體綁定到一個正在使用 Jet 數(shù)據(jù)的可更新記錄集。

某些時候,您可能需要打開和管理您自己到 Jet 數(shù)據(jù)庫的 ADO 連接。例如,您將不得不使用這種方法,如果您正在編寫您的代碼中包含您需要訪問的數(shù)據(jù)的數(shù)據(jù)庫不同的數(shù)據(jù)庫。請注意當使用這種方法時,Microsoft 建議您關閉您打開時不再需要的 ADO 連接。例如,您可能想要關閉窗體的 UnLoad 事件中 ADO 連接。1.創(chuàng)建新的空白數(shù)據(jù)庫。
2.該示例從導入客戶窗體數(shù)據(jù)庫 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 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.將下面的代碼添加到窗體的卸載事件:

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.添加、 編輯,或在窗體中刪除記錄。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享分享 分享淘帖 訂閱訂閱
2#
 樓主| 發(fā)表于 2012-8-30 10:45:39 | 只看該作者
下面的示例演示如何打開自己 ADO 連接到 Microsoft Jet 數(shù)據(jù)庫以及如何將窗體綁定到它:
ODBC 的要求
請注意將窗體綁定到一個正在使用 Jet 數(shù)據(jù)的可更新記錄集。•使用記錄集的 ADO 連接必須使用 ODBC Microsoft OLEDB 提供程序。
•ADO 記錄集必須在客戶端游標。
當您將窗體綁定到 ADO 記錄集是使用 ODBC 數(shù)據(jù)庫中的數(shù)據(jù)時,有兩項主要要求:

注:這些步驟假定該 ODBC 數(shù)據(jù)庫中包含名為客戶客戶表,在示例數(shù)據(jù)庫 Northwind.mdb 結構相同的表。它還假定您已經創(chuàng)建了名為 MyDSN 使用需要連接到后端數(shù)據(jù)庫的 ODBC 驅動程序的一個 ODBC DSN。 1.打開示例數(shù)據(jù)庫 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=saWD=;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.將下面的代碼添加到窗體的卸載事件:

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 數(shù)據(jù)的。
針對 Oracle 的要求
請注意將窗體綁定到一個基于 ODBC 數(shù)據(jù)的可更新記錄集。•使用記錄集的 ADO 連接必須使用 Oracle Microsoft OLEDB 提供程序。
•ADO 記錄集必須在客戶端游標。
當您將窗體綁定到 ADO 記錄集是使用 Oracle 數(shù)據(jù)庫中的數(shù)據(jù)時,有兩項主要要求:

注:這些步驟假定 Oracle 數(shù)據(jù)庫中包含名為客戶客戶表,在示例數(shù)據(jù)庫 Northwind.mdb 結構相同的表。 1.打開示例數(shù)據(jù)庫 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("assword").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.將下面的代碼添加到窗體的卸載事件:

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 數(shù)據(jù)。

3#
發(fā)表于 2012-8-30 11:19:05 | 只看該作者
{:soso_e142:}
4#
發(fā)表于 2012-8-30 18:35:34 | 只看該作者
Andy應該做個實例傳上來的,{:soso_e113:}新手怕是看不懂,又或者沒有那么大的耐性去看代碼……
5#
發(fā)表于 2012-9-1 09:26:22 | 只看該作者
roych 發(fā)表于 2012-8-30 18:35
Andy應該做個實例傳上來的,新手怕是看不懂,又或者沒有那么大的耐性去看代碼……

萬分支持!
6#
發(fā)表于 2012-12-11 20:26:41 | 只看該作者
有點頭暈
7#
發(fā)表于 2013-12-12 16:50:31 | 只看該作者
感謝,感謝,這是一個好帖
8#
發(fā)表于 2015-8-4 21:37:27 | 只看該作者
是的,新手看到那一大堆代碼,絕決是一個是 超暈的{:soso_e120:}
9#
發(fā)表于 2016-1-12 00:35:41 | 只看該作者
學習了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 04:39 , Processed in 0.109788 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表