Đánh giá chủ đề:
  • 5 Votes - 3.6 Average
  • 1
  • 2
  • 3
  • 4
  • 5
nén file Access bằng VBA
#1
Bình thường,khi mà các câu lệnh Make, Append, delete thực hiện nhiều lần thì file access của bạn sẽ phình to không tưởng tượng được, có khi lên tới hàng GB, để nén access ta vào menu tool-->database Ulities-->Compact and repair Database
Nhưng đôi khi chúng ta cần thực hiện điều đó bằng VBA vì đã khóa Menu, thay bằng customise menu, hoặc với mục đích thân thiện với người dùng chỉ trên một nút nhấn.

hãy copy đoạn code sau của tác giả Juan M. Afan de Ribera để làm điều đó

Code:

' ***** Code Start *****
Mã:
Public Sub CompactDB()

   CommandBars("Menu Bar"). _
   Controls("Tools"). _
   Controls("Database utilities"). _
   Controls("Compact and repair database..."). _
   accDoDefaultAction

End Sub
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn TruongVanTruong , hugox03 , danhxetnghiem
#2
Vào Project / References và chọn Microsoft Access 10.0 Object Library.
Thêm đoạn code sau vào Form:

Mã:
Private Sub Form_Unload(Cancel As Integer)
'Nén CSDL tên MyData.mdb và tạo 1 CSDL mới tên DB2.mdb
DBEngine.CompactDatabase App.Path & "MyData.mdb", App.Path & "DB2.mdb"
'Xóa MyData.mdb
Kill "MyData.mdb"
'Đổi tên DB2.mdb thành MyData.mdb
Dim OldName
Dim NewName
OldName = "DB2.mdb": NewName = "MyData.mdb"
Name OldName As NewName
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn hugox03 , Minh Tiên
#3
Đoạn code trên có thể dùng để nén một file DB khác được không pác Noname (dùng nút lệnh trên file DB này để compact and repair file DB khác)
Chữ ký của haquocquan Guest, you are welcome!
ღღღღღTài sản của haquocquan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#4
Mình cũng muốn biết như câu hỏi của bạn haquocquan? làm ơn!
Chữ ký của hmhieu Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#5
Đoạn code thứ 2 cho phép mình Compact 1 file khác đó, bạn thử xem sao. Điều kiện là không ai truy cập vào file đó thời điểm mình đang compact! Để hôm nào rảnh mình làm demo cho!
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn haquocquan
#6
(30-08-10, 03:08 AM)haquocquan Đã viết: Đoạn code trên có thể dùng để nén một file DB khác được không pác Noname (dùng nút lệnh trên file DB này để compact and repair file DB khác)

(10-12-10, 12:16 PM)Noname Đã viết: Đoạn code thứ 2 cho phép mình Compact 1 file khác đó, bạn thử xem sao. Điều kiện là không ai truy cập vào file đó thời điểm mình đang compact! Để hôm nào rảnh mình làm demo cho!

Mình còn quá gà, rất mong demo của bác!. Vì minh thấy vấn đề này rất hay, mình sử dụng để nén file chứa dữ liệu để giãm dung lượng mỗi lần thoát chương trình chính. Heart
Chữ ký của hmhieu Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#7
(09-08-10, 01:44 AM)Noname Đã viết: Bình thường,khi mà các câu lệnh Make, Append, delete thực hiện nhiều lần thì file access của bạn sẽ phình to không tưởng tượng được, có khi lên tới hàng GB, để nén access ta vào menu tool-->database Ulities-->Compact and repair Database
Nhưng đôi khi chúng ta cần thực hiện điều đó bằng VBA vì đã khóa Menu, thay bằng customise menu, hoặc với mục đích thân thiện với người dùng chỉ trên một nút nhấn.

hãy copy đoạn code sau của tác giả Juan M. Afan de Ribera để làm điều đó

Code:

' ***** Code Start *****
Mã:
Public Sub CompactDB()

   CommandBars("Menu Bar"). _
   Controls("Tools"). _
   Controls("Database utilities"). _
   Controls("Compact and repair database..."). _
   accDoDefaultAction

End Sub

Đ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
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#8
[font=Times New Roman][size=medium] Không làm được noname ơi ! bạn hãy chi mình rõ hơn đi hoặc giúp mình làm bản demo với !!! thanks !!!!!!
ღღღღღTài sản của hugox03 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#9
(09-08-10, 01:44 AM)Noname Đã viết: Bình thường,khi mà các câu lệnh Make, Append, delete thực hiện nhiều lần thì file access của bạn sẽ phình to không tưởng tượng được, có khi lên tới hàng GB, để nén access ta vào menu tool-->database Ulities-->Compact and repair Database
Nhưng đôi khi chúng ta cần thực hiện điều đó bằng VBA vì đã khóa Menu, thay bằng customise menu, hoặc với mục đích thân thiện với người dùng chỉ trên một nút nhấn.

hãy copy đoạn code sau của tác giả Juan M. Afan de Ribera để làm điều đó

Code:

' ***** Code Start *****
Mã:
Public Sub CompactDB()

   CommandBars("Menu Bar"). _
   Controls("Tools"). _
   Controls("Database utilities"). _
   Controls("Compact and repair database..."). _
   accDoDefaultAction

End Sub

Mình muốn nén theo một thời gian mặc định. ví dụ như khi thoát chương trình, hay 1 ngày một lần thì phải làm sao?
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
#10
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 !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn danhxetnghiem


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Thủ Thuật] [Shared Code- PhầnII]Chọn ngày tháng bằng click chuột [No Calendar] maidinhdan 13 539 30-11-16, 11:45 AM
Bài mới nhất: ongke0711
  Nhập đường dẫn 1 file ảnh vào chương trình để lưu! Noname 29 11,194 08-09-16, 08:24 PM
Bài mới nhất: maidinhdan
  [Thủ Thuật] Demo_Chọn ngày tháng bằng nút (No Calender Tiếng việt) maidinhdan 7 1,400 25-06-16, 12:44 AM
Bài mới nhất: zinzin8x
  Lấy về số seri CPU, ổ cứng MainBoard trong Access Noname 33 12,295 08-06-16, 11:23 PM
Bài mới nhất: maidinhdan
  Thuộc tính Startup MS Access toàn tập với VBA Noname 2 2,736 18-04-16, 04:50 PM
Bài mới nhất: ongke0711

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ơ