Đánh giá chủ đề:
  • 5 Votes - 3.6 Average
  • 1
  • 2
  • 3
  • 4
  • 5
nén file Access bằng VBA
#11
(03-06-14, 02:41 PM)tmtien261 Đã viết: Chào bạn "danhxetnghiem" !
Như yêu cầu của bạn thì:
1. Muốn nén khi mỗi lần thoát chương trình: Bạn tạo 1 formMain form này phải được đóng sau cùng, tại thủ tục On Close của formMain bạn gọi thực hiện đoạn code nén trên.
2. Muốn nén sau một số ngày nào đó: Bạn tạo 1 table có trường Ngaydanen kiểu Date/Time, lần đầu tiên nén chương bạn Save ngày này vào Ngaydannen. Mỗi khi mở (Hoặc đóng) chương trình bạn so sánh ngày hiện tại với ngày đã lưu, nếu "ngày hiện tại - Ngày đã lưu >= số ngày qui định" thì chương trình gọi lệnh nén.
Chúc bạn thành công !

ý 1 thì ok. Còn Cái ý 2 Mình hiểu nhưng mà không biết thực hiện!
Chữ ký của danhxetnghiem Đừng bao giờ so sánh đoạn đầu của bạn với đoạn giữa của người khác
Reply
Những người đã cảm ơn
#12
Mã PHP:
Private Sub Form_Close()
    
Dim rsCom As recordset
    Set rsCom 
CurrentDb.OpenRecordset("tblNgay"dbOpenTable)
    If 
rsCom.RecordCount 0 Then     'File đã nén
        If rsCom!NgayDaNen + 30 > Date Then
            rsCom.Edit
            rsCom!NgayGaNen = Date
            rsCom.Update
            ' 
Gọi lệnh nén file ở đây
        End 
If
    Else                             
' File chưa nén lần nào
        rsCom.AddNew
        rsCom!NgayDaNen = Date
        rsCom.Update
        ' 
Gọi lệnh nén file ở đây
    End 
If
End Sub 

Sau 30 ngày nén file một lần
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn danhxetnghiem
#13
(23-03-13, 01:22 PM)Minh Tiên Đã viết: Đoạn code trên chỉ dùng cho ms Access 2003, còn Ms Access 2007 dùng đoạn code sau để nén (Thay cho chọn Compact on close):

Private Sub Form_Unload(Cancel As Integer)
   SendKeys ("%T D C")
End Sub


Mình dùng đoạn mã của bạn nén OK nhưng sau khi nén mình không cách nào vào Design View của Form có chứa nút lệnh nén được. Bạn có ý tưởng gì không.
Chữ ký của nhimsieunhan nhimsieunhan,gia nhập Thủ Thuật Access từ 25-12 -16.
Reply
Những người đã cảm ơn
#14
Các Bạn vui lòng cho mình hỏi một chút 2 cách sau nó khác nhau cái gì ...tại Sao ...?!
Xin Cảm ơn

1/ GetDBEngine.CompactDatabase
2/ GetDBEngine.RepairDatabase
Reply
Những người đã cảm ơn
#15
(30-03-17, 10:51 AM)kieu manh Đã viết: Các Bạn vui lòng cho mình hỏi một chút 2 cách sau nó khác nhau cái gì ...tại Sao ...?!
Xin Cảm ơn

1/ GetDBEngine.CompactDatabase
2/ GetDBEngine.RepairDatabase

GetDBEngine.CompactDatabase nghĩa là nén file lại
GetDBEngine.RepairDatabase sửa chửa nếu file đó gặp vấn đề hư hỏng.

Cho nên khi bạn dùng lệnh CompactDatabase, nên thêm lệnh RepairDatabase.
Trong một số trường hợp file ta đang làm bị hỏng do mất điện đột ngột ta sẽ dùng lệnh GetDBEngine.RepairDatabase để xử lý.

Lưu ý : 2 lệnh này chỉ dùng được trên Access 2013 và Access 2016

Thân mến!
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn kieu manh
#16
(30-03-17, 11:36 AM)maidinhdan Đã viết:
(30-03-17, 10:51 AM)kieu manh Đã viết: Các Bạn vui lòng cho mình hỏi một chút 2 cách sau nó khác nhau cái gì ...tại Sao ...?!
Xin Cảm ơn

1/ GetDBEngine.CompactDatabase
2/ GetDBEngine.RepairDatabase

GetDBEngine.CompactDatabase nghĩa là nén file lại
GetDBEngine.RepairDatabase sửa chửa nếu file đó gặp vấn đề hư hỏng.

Cho nên khi bạn dùng lệnh CompactDatabase, nên thêm lệnh RepairDatabase.
Trong một số trường hợp file ta đang làm bị hỏng do mất điện đột ngột ta sẽ dùng lệnh GetDBEngine.RepairDatabase để xử lý.

Lưu ý : 2 lệnh này chỉ dùng được trên Access 2013 và Access 2016

Thân mến!

Cảm ơn Bạn ...Nếu vậy ta Viết chung vào 1 Code CompactDatabase  xong RepairDatabase Luôn liệu có ảnh hưởng gì tới File không Bạn

Sao Mình Thấy Link nhà sản xuất có lệnh sau hay là dùng chung cho 2 trường hợp đó ...Vào 1 ?!
RepairDatabase = Access.Application.CompactRepair(sourceDb, destDb, True)

https://msdn.microsoft.com/en-us/library/office/ff194498.aspx
Reply
Những người đã cảm ơn
#17
dựa trên Gợi ý của link sau Mạnh viết thành một Hàm chạy trên Excel ...Nhờ các Bạn xem dùm thế nào ...có bổ sung thêm gì không
https://msdn.microsoft.com/en-us/library...94498.aspx

Mã PHP:
Private Function RepairDatabase(ByVal AccPath As String) As Boolean
    Rem https
://msdn.microsoft.com/en-us/library/office/ff194498.aspx
    Dim Acc As ObjectFso As ObjectNewName As String
    On Error 
GoTo ErrorHandler
    NewName 
AccPath ".temp"
    Set Fso CreateObject("Scripting.FileSystemObject")
    Set Acc CreateObject("Access.Application"                   ''Manh Viet Them cho nay chay tren Excel
    
If Fso.FileExists(AccPath) = False Then Exit Function
    RepairDatabase Acc.CompactRepair(AccPathNewNameTrue     ''Tien Hanh CompactRepair
    Fso
.DeleteFile AccPath                                          ''Xoa File Cua
    Name NewName 
As AccPath                                         ''Chuyen ten File NewName Thanh File AccPath
ErrorExit
Set Fso NothingSet Acc Nothing                     ''Giai Phong Bien Sau Khi CompactDatabase
    
Exit Function                                   ''Thoat khi thuc hien xong
ErrorHandler
                                      ''Thong bao Loi
   MsgBox 
"Error #: " Err.Number _
        
vbCrLf vbCrLf Err.Description         ''Thong bao Loi ma Loi
   Err
.Clear                                        ''Xoa ma loi
   Resume ErrorExit                                 
''Giai Phong Bien ...Khi Gap Loi
End 
Function
Rem ==========
Public 
Sub Main_CompactRepair()
    Dim Repaired As BooleanPath As String
    Path 
ThisWorkbook.Path "\Data2.accdb"
    Repaired RepairDatabase(Path)
    Beep
    MsgBox Repaired
End Sub 
Reply
Những người đã cảm ơn
#18
(30-03-17, 12:36 PM)kieu manh Đã viết: dựa trên Gợi ý của link sau Mạnh viết thành một Hàm chạy trên Excel ...Nhờ các Bạn xem dùm thế nào ...có bổ sung thêm gì không
https://msdn.microsoft.com/en-us/library...94498.aspx

[php]
Private Function RepairDatabase(ByVal AccPath As String) As Boolean
    Rem https://msdn.microsoft.com/en-us/library...94498.aspx
    Dim Acc As Object, Fso As Object, NewName As String
    On Error GoTo ErrorHandler
    NewName = AccPath & ".temp"
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set Acc = CreateObject("Access.Application")                    ''Manh Viet Them cho nay chay tren Excel
    If Fso.FileExists(AccPath) = False Then Exit Function
    RepairDatabase = Acc.CompactRepair(AccPath, NewName, True)      ''Tien Hanh CompactRepair

Trả lời:
1. Hàm RepairDatabase và hàm GetDBEngine.CompactDatabase; GetDBEngine.RepairDatabase về chức năng thì giống, nhưng về cách thực hoạt động khác nhau hoàn toàn
* Sự khác nhau:
- Về thư viện tham chiếu
+ RepairDatabase : thuộc lớp thư viện Visual Basic for Applications; cho nên ta sẽ gọi thẳng với cú pháp Application.CompactRepair(SourceFile, DestinationFile, LogFile) và nó chỉ dùng được trên Access 2016; Access 2013; Access 2010; Nó hoàn toàn không dùng được trên Access 2007, 2003 hoặc thấp hơn ( vài hôm trước mình có 1 bài nói về cái này rồi: Link http://thuthuataccess.com/forum/thread-8...l#pid34534)

+ GetDBEngine.CompactDatabase; GetDBEngine.RepairDatabase: dùng lớp thư viện " Microsoft Data Access Objects reference" lớp phương thức của thư viện DAO; Như trên có trả lời 2 lệnh này chỉ dùng được trên Access 2013 và Access 2016

và một ý bạn có hỏi
Trích dẫn:Sao Mình Thấy Link nhà sản xuất có lệnh sau hay là dùng chung cho 2 trường hợp đó ...Vào 1 ?!
RepairDatabase = Access.Application.CompactRepair(sourceDb, destDb, True)
https://msdn.microsoft.com/en-us/library...94498.aspx


Cái này liên quan đến phiên bản Access, bởi đến khi có Access 2013 thì nhà sản xuất ta tách hàm compact và repair thành 2 cái lệnh riêng, chứ không để chung.

* Điểm giống nhau:....

.....Tôi có việc bận, nên tam trả lời ngắn gọn, có gì bạn thắc mắc tối nay ta trao đổi tiếp
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn kieu manh


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Tắt Security warning của Access Noname 3 5,674 24-09-17, 12:58 PM
Bài mới nhất: lehongduc
  [Thủ Thuật] [Shared Code- PhầnII]Chọn ngày tháng bằng click chuột [No Calendar] maidinhdan 24 2,659 21-09-17, 10:17 PM
Bài mới nhất: maidinhdan
Lightbulb [Hỏi] Ghi lại mọi thay đổi diễn ra trong access toidjtjmtoi 2 154 19-09-17, 11:06 AM
Bài mới nhất: toidjtjmtoi
  [Thủ Thuật] Demo_Compact & Repaire nhiều file Back End maidinhdan 18 2,833 07-07-17, 07:35 PM
Bài mới nhất: ongke0711
  [Hỏi] Lấy dữ liệu bảng A mà ko trùng dữ liệu bảng B duynamvnn1208 6 391 02-07-17, 09:34 AM
Bài mới nhất: duynamvnn1208

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ