Chuyên đề HongViet nói:
Tôi muốn dữ liệu của mình được lưu tại access, VD TableKhHang( [TT], [MaKH], [DChi], [TKhoan ] .. .) từ form của Excel thì macro phải trải qua bao nhiêu giai đoạn vậy các vị?
To: HongViet,
Để trả lời cho câu hỏi của bạn, tôi xin dùng kỹ thuật ADO để connect với Database là Access. Các bước có thể tóm tắt các bước như sau:
1. Tạo một biến Public, connection
2. Khi bạn mở file excel thì bạn connect với Database. Sau đó đóng connection này lại. Bạn sẽ không giải phóng biến này (i.e set bConnection=nothing) trước khi bạn kết thúc thao tác (thông thường bạn giải phóng biến này khi đóng file Excel lại)
3. Mỗi khi muốn thao tác (Update, Edit, Delete,...) với các bảng của Database thì bạn lại connect với database qua biến connection, thực hiện thao tác và rồi đóng connection này lại.
4. Giải phóng biến connection.
Theo tôi đó là các bước căn bản. Các bước căn bản trên chúng ta còn có thể phân tích thành các bước nhỏ tùy thuộc vào ứng dụng của bạn.
Ví dụ trước khi bạn connect với database bạn phải kiểm tra đường dẫn, kiểm tra sự tồn tại của database. Nếu dùng ADO chúng ta có thể thao tác với hầu hết các cơ sở dữ liệu khác như: SQL Server, Oracle, Foxpro, Access, Excel, File text,...
Sau khi kiểm tra sự tồn tại của database, chúng ta sẽ connect với chúng. Khi connect với chúng, tùy thuộc vào lọai database mà chúng ta phải dùng các chuổi connection khác nhau. Sau đây là một ví dụ connect với database.
Public Sub ConnectToDatabase()
Const msMODULE As String = "MainModule" 'Module name
Const sSOURCE As String = "ConnectToDatabase" ' Sub name
Dim sConnect As String
Dim sPath As String
Dim lAttempt As Long
'Dim rsData As ADODB.Recordset, sSQL As String
On Error GoTo ErrorHandler
'Get the database path (same as Active Workbook)
sPath = ActiveWorkbook.Path
If Right$(sPath, 1) <> "\" Then sPath = sPath & "\"
sPath = sPath & DatabasePath
'Check the exist of the file
If Not FileExists(sPath) Then
bConnected = False
MsgBox "The file " & sPath & " is not exist! Pls check!", vbOKOnly, "Notice"
GoTo ErrorExit
End If
'Check if the connection has creased then exit sub
If bConnected Then
MsgBox "The connection has creased!", vbOKOnly, "Notice"
GoTo ErrorExit
End If
Set gcnAccess = New ADODB.Connection
With gcnAccess
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Jet OLEDB

atabase Password") = "passwordcuaban"
.Mode = adModeReadWrite
.CommandTimeout = 100
.Open "Data Source=" & sPath
End With
bConnected = True
'Close the connection to enable connection pooling
gcnAccess.Close
ErrorExit:
Application.StatusBar = False
Exit Sub
ErrorHandler:
'We will try to make the connection 3 times before bailing out
If lAttempt < 3 And gcnAccess.Errors.Count > 0 Then
If gcnAccess.Errors(0).NativeError = 17 Then
Application.StatusBar = "Retrying connection..."
lAttempt = lAttempt + 1
Resume
End If
End If
If bCentralErrorHandler(msMODULE, sSOURCE, , False) Then
Stop
Resume
Else
Resume ErrorExit
End If
End Sub