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
![[Hình: 43980246221_74f4419923_z.jpg]](https://farm2.staticflickr.com/1819/43980246221_74f4419923_z.jpg)
 )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