mrsiro > 19-11-18, 09:13 AM
DAOrecordset!field(1) = ADOrecordset!field(1)
docmd.runsql "insert into Localtable(field1) values(field1 = ADOrecordset!field1)"
ongke0711 > 19-11-18, 12:17 PM
(19-11-18, 09:13 AM)mrsiro Đã viết: Chào bạn ongke, mình dùng vòng lặp thêm recordset theo kiểuthì thấy có vẻ nhanh hơn sử dụngMã:DAOrecordset!field(1) = ADOrecordset!field(1)
Mã:docmd.runsql "insert into Localtable(field1) values(field1 = ADOrecordset!field1)"
mrsiro > 19-11-18, 03:46 PM
DAOrecordset!field(1) = ADOrecordset!field(1)
CurrentDb.Execute "insert into Localtable(field1) values(field1 = ADOrecordset!field1)"
ongke0711 > 19-11-18, 09:21 PM
hoabattu3387 > 20-11-18, 04:42 PM
(19-11-18, 09:21 PM)ongke0711 Đã viết: - Đối với "Insert Into...", thì mỗi lần chạy Insert nó sẽ mở / đóng table. Do đó nếu dùng dạng vòng lặp để thêm từng record thì kiểu này không hiệu quả (nhanh) bằng AddNew của Recordset.cho mình hỏi chút:
- Insert into...: dùng tốt nhất khi thêm hàng loạt records vào table. Nó sẽ nhanh hơn AddNew.
Đối với ADO Recordset thì chỉ có cách loop từng record và Addnew vào table chứ không có cách Insert hàng loạt record.
ongke0711 > 21-11-18, 11:22 AM
(20-11-18, 04:42 PM)hoabattu3387 Đã viết: cho mình hỏi chút:
1. trong câu lệnh db.Execute "DELETE * FROM " & sTableImportTemp, dbFailOnError khi nào cần thêm dbfailonerror?
2. các giá trị của cursortype, locktype, option sử dụng như nào khi open recordset ạ? locktype trường hợp này bạn Dân chọn là adLockBatchOptimistic để có thể update batch đúng không ạ? còn các trường hợp khác thì sao ạ? mong các bạn chỉ giáo.
mrsiro > 21-11-18, 03:47 PM
ongke0711 > 21-11-18, 04:43 PM
(21-11-18, 03:47 PM)mrsiro Đã viết: Đối với trường hợp lấy recordset trên sqlserver về rồi add vô bảng access thì làm sao sử dụng cái rollback về hiện trạng ban đầu khi bị lỗi vậy bạn.
Ví dụ đang chạy vòng lặp thêm 1000 record vào table access, chạy được 500 record thì mất kết nối mạng. Vậy rollback lại tình trạng ban đầu của table access thì làm thế nào.
hoabattu3387 > 22-11-18, 12:54 PM
(21-11-18, 11:22 AM)ongke0711 Đã viết: [quote="hoabattu3387" pid='40870' dateline='1542703341']
- Link của MS: https://docs.microsoft.com/en-us/sql/ado...erver-2017
maidinhdan > 22-11-18, 05:24 PM
(21-11-18, 03:47 PM)mrsiro Đã viết: Đối với trường hợp lấy recordset trên sqlserver về rồi add vô bảng access thì làm sao sử dụng cái rollback về hiện trạng ban đầu khi bị lỗi vậy bạn.
Ví dụ đang chạy vòng lặp thêm 1000 record vào table access, chạy được 500 record thì mất kết nối mạng. Vậy rollback lại tình trạng ban đầu của table access thì làm thế nào.
Function BeginTransDAO()
On Error GoTo Loi
Dim wrk As DAO.Workspace
Dim dbX As DAO.Database
Set dbX = wrk.OpenDatabase("e:\File Access.mdb")
'Bắt đầu tạo điểm khôi phục transaction
wrk.BeginTrans
'Chèn các câu lệnh Thêm, Sửa, Xóa....
dbx.Execute "INSERT INTO ............................."
'Commit the transaction
wrk.CommitTrans dbForceOSFlush
ThoatLoi:
'Clean up
wrk.Close
Set dbX = Nothing
Set wrk = Nothing
Exit Function
Loi:
'Khôi phục trạng thái ban đầu
wrk.Rollback
Resume ThoatLoi
End Function
Function BeginTransADO()
On Error GoTo Loi
'Dat ten bien
Dim Cnn As ADODB.Connection
Dim rst As ADODB.Recordset
' Mo ket noi ADO den file Access
Set Cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
SQL= "SELECT * FROM tblTest"
rst.Open SQL, cnn, adOpenDynamic, adLockPessimistic, adCmdTable
'Bắt đầu tạo điểm khôi phục transaction
Cnn.BeginTrans
'Chèn các câu lệnh Thêm, Sửa, Xóa....
' Ví dụ duyệt qua các mẫu tin và set cột đầu tiên lại bằng 1 hết
rst.MoveFirst
Do Until rst.EOF
rst.Fields(0) = 1
rst.Update
rst.MoveNext
Loop
' Xac nhan co muon Luu khong
If MsgBox("Save all changes?", vbYesNo) = vbYes Then
Cnn.CommitTrans 'Hoan thanh lenh
Else
Cnn.RollbackTrans 'Khoi phuc
End If
ThoatLoi:
'Clean up
rst.Close
Cnn.Close
Set rst = Nothing
Set Cnn = Nothing
Exit Function
Loi:
'Khôi phục lại điểm transaction
Cnn.RollbackTrans
Resume ThoatLoi
End Function
(22-11-18, 12:54 PM)hoabattu3387 Đã viết: Nhờ bạn giải thích giúp đoạn này:Đoạn này muốn nói về kiểu truy xuất dữ liệu qua ADO không dùng con trỏ.
The typical default cursor type, called a forward-only (or non-scrollable) cursor, can move only forward through the result set. A forward-only cursor does not support scrolling (the ability to move forward and backward in the result set); it only supports fetching rows from the start to the end of the result set. With some forward-only cursors (such as with the SQL Server cursor library), all insert, update, and delete statements made by the current user (or committed by other users) that affect rows in the result set are visible as the rows are fetched. Because the cursor cannot be scrolled backward, however, changes made to rows in the database after the row was fetched are not visible through the cursor.
“Result set” ơ đây là nói về việc thiết lập kết quả của open recordset? Con trỏ này chỉ có thể đi chuyển về phía trc là sao bạn?