Access

Sao lưu tập tin .MDB

03/08/2013 14:21

Một ứng dụng quản lý cần đảm bảo dữ liệu luôn trong tình trạng tốt nhất. Thiết bị lưu trữ dữ liệu sử dụng thường xuyên sẽ có lúc hư hỏng. Làm thế nào để sao lưu dữ liệu trong một ứng dụng Access?

Bạn "Trần Hoàng Vũ – TP Đà Nẵng" sotex@vnn.vn thắc mắc như sau về Access:

Làm thế nào để sao lưu file chương trình Access tự tạo bằng các cách:

1) Tự động tạo một file sao lưu mỗi khi đóng chương trình, lưu vào một thư mục chỉ định trước trên máy tính.

2) Tạo một menu để thi hành lệnh tạo file sao lưu khi có nhu cầu sao lưu chương trình vào một thư mục chỉ định trước trên máy tính.

Để minh họa, bạn tạo mới một database, đặt tên là SaoLuuMDB.MDB, rồi sử dụng chức năng Import (bằng cách chọn mục Get External Data \ Import... trên trình đơn File của Access) để import các table CustomersEmployees từ databaseNorthwind.MDB (có sẵn trong thư mục đã cài đặt Access, ví dụ: C:\Program Files\Microsoft Office\OFFICE11\SAMPLES) vào, các table này giúp bạn kiểm tra nội dung sao lưu có đúng hay không chứ không ảnh hưởng đến phương pháp tôi sẽ trình bày.

Chúng ta cần một thủ tục VBA dùng chung cho 2 chức năng (theo yêu cầu của bạn) có nhiệm vụ sao chép tập tin SaoLuuMDB.MDB vào một thư mục định sẵn. Việc ghi nhớ tên thư mục định sẵn là vấn đề khác, bạn có thể sử dụng một tập tin .TXT để lưu thông tin này. Trong ví dụ, tôi sử dụng tên thư mục là LUU nằm trong thư mục chứa ứng dụng cần sao lưu, vì thế bạn phải tạo sẵn thư mục này.

Ý tưởng là: thiết kế một form có tên frmExit không chứa bất cứ control nào, form này phải được mở đầu tiên mỗi lần bạn mở ứng dụng, điều này giúp nó được đóng sau cùng sau khi các form khác đã đóng, là lúc ứng dụng Access được kết thúc. Khi form này được đóng, thủ tục xử lý tình huống OnClose xảy ra, bạn gọi thủ tục SaoLuu() để thực hiện việc sao lưu. Trong trường hợp sao lưu bằng mục chọn trên trình đơn, bạn cũng gọi thủ tục SaoLuu() nhưng thông qua một macro.

Để sao chép một tập tin, ta sử dụng đối tượng FileSystemObject, nên trong cửa sổ soạn thảo VBA bạn phải chọn mục Tools \ References, rồi trong khung đối thoại References đánh dấu chọn mụcMicrosoft Scripting Runtime.

Bạn tạo một module rồi gõ đoạn mã sau đây vào:

Public sPath As String

Function OpenExitForm()

DoCmd.OpenForm "frmExit", , , , , acHidden

End Function

Function SaoLuu()

Dim fso As New FileSystemObject

Dim sLuuPath As String

sLuuPath = sPath & "\LUU"

On Error Resume Next

fso.CopyFile sPath & "\SaoLuuMDB.MDB", _

sLuuPath & "\SaoLuuMDB.MDB", True

End Function

Biến sPath dùng để đọc tên đường dẫn đến thư mục chứa ứng dụng Access. Thủ tục OpenExitForm() dùng để mở form frmExit nhưng không cho form hiển thị nhờ thông số acHidden. Thủ tục SaoLuu() dùng để sao chép tập tin ứng dụng sang thư mục LUU, lỗi xảy ra (nếu có) trong thủ tục này là thư mục LUU không tồn tại, lỗi này có thể bỏ qua nên dòng lệnh On Error Resume Next được sử dụng để kiểm soát lỗi. Hai thủ tục này được viết dưới dạng một hàm (function) vì chúng còn được sử dụng trong macro, nếu bạn viết như một sub thì không sử dụng trong macro được.

Tiếp theo, bạn thiết kế 2 macro có tên AutoExec (được thực thi tự động mỗi lần ứng dụng Access được mở) và mcrSaoLuuMDB (được thực thi thông qua một mục trên trình đơn, nếu bạn đã biết tạo trình đơn thì việc gắn macro vào trình đơn thật là đơn giản, tôi không đề cập) như hình 1 và hình 2.

Đối với form frmExit, bạn gõ đoạn mã xử lý các tình huống mở và đóng form như sau:

Private Sub Form_Close()

Dim retValue

retValue = SaoLuu()

End Sub

Private Sub Form_Open(Cancel As Integer)

sPath = Application.CurrentProject.Path

End Sub

Bây giờ, để thử nghiệm, bạn đóng (ứng dụng Access) ví dụ vừa thiết kế rồi mở lại nó. Nhập dữ liệu vào một trong 2 tableCustomers, Employees rồi đóng ứng dụng lại. Kiểm tra thư mục LUU xem có tập tin SaoLuuMDB.MDB hay không, nếu có thì mở ra để kiểm tra nội dung dữ liệu đã gõ vào. Nếu không thấy tập tin MDB được sao lưu thì chắc chắn bạn đã thiếu sót gì đó trong quá trình thực hành, chỉ cần từ từ thực hiện đúng hướng dẫn là xong!

ĐÀM VĂN CHƯƠNG

Ý kiến bạn đọc (0)
Tên   Email

Lên đầu trang