Xuân Thanh > 08-08-18, 04:38 PM
NguyenDungAnh > 08-08-18, 10:22 PM
Xuân Thanh > 09-08-18, 12:20 PM
(08-08-18, 10:22 PM)NguyenDungAnh Đã viết: Cám ơn bác đã chia xẻ kinh nghiệm, em có nhập thử data vào mấy bảng đó nhưng khi bấm khóa sổ thì mở mục lưu dữ liệu vẫn trắng, em dùng office 2013 64 bit
NguyenDungAnh > 09-08-18, 06:06 PM
ongke0711 > 09-08-18, 09:25 PM
Option Compare Database
Option Explicit
Public Const conJetDate = "\#mm\/dd\/yyyy\#"
Sub CopyDLDaTa2(Thang, Nam)
Dim sPath As String
Dim sSQL As String
Dim StartDate As Date, StopDate As Date
sPath = "\\Mac\Home\Downloads\DeMo Khoa So\LuuDuLieu.accdb" 'Chinh lai duong dan'
StartDate = DateSerial(Nam, Thang, 1)
StopDate = DateSerial(Nam, Thang + 1, 1) - 1
strSQL = "INSERT INTO tblLuuDuLieu IN '" & sPath & "' SELECT * FROM tblNhatKy WHERE Ngay>=" & Format(StartDate,conJetDate) & " AND Ngay <=" & Format(StopDate, conJetDate)
Debug.Print strSQL
CurrentDb.Execute strSQL, dbFailOnError
End Sub
NguyenDungAnh > 11-08-18, 11:41 AM
Xuân Thanh > 11-08-18, 11:49 AM
(09-08-18, 09:25 PM)ongke0711 Đã viết: Trước đây cũng có một bài của maidinhdan cũng gần với cái cách dùng DBEngine về việc Append dữ liệu giữa 2 file Access khác nhau. Các bạn cũng có thể tham khảo thêm.
Link: http://thuthuataccess.com/forum/thread-9572.html
Tôi cũng đóng góp 1 cách khác:
- Không cần khai báo Database cần backup cho DBEngine Collection.
- Dùng câu lệnh SQL để Insert dữ liệu lên table đích. Vì câu lệnh SQL luôn xử lý nhanh hơn DAO Recordset. "Insert Into..." nó cập nhật một lúc nguyên một bó records (batch update), còn đối với DAO Recordset thì nó Loop qua từng record để update.
INSERT INTO tên Table IN 'đường dẫn file database đích để lưu' SELECT * FROM Table WHERE ...
- Vì dùng câu lệnh SQL nên biến ngày/tháng phải chỉnh lại theo định dạng "mm/dd/yyyy" để lọc dữ liệu cho đúng.
- Tạo 1 cái Sub tạm đặt tên là CopyDLData2 (). Code như bên dưới. Tạo nút lệnh thực thi tương tự của bác Xuân Thanh.
Mã PHP:Option Compare Database
Option Explicit
Public Const conJetDate = "\#mm\/dd\/yyyy\#"
Mã PHP:Sub CopyDLDaTa2(Thang, Nam)
Dim sPath As String
Dim sSQL As String
Dim StartDate As Date, StopDate As Date
sPath = "\\Mac\Home\Downloads\DeMo Khoa So\LuuDuLieu.accdb" 'Chinh lai duong dan'
StartDate = DateSerial(Nam, Thang, 1)
StopDate = DateSerial(Nam, Thang + 1, 1) - 1
strSQL = "INSERT INTO tblLuuDuLieu IN '" & sPath & "' SELECT * FROM tblNhatKy WHERE Ngay>=" & Format(StartDate,conJetDate) & " AND Ngay <=" & Format(StopDate, conJetDate)
Debug.Print strSQL
CurrentDb.Execute strSQL, dbFailOnError
End Sub
ongke0711 > 12-08-18, 06:51 PM
Dim db As DAO.Database
Set db=CurrentDB
...
'db.Close <=Đóng hoặc không đóng cái "db" này cũng không sao'
Set db=Nothing
Dim db As DAO.Database
Set db=DBEngine(0)(0)
...
'db.Close <=Không nên đóng cái "db" này tránh Access có thể bị crash'
Set db=Nothing
Dim db As DAO.Database
Set db=DBEngine(0).OpenDatabase (sPath)
...
db.Close '<=Nên đóng cái "db" này vì nó là database bên ngoài'
Set db=Nothing
Option Compare Database
Option Explicit
Public Function dbLocal(Optional blnCleanup As Boolean = False) As DAO.Database
On Error GoTo errHandler
Static dbCurrent As DAO.Database
If blnCleanup Then GoTo closeDB
retryDB:
If dbCurrent Is Nothing Then
Set dbCurrent = CurrentDb()
End If
exitRoutine:
Set dbLocal = dbCurrent
Exit Function
closeDB:
If Not (dbCurrent Is Nothing) Then
'dbCurrent.close ' this never has any effect
Set dbCurrent = Nothing
End If
GoTo exitRoutine
errHandler:
Select Case Err.Number
Case 3420 ' Object invalid or no longer set.'
Set dbCurrent = Nothing
If Not blnCleanup Then
Resume retryDB
Else
Resume closeDB
End If
Case Else
MsgBox Err.Number & ": " & Err.Description, vbExclamation, "Error in dbLocal()"
Resume exitRoutine
End Select
End Function
Xuân Thanh > 12-08-18, 08:29 PM