Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

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

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

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

Recordset 屬性在 Microsoft Access 2000 中, 引入的它使您可以將窗體綁定到 DAO 或 ADO 記錄集 對(duì)象。但是,在 Access 2000 中的窗體支持更新,僅當(dāng) ADO 連接通過(guò)使用 MSDataShape 和 SQL Server OLEDB 提供程序打開(kāi)。 有關(guān)在 Access 2000 中此限制的其他信息,請(qǐng)單擊下面文章編號(hào),以查看 Microsoft 知識(shí)庫(kù)中相應(yīng)的文章:
227053

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

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

下面的示例演示如何將窗體綁定到 ADO 記錄集基于 SQL Server 數(shù)據(jù)與 Microsoft Access 共享 ADO 連接。 1.打開(kāi)示例項(xiàng)目 NorthwindCS.adp。
2.在設(shè)計(jì)視圖中打開(kāi)客戶(hù)窗體。
3.清除窗體,以取消綁定窗體的 記錄源 屬性。
4.將窗體的 打開(kāi) 屬性設(shè)置為下列事件過(guò)程:

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.保存并關(guān)閉該窗體。
6.在窗體視圖中打開(kāi)客戶(hù)窗體。
7.添加、 編輯,或在窗體中刪除記錄。
下面的示例演示如何將窗體綁定到 ADO 記錄集基于與 Microsoft Access 共享一個(gè) ADO 連接的 SQL Server 數(shù)據(jù)。
打開(kāi)一個(gè)單獨(dú)的 ADO 連接
請(qǐng)注意將窗體綁定到一個(gè)基于 SQL Server 的數(shù)據(jù)的可更新記錄集。

某些時(shí)候,您可能需要打開(kāi)和管理您自己在 ADO 連接到 SQL Server。例如,您將不得不使用這種方法,如果您 Access 項(xiàng)目文件 (.adp) 連接到您的應(yīng)用程序比另一個(gè) SQL Server 數(shù)據(jù)庫(kù)的 Access 數(shù)據(jù)庫(kù) (.mdb) 中編寫(xiě)代碼。請(qǐng)注意當(dāng)使用這種方法時(shí),Microsoft 建議您關(guān)閉您打開(kāi)時(shí)不再需要的 ADO 連接。例如,您可能想要關(guān)閉窗體的 UnLoad 事件中 ADO 連接。1.打開(kāi)示例數(shù)據(jù)庫(kù) Northwind.mdb。
2.在設(shè)計(jì)視圖中打開(kāi)客戶(hù)窗體。
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.將該的表單保存,然后將其關(guān)閉。
7.在窗體視圖中打開(kāi)客戶(hù)窗體。
8.添加、 編輯,或在窗體中刪除記錄。
下面的示例演示如何打開(kāi)自己 ADO 連接到 Microsoft SQL Server 數(shù)據(jù)庫(kù)以及如何將窗體綁定到它:
Microsoft Jet 的要求
請(qǐng)注意將窗體綁定到一個(gè)基于 SQL Server 的數(shù)據(jù)的可更新記錄集。

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

-或者-
•僅 Microsoft Jet 4.0 OLEDB 數(shù)據(jù)提供程序 和 記錄集必須在客戶(hù)端游標(biāo),必須使用記錄集的 ActiveConnection 屬性。
當(dāng)您將窗體綁定到 ADO 記錄集使用 Microsoft Jet 數(shù)據(jù)時(shí),有兩種替代方法:
共享使用 Microsoft Access 的 ADO 連接
類(lèi)似于本文內(nèi)上文中的"Microsoft SQL Server"部分,您可以的選擇哪些使用 Jet 數(shù)據(jù)庫(kù)時(shí)將通過(guò)記錄集使用 ADO 連接。ADO 代碼可以共享 Microsoft Access 將使用 Jet 數(shù)據(jù)庫(kù)文件 (.mdb) 當(dāng)前打開(kāi)的 ADO 連接,或者您可以以編程方式創(chuàng)建新的 ADO 連接到單獨(dú)的 Jet 數(shù)據(jù)庫(kù)文件。1.打開(kāi)示例數(shù)據(jù)庫(kù) Northwind.mdb。
2.在設(shè)計(jì)視圖中打開(kāi)客戶(hù)窗體。
3.清除窗體,以取消綁定窗體的 記錄源 屬性。
4.將窗體的 打開(kāi) 屬性設(shè)置為下列事件過(guò)程:

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.將該的表單保存,然后將其關(guān)閉。
6.在窗體視圖中打開(kāi)客戶(hù)窗體。
7.添加、 編輯,或在窗體中刪除記錄。
請(qǐng)注意該窗體綁定到一個(gè)可更新的記錄集,使用 Jet 數(shù)據(jù)。
打開(kāi)一個(gè)單獨(dú)的 ADO 連接
請(qǐng)注意將窗體綁定到一個(gè)正在使用 Jet 數(shù)據(jù)的可更新記錄集。

某些時(shí)候,您可能需要打開(kāi)和管理您自己到 Jet 數(shù)據(jù)庫(kù)的 ADO 連接。例如,您將不得不使用這種方法,如果您正在編寫(xiě)您的代碼中包含您需要訪問(wèn)的數(shù)據(jù)的數(shù)據(jù)庫(kù)不同的數(shù)據(jù)庫(kù)。請(qǐng)注意當(dāng)使用這種方法時(shí),Microsoft 建議您關(guān)閉您打開(kāi)時(shí)不再需要的 ADO 連接。例如,您可能想要關(guān)閉窗體的 UnLoad 事件中 ADO 連接。1.創(chuàng)建新的空白數(shù)據(jù)庫(kù)。
2.該示例從導(dǎo)入客戶(hù)窗體數(shù)據(jù)庫(kù) Northwind.mdb。
3.在設(shè)計(jì)視圖中打開(kāi)客戶(hù)窗體。
4.清除窗體,以取消綁定窗體的 記錄源 屬性。
5.將窗體的 打開(kāi) 屬性設(shè)置為下列事件過(guò)程:

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

注:這些步驟假定該 ODBC 數(shù)據(jù)庫(kù)中包含名為客戶(hù)客戶(hù)表,在示例數(shù)據(jù)庫(kù) Northwind.mdb 結(jié)構(gòu)相同的表。它還假定您已經(jīng)創(chuàng)建了名為 MyDSN 使用需要連接到后端數(shù)據(jù)庫(kù)的 ODBC 驅(qū)動(dòng)程序的一個(gè) ODBC DSN。 1.打開(kāi)示例數(shù)據(jù)庫(kù) Northwind.mdb。
2.在設(shè)計(jì)視圖中打開(kāi)客戶(hù)窗體。
3.清除窗體,以取消綁定窗體的 記錄源 屬性。
4.將窗體的 打開(kāi) 屬性設(shè)置為下列事件過(guò)程:

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.將該的表單保存,然后將其關(guān)閉。
7.在窗體視圖中打開(kāi)客戶(hù)窗體。
8.添加、 編輯,或在窗體中刪除記錄。
請(qǐng)注意該窗體綁定到一個(gè)可更新的記錄集基于 ODBC 數(shù)據(jù)的。
針對(duì) Oracle 的要求
請(qǐng)注意將窗體綁定到一個(gè)基于 ODBC 數(shù)據(jù)的可更新記錄集。•使用記錄集的 ADO 連接必須使用 Oracle Microsoft OLEDB 提供程序。
•ADO 記錄集必須在客戶(hù)端游標(biāo)。
當(dāng)您將窗體綁定到 ADO 記錄集是使用 Oracle 數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),有兩項(xiàng)主要要求:

注:這些步驟假定 Oracle 數(shù)據(jù)庫(kù)中包含名為客戶(hù)客戶(hù)表,在示例數(shù)據(jù)庫(kù) Northwind.mdb 結(jié)構(gòu)相同的表。 1.打開(kāi)示例數(shù)據(jù)庫(kù) Northwind.mdb。
2.在設(shè)計(jì)視圖中打開(kāi)客戶(hù)窗體。
3.清除窗體,以取消綁定窗體的 記錄源 屬性。
4.將窗體的 打開(kāi) 屬性設(shè)置為下列事件過(guò)程:

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.將該的表單保存,然后將其關(guān)閉。
7.在窗體視圖中打開(kāi)客戶(hù)窗體。
8.添加、 編輯,或在窗體中刪除記錄。
請(qǐng)注意該窗體綁定到一個(gè)可更新的記錄集所基于的 Oracle 數(shù)據(jù)。

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

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

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 04:58 , Processed in 0.105010 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表