Liên k?t m?t h?nh th?c truy c?p Microsoft v?i m?t recordset, b?n ph?i
đ?t các
RecordSet tài s?n c?a các h?nh th?c h?p l? d? li?u truy c?p các đ?i tư?ng (DAO) ho?c ADO
RecordSet đ?i tư?ng.
Các
RecordSet b?t đ?ng s?n đ? đư?c gi?i thi?u trong Microsoft Access 2000, và nó cho phép
b?n đ? ràng bu?c các h?nh th?c DAO ho?c ADO
RecordSet các đ?i tư?ng. Tuy nhiên, h?nh th?c trong Access 2000 h? tr? updateability ch?
N?u k?t n?i ADO đư?c m? ra b?ng cách s? d?ng MSDataShape và SQL Server OLEDB
các nhà cung c?p. Đ? có thêm thông tin v? vi?c này
gi?i h?n trong Access 2000, b?m vào s? bài vi?t dư?i đây đ? xem bài vi?t
trong Microsoft Knowledge Base:
227053
(http://support.microsoft.com/kb/227053/EN-US/
)
ACC2000: Các h?nh th?c d?a trên ADO Recordsets là ch?-đ?c
Trong Microsoft Access 2002 ho?c sau này, b?n có th? t?o
m?t h?nh th?c updateable là ràng bu?c đ? m?t recordset ADO có s? d?ng OLEDB
các nhà cung c?p. M?t h?nh th?c ph?i đáp ?ng m?t s? nh?ng yêu c?u chung cho các h?nh th?c đư?c
updateable khi nó là ràng bu?c đ? m?t recordset ADO. Nh?ng yêu c?u chung
là:
- ADO recordset n?m bên dư?i ph?i updateable.
- Recordset ph?i ch?a m?t ho?c nhi?u các l?nh v?c đư?c
duy nh?t ch? m?c, ch?ng h?n như m?t b?ng khóa chính.
Các yêu c?u khác cho updateability khác nhau gi?a khác nhau
các nhà cung c?p. Bài vi?t này mô t? nh?ng g? các yêu c?u khác là khi b?n s? d?ng
các nhà cung c?p Microsoft SQL Server, máy bay ph?n l?c, ODBC và Oracle OLEDB.
Yêu c?u đ?i v?i Microsoft SQL Server
Không có hai yêu c?u chính đ? h? tr? updateability khi
b?n liên k?t m?t h?nh th?c v?i m?t recordset ADO b?ng cách s? d?ng Microsoft SQL Server
d? li?u:
- ADO recordset k?t n?i ph?i s? d?ng Microsoft
Truy c?p 10,0 OLEDB nhà cung c?p c?a nó là nhà cung c?p d?ch v?.
- ADO recordset k?t n?i ph?i s? d?ng Microsoft SQL
Máy ch? OLEDB nhà cung c?p như là nhà cung c?p d? li?u c?a nó.
CHÚ Ý: Các nhà cung c?p c?a Microsoft Access 10,0 OLEDB là m?t d?ch v? OLEDB
nhà cung c?p đư?c vi?t đ?c bi?t cho s? d?ng trong Microsoft Access. Nó không
đư?c thi?t k? đ? đư?c s? d?ng trong các ?ng d?ng khác v?i Microsoft Access, và nó không ph?i là
đư?c h? tr? trong các ?ng d?ng khác.
Khi b?n t?o ADO recordsets
trong Microsoft Access, b?n có m?t s? l?a ch?n như mà ADO k?t n?i s?
đư?c s? d?ng b?i recordset. ADO m? c?a b?n có th? chia s? k?t n?i ADO mà
Microsoft Access b?ng cách s? d?ng cơ s? d? li?u SQL Server đang m? trong m?t
Truy nh?p T?p d? án (ADP); ho?c b?n có th? l?p tr?nh t?o ra m?t m?i ADO
k?t n?i đ?n m?t cơ s? d? li?u SQL Server khác nhau.
Chia s? k?t n?i ADO đư?c s? d?ng b?i Microsoft Access
N?u b?n đang s? d?ng m?t truy c?p T?p d? án (.adp) k?t n?i v?i m?t
Microsoft SQL Server cơ s? d? li?u, nó có th? cho ADO m? c?a b?n đ? chia s? các
ADO k?t n?i truy c?p Microsoft đang s? d?ng. K?t n?i này đư?c ti?p xúc b?i
các
CurrentProject.AccessConnection b?t đ?ng s?n.
Ví d? sau đây ch?ng t? làm th? nào đ?
liên k?t m?t h?nh th?c v?i m?t recordset ADO d?a trên d? li?u SQL Server c? ph?n m?t
ADO k?t n?i v?i Microsoft Access.
- M? d? án m?u NorthwindCS.adp.
- M? các h?nh th?c khách hàng theo quan đi?m thi?t k?.
- R? ràng các RecordSource b?t đ?ng s?n c?a các h?nh th?c đ? unbind m?u.
- Đ?t các OnOpen tài s?n c?a các h?nh th?c đ? th? t?c s? ki?n sau đây:
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
- Lưu và sau đó đóng các h?nh th?c.
- M? các h?nh th?c khách hàng trong d?ng xem.
- Thêm, ch?nh s?a ho?c xóa m?t h? sơ theo h?nh th?c.
Lưu ? r?ng các h?nh th?c là ràng bu?c đ? m?t recordset updateable là
d?a trên d? li?u SQL Server.
M? m?t k?t n?i riêng bi?t ADO
T?i m?t s? đi?m, b?n có th? ph?i m? và qu?n l? c?a riêng b?n ADO
k?t n?i đ?n máy ch? SQL. Ví d?, b?n s? ph?i s? d?ng cách ti?p c?n này n?u
b?n đ? vi?t m? c?a b?n trong cơ s? d? li?u Access (.mdb) ho?c m?t d? án truy c?p
t?p tin (.adp) đ? đư?c k?t n?i v?i m?t cơ s? d? li?u SQL Server khác nhau hơn c?a b?n
?ng d?ng. Lưu ? r?ng khi b?n s? d?ng cách ti?p c?n này, Microsoft khuy?n cáo r?ng
b?n đóng k?t n?i ADO b?n m? ra khi nó không c?n là c?n thi?t. Cho
Ví d?, b?n có th? mu?n đóng k?t n?i ADO trong s? ki?n này l?y c?a các
h?nh th?c.
Ví d? sau đây ch?ng t? làm th? nào đ? m? ADO riêng c?a b?n
k?t n?i đ?n m?t cơ s? d? li?u Microsoft SQL Server và liên k?t m?t h?nh th?c v?i nó:
- M? cơ s? d? li?u m?u Northwind.mdb.
- M? các h?nh th?c khách hàng theo quan đi?m thi?t k?.
- R? ràng các RecordSource b?t đ?ng s?n c?a các h?nh th?c đ? unbind m?u.
- Đ?t các OnOpen tài s?n c?a các h?nh th?c đ? th? t?c s? ki?n sau đây:
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
- Thêm m? sau s? ki?n này l?y c?a các h?nh th?c:
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
- Lưu bi?u m?u, và sau đó đóng nó.
- M? các h?nh th?c khách hàng trong d?ng xem.
- Thêm, ch?nh s?a ho?c xóa m?t h? sơ theo h?nh th?c.
Lưu ? r?ng các h?nh th?c là ràng bu?c đ? m?t recordset updateable là
d?a trên d? li?u SQL Server.
Yêu c?u đ?i v?i Microsoft Jet
M?c dù nó có th? liên k?t m?t h?nh th?c v?i m?t recordset ADO
đó b?ng cách s? d?ng d? li?u t? cơ s? d? li?u máy bay ph?n l?c, Microsoft khuy?n cáo r?ng b?n s? d?ng DAO
Thay vào đó. Đ?O cao t?i ưu hóa cho máy bay ph?n l?c và thư?ng th?c hi?n nhanh hơn ADO
khi đư?c s? d?ng v?i m?t cơ s? d? li?u máy bay ph?n l?c.
Khi b?n liên k?t m?t h?nh th?c v?i m?t ADO
RecordSet s? d?ng d? li?u Microsoft máy bay ph?n l?c, có hai l?a ch?n:
- Recordset ActiveConnection b?t đ?ng s?n ph?i s? d?ng d?ch v? Microsoft Access 10,0 OLEDB
nhà cung c?p, c?ng như các nhà cung c?p c?a Microsoft ph?n l?c 4,0 OLEDB Data và recordset ph?i là m?t con ch?y phía máy ch?.
- hay - - Recordset ActiveConnection b?t đ?ng s?n ph?i s? d?ng ch? Microsoft Jet 4,0 OLEDB d? li?u nhà cung c?p và recordset ph?i là m?t con tr? phía khách hàng.
Tương t? như ph?n "Microsoft sql Server" trư?c đó trong này
bài vi?t, b?n có m?t s? l?a ch?n như ADO mà k?t n?i s? đư?c s? d?ng b?i các
RecordSet khi s? d?ng m?t cơ s? d? li?u máy bay ph?n l?c. ADO m? c?a b?n có th? chia s? k?t n?i ADO
ti?p c?n Microsoft đang s? d?ng cho máy bay ph?n l?c cơ s? d? li?u file (.mdb) đang m?,
ho?c b?n có th? l?p tr?nh t?o m?t k?t n?i ADO m?i đ?n m?t máy bay ph?n l?c riêng bi?t
cơ s? d? li?u t?p tin.
Chia s? k?t n?i ADO đư?c s? d?ng b?i Microsoft Access
N?u b?n đang vi?t m? trong cơ s? d? li?u Microsoft Access cùng
(.mdb) có ch?a d? li?u c?a b?n recordset c?n, nó có th? cho
ADO m? s? c?a b?n đ? chia s? k?t n?i ADO truy c?p Microsoft đang s? d?ng. Đi?u này
k?t n?i đư?c ti?p xúc b?i các
CurrentProject.AccessConnection b?t đ?ng s?n. Ví d? sau đây ch?ng t? làm th? nào đ? ràng bu?c m?t h?nh th?c
đ? m?t ADO recordset trong cơ s? d? li?u máy bay ph?n l?c b?ng cách chia s? k?t n?i ADO mà
Microsoft Access hi?n nay b?ng cách s? d?ng:
- M? cơ s? d? li?u m?u Northwind.mdb.
- M? các h?nh th?c khách hàng theo quan đi?m thi?t k?.
- R? ràng các RecordSource b?t đ?ng s?n c?a các h?nh th?c đ? unbind m?u.
- Đ?t các OnOpen tài s?n c?a các h?nh th?c đ? th? t?c s? ki?n sau đây:
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
- Lưu bi?u m?u, và sau đó đóng nó.
- M? các h?nh th?c khách hàng trong d?ng xem.
- Thêm, ch?nh s?a ho?c xóa m?t h? sơ theo h?nh th?c.
Lưu ? r?ng các h?nh th?c là ràng bu?c đ? m?t recordset updateable là
s? d?ng d? li?u máy bay ph?n l?c.
M? m?t k?t n?i riêng bi?t ADO
T?i m?t s? đi?m, b?n có th? ph?i m? và qu?n l? c?a riêng b?n ADO
k?t n?i đ?n m?t cơ s? d? li?u máy bay ph?n l?c. Ví d?, b?n s? ph?i s? d?ng cách ti?p c?n này
N?u b?n đang vi?t m? c?a b?n trong cơ s? d? li?u đó là riêng bi?t t? cơ s? d? li?u
có ch?a d? li?u mà b?n c?n đ? truy c?p. Lưu ? r?ng khi b?n s? d?ng đi?u này
cách ti?p c?n, Microsoft khuy?n cáo r?ng b?n đóng k?t n?i ADO mà b?n
m? ra khi nó không c?n là c?n thi?t. Ví d?, b?n có th? mu?n đóng ADO
k?t n?i trong s? ki?n này l?y c?a các h?nh th?c.
Ví d? sau
ch?ng t? làm th? nào đ? m? k?t n?i ADO riêng c?a b?n đ?n m?t cơ s? d? li?u Microsoft Jet
và liên k?t m?t h?nh th?c v?i nó:
- T?o m?t cơ s? d? li?u tr?ng m?i.
- Chuy?n nh?p các h?nh th?c khách hàng t? cơ s? d? li?u m?u
Northwind.mdb.
- M? các h?nh th?c khách hàng theo quan đi?m thi?t k?.
- R? ràng các RecordSource b?t đ?ng s?n c?a các h?nh th?c đ? unbind h?nh th?c.
- Đ?t các OnOpen tài s?n c?a các h?nh th?c đ? th? t?c s? ki?n sau đây:
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
- Thêm m? sau s? ki?n này l?y c?a các h?nh th?c:
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
- Lưu bi?u m?u, và sau đó đóng nó.
- M? các h?nh th?c khách hàng trong d?ng xem.
- Thêm, ch?nh s?a ho?c xóa m?t h? sơ theo h?nh th?c.
Lưu ? r?ng các h?nh th?c là ràng bu?c đ? m?t recordset updateable là
s? d?ng d? li?u máy bay ph?n l?c.
Yêu c?u đ?i v?i ODBC
Khi b?n liên k?t m?t h?nh th?c v?i m?t recordset ADO b?ng cách s? d?ng d? li?u t?
m?t cơ s? d? li?u ODBC, không có hai yêu c?u chính:
- ADO k?t n?i đư?c s? d?ng b?i recordset ph?i s? d?ng
các nhà cung c?p c?a Microsoft OLEDB cho ODBC.
- ADO recordset ph?i là m?t con tr? phía khách hàng.
Ví d? sau đây ch?ng t? làm th? nào đ? m? m?t ADO
k?t n?i đ?n m?t cơ s? d? li?u ODBC và liên k?t m?t h?nh th?c v?i nó.
CHÚ Ý: Các bư?c này gi? đ?nh r?ng cơ s? d? li?u ODBC có ch?a m?t b?ng tên
Khách hàng là gi?ng h?t nhau trong c?u trúc đ? bàn khách hàng m?u
cơ s? d? li?u Northwind.mdb. Nó c?ng gi? đ?nh b?n đ? t?o ra m?t DSN ODBC đ?t tên
MyDSN s? d?ng tr?nh đi?u khi?n ODBC mà b?n c?n đ? k?t n?i v?i back-end
cơ s? d? li?u.
- M? cơ s? d? li?u m?u Northwind.mdb.
- M? các h?nh th?c khách hàng theo quan đi?m thi?t k?.
- R? ràng các RecordSource b?t đ?ng s?n c?a các h?nh th?c đ? unbind h?nh th?c.
- Đ?t các OnOpen tài s?n c?a các h?nh th?c đ? th? t?c s? ki?n sau đây:
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
- Thêm m? sau s? ki?n này l?y c?a các h?nh th?c:
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
- Lưu bi?u m?u, và sau đó đóng nó.
- M? các h?nh th?c khách hàng trong d?ng xem.
- Thêm, ch?nh s?a ho?c xóa m?t h? sơ theo h?nh th?c.
Lưu ? r?ng các h?nh th?c là ràng bu?c đ? m?t recordset updateable là
d?a trên d? li?u ODBC.
Yêu c?u đ?i v?i Oracle
Khi b?n liên k?t m?t h?nh th?c v?i m?t recordset ADO b?ng cách s? d?ng d? li?u t?
m?t cơ s? d? li?u Oracle, không có hai yêu c?u chính:
- ADO k?t n?i đư?c s? d?ng b?i recordset ph?i s? d?ng
các nhà cung c?p c?a Microsoft OLEDB cho Oracle.
- ADO Recordset ph?i là m?t con tr? phía khách hàng.
Ví d? sau đây ch?ng t? làm th? nào đ? m? m?t ADO
k?t n?i đ?n m?t cơ s? d? li?u Oracle và liên k?t m?t h?nh th?c v?i nó.
CHÚ Ý: Các bư?c này gi? đ?nh r?ng cơ s? d? li?u Oracle có ch?a m?t b?ng
tên khách hàng là gi?ng h?t nhau trong c?u trúc b?ng khách hàng ? các
m?u cơ s? d? li?u Northwind.mdb.
- M? cơ s? d? li?u m?u Northwind.mdb.
- M? các h?nh th?c khách hàng theo quan đi?m thi?t k?.
- R? ràng các RecordSource b?t đ?ng s?n c?a các h?nh th?c đ? unbind m?u.
- Đ?t các OnOpen tài s?n c?a các h?nh th?c đ? th? t?c s? ki?n sau đây:
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
- Thêm m? sau s? ki?n này l?y c?a các h?nh th?c:
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
- Lưu bi?u m?u, và sau đó đóng nó.
- M? các h?nh th?c khách hàng trong d?ng xem.
- Thêm, ch?nh s?a ho?c xóa m?t h? sơ theo h?nh th?c.
Lưu ? r?ng các h?nh th?c là ràng bu?c đ? m?t recordset updateable là
d?a trên d? li?u Oracle.
Đ? bi?t thêm chi ti?t, b?m vào bài vi?t sau đây
s? đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
281784
(http://support.microsoft.com/kb/281784/
)
S? khác bi?t gi?a
K?t n?i và AccessConnection thu?c tính
Các s?n ph?m c?a bên th? ba có
th?o lu?n trong bài vi?t này đư?c s?n xu?t b?i các công ty đ?c l?p
Microsoft. Microsoft đưa ra không có b?o hành, ng? ? hay cách khác, liên quan đ?n các
hi?u su?t ho?c đ? tin c?y c?a các s?n ph?m này.