maidinhdan > 09-03-20, 04:37 PM
HamThemADOBeginTran hoặc HamThemADOBeginTran True
HamThemADOBeginTran False
'---------------------------------------------------------------------------------------
' Procedure : HamThemADOBeginTran
' Author : maidinhdan
' Date : 09/03/2020
' Purpose :
'---------------------------------------------------------------------------------------
Function HamThemADOBeginTran(Optional DataHienHanh as Boolean=True)
On Error GoTo Loi
Dim Cnn As ADODB.Connection
Dim rst As ADODB.Recordset
If DataHienHanh=True then
Set Cnn = CurrentProject.Connection ' Mở kết nối đến database hiện hành
else
'Kết nối với file Access khác hoặc SQl Server....thì dùng code sau: Ở Demo này sẽ dùng File không pass như bên dưới để các bạn dễ theo dõi
' Còn các ChuoiKetNoi còn lại để đây cho các bạn tham khảo thêm
Set Cnn = New ADODB.Connection
Dim ChuoiKetNoi As String
Dim LinkFileData As String
LinkFileData = CurrentProject.Path & "\DataTest.mdb"
' 'ChuoiKetNoi dung cho Access co pass
' ChuoiKetNoi = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & LinkFileData & ";Jet OLEDB:Database Password=111444;"
' 'ChuoiKetNoi dung cho Access 2003 tro xuong khong co pass
ChuoiKetNoi = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & LinkFileData & ";Persist Security Info=False"
' 'ChuoiKetNoi dung cho Access 2007 tro len khong co pass
' ChuoiKetNoi = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & LinkFileData & ";Persist Security Info=False"
' 'ChuoiKetNoi dung cho SQL Server
' ChuoiKetNoi = "Provider = SQLOLEDB;Data Source=222.254.241.8,1433;Initial Catalog=Vanbandientu;User ID=AdminMaidinhdan;Password=soctrang;"
' '222.254.241.8= Địa chỉ IP máy chủ
' '1433=Cổng kết nối Server
' 'Vanbandientu=Tên Database trên Server
' 'AdminMaidinhdan=Tai khoan dang nhap vao may chu
' 'soctrang=Mật khẩu đăng nhập Sql Server
Cnn.ConnectionString = ChuoiKetNoi
Cnn.CursorLocation = adUseClient ' Con trỏ phía Client, Nếu không khai báo sẽ báo lỗi khì dùng lệnh [Set .ActiveConnection = Nothing]
Cnn.Open ' Mở kết nối đến database theo LinkFileData
end if
Set rst = New ADODB.Recordset 'Tạo Recordset mới
With rst
Set .ActiveConnection = Cnn 'Gán Recordset kết nối đến Connection cnn
.LockType = adLockOptimistic ' Kiểu khoá áp đặt lên record hiện hành: Tham khảo thêm tài liệu nhé
.CursorType = adOpenKeyset ' Cho biết kiểu của con trỏ Recordset được dùng : Tham khảo thêm tài liệu nhé
.Source = "Select * from tblTest" ' tên table cần kết nối
.Open ' mở kết nối đến bảng
End With
Cnn.BeginTrans 'Bắt đầu một transaction mới ( Cứ hiểu transaction nó là một giao dịch) => Bắt đầu giao dịch
'Bặt đầu vòng lặp từ đầu đến cuối cùng
' Duyet de them moi vao table tblTest 5000 mau tin cot [b]<=> rs.Fields(1) ; Cot [A] la AutoNumber
Dim i As Integer 'Tao bien dem
For i = 1 To 5000
rst.AddNew 'Ra lenh them
rst.Fields(1) = "Test du lieu dong thu: " & i 'Them vao cot [b]tuc la cot thu 2 voi noi dung tu 1 den 5000 cu the lap lai
rst.Update
Next i
' Xác nhận lưu không? ==> xác nhận chập nhận giao dịch hay không?
If MsgBox("Bạn có muốn Lưu các thay cập nhật trên không?", vbYesNo) = vbYes Then
Cnn.CommitTrans 'Đồng ý giao dịch: Lưu các thay đổi và kết thúc transaction hiện hành
Else
Cnn.RollbackTrans 'Hủy giao dịch: Huỷ bỏ các thay đổi của transaction và kết thúc nó
End If
'Phần bắt lỗi trong quá trình làm việc
ThoatLoi:
' đóng rst, cnn và giải phóng bộ nhớ
rst.Close
Set rst = Nothing
If DataHienHanh = False Then Cnn.Close
Set Cnn = Nothing
Exit Function
Loi:
'Nếu lỗi phát sinh trong quá trình cập nhật sẽ chạy các đoạn lệnh dưới đây
Cnn.RollbackTrans ' Hủy giao dịch
Resume ThoatLoi
End Function
Function HamSuaADOBeginTran(Optional DataHienHanh as Boolean=True)
On Error GoTo Loi
Dim Cnn As ADODB.Connection
Dim rst As ADODB.Recordset
If DataHienHanh=True then
Set Cnn = CurrentProject.Connection ' Mở kết nối đến database hiện hành
else
'Kết nối với file Access khác hoặc SQl Server....thì dùng code sau: Ở Demo này sẽ dùng File không pass như bên dưới để các bạn dễ theo dõi
' Còn các ChuoiKetNoi còn lại để đây cho các bạn tham khảo thêm
Set Cnn = New ADODB.Connection
Dim ChuoiKetNoi As String
Dim LinkFileData As String
LinkFileData = CurrentProject.Path & "\DataTest.mdb"
' 'ChuoiKetNoi dung cho Access 2003 tro xuong khong co pass
ChuoiKetNoi = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & LinkFileData & ";Persist Security Info=False"
Cnn.ConnectionString = ChuoiKetNoi
Cnn.CursorLocation = adUseClient ' Con trỏ phía Client, Nếu không khai báo sẽ báo lỗi khì dùng lệnh [Set .ActiveConnection = Nothing]
Cnn.Open ' Mở kết nối đến database theo LinkFileData
end if
Set rst = New ADODB.Recordset 'Tạo Recordset mới
With rst
Set .ActiveConnection = Cnn 'Gán Recordset kết nối đến Connection cnn
.LockType = adLockOptimistic ' Kiểu khoá áp đặt lên record hiện hành: Tham khảo thêm tài liệu nhé
.CursorType = adOpenKeyset ' Cho biết kiểu của con trỏ Recordset được dùng : Tham khảo thêm tài liệu nhé
.Source = "Select * from tblTest" ' tên table cần kết nối
.Open ' mở kết nối đến bảng
End With
Cnn.BeginTrans 'Bắt đầu một transaction mới ( Cứ hiểu transaction nó là một giao dịch) => Bắt đầu giao dịch
If rst.EOF Then Goto ThoatLoi 'Nếu không có dữ liệu thì thoát
rst.MoveFirst ' Di chuyển đến mẫu tin đầu tiên
'Bặt đầu vòng lặp từ đầu đến cuối cùng
Do Until rst.EOF
rst.Fields(1) = 555 ' Sửa dòng thứ nhất cột thứ 2 của table tblTest thành 555===> và cứ thế đến mẫu tin cuối cùng
rst.Update ' ra lệnh cập nhật lệnh bộ nhớ transaction( vẫn chưa cập nhất lên Database của ta đâu nhe....
rst.MoveNext ' Di chuyên đến dòng kế tiếp
Loop
' Xác nhận lưu không? ==> xác nhận chập nhận giao dịch hay không?
If MsgBox("Bạn có muốn Lưu các thay cập nhật trên không?", vbYesNo) = vbYes Then
Cnn.CommitTrans 'Đồng ý giao dịch: Lưu các thay đổi và kết thúc transaction hiện hành
Else
Cnn.RollbackTrans 'Hủy giao dịch: Huỷ bỏ các thay đổi của transaction và kết thúc nó
End If
'Phần bắt lỗi trong quá trình làm việc
ThoatLoi:
' đóng rst, cnn và giải phóng bộ nhớ
rst.Close
Set rst = Nothing
If DataHienHanh = False Then Cnn.Close
Set Cnn = Nothing
Exit Function
Loi:
'Nếu lỗi phát sinh trong quá trình cập nhật sẽ chạy các đoạn lệnh dưới đây
Cnn.RollbackTrans ' Hủy giao dịch
Resume ThoatLoi
End Function