ongke0711 > 29-04-17, 01:56 AM
maidinhdan > 29-04-17, 02:42 AM
.Fields.Append "SoHD", adVarChar, 10, adFldMayBeNull '->Bi loi kieu du lieu
Fields.Append Name, Type, DefinedSize, Attrib, FieldValue
MTNQ > 29-04-17, 11:48 AM
(29-04-17, 01:56 AM)ongke0711 Đã viết: Chào các bạn,
Tôi đang thiết kế 1 form và muốn tạo In-memory ADO Recordset. Việc tạo ADO recordset và thêm từng Field vào rst này bằng câu lệnh như: ".Fields.Append "MSNV", adInteger, , adFldKeyColumn" thì làm được rồi Bây giờ tôi cần tự động lấy tên Field và DataType của Table nguồn nào đó sau đó tự động Append hàng loạt tên Field này vô ADO Rst luôn (khỏi phải ngồi viết từng dòng “.Fields.Append…” cho từng Field. (Hình minh họa bên dưới)
Private Sub cmdTaoADORst_Click()
Dim objRecordset As Object
Dim rstHDLD_Luu As Object
Dim strSQL As String
Set objRecordset = CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM tblHDLD_Luu"
Set rstHDLD_Luu = OpenADORecordset(strSQL)
Set objRecordset = CreateRstADO(rstHDLD_Luu)
With objRecordset
.AddNew
.Fields(0) = 0
.Fields(1) = 99
.Fields(2) = Date
.Fields(3) = Date + 5
.Fields(4) = Date + 365
.Fields(5) = 1
.Fields(6) = 1
'.Fields(7) = "HD2017-001"
.Update
End With
Set Me.Recordset = objRecordset
rstHDLD_Luu.Close
Set rstHDLD_Luu = Nothing
End Sub
Public Function OpenADORecordset(strSQL As String) As Object
Dim cnn As Object
Dim rst As Object
On Error GoTo ErrorHandler
Set cnn = CreateObject("ADODB.Connection")
Set cnn = CurrentProject.Connection
Set rst = CreateObject("ADODB.Recordset")
With rst
.Source = strSQL
.ActiveConnection = cnn
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.CursorLocation = adUseClient
.Open
End With
Set OpenADORecordset = rst
Exit_ErrorHandler:
Set rst = Nothing
Set cnn = Nothing
Exit Function
ErrorHandler:
MsgBox "Error: " & Err.Number & Chr(13) & Err.Description, , "Error: OpenADORecordset"
Resume Exit_ErrorHandler
End Function
Function CreateRstADO(rstADO_Source As Object) As Object
Dim rstADO As Object
Dim fld As Object
On Error GoTo ErrorHandler
Set rstADO = CreateObject("ADODB.Recordset")
With rstADO
For Each fld In rstADO_Source.Fields
.Fields.Append fld.Name, fld.Type, fld.DefinedSize, fld.Attributes
Next
.CursorType = adOpenKeyset
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open
End With
Set CreateRstADO = rstADO
Exit_ErrorHandler:
Set rstADO = Nothing
Exit Function
ErrorHandler:
MsgBox "Error: " & Err.Number & Chr(13) & Err.Description, , "Error: CreateRstADO"
Resume Exit_ErrorHandler
End Function
ongke0711 > 29-04-17, 08:26 PM