Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hướng dẫn] Cách lưu (back up database) dữ liệu!
#11
(31-03-15, 01:12 PM)cpucloi Đã viết: Không phải là không quan tâm, bởi vì mình chưa có nhu cầu Backup Database thôi mà, vẫn theo dõi bài của MatTroiNguQuen đều đấy chứ.
P/s: Dạo này cũng hơi bận, chỉ thỉnh thoảng vô 4rum thôi.

Chỉ sợ bác cười mình code kiếc lủng củng thui 014 014 014 014 014 014

(02-04-15, 10:20 AM)chuvoicon Đã viết: Cảm ơn bác MatTroiNguQuen...

Nghe bạn nói tự nhiên thấy có đôi chút an ủi nên sẽ tranh thủ viết tiếp... 014 014 014
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn maidinhdan
#12
Xin cảm ơn anh MatTroiNguQuen, chủ đề này rất hay...hằng ngày đều chờ anh cho ra tiếp phần này....

(31-03-15, 02:04 AM)MatTroiNguQuen Đã viết: -Nếu có thời gian thì bài viết sau mình sẽ giới thiệu tiếp về FileSystem Object, bổ sung thêm một số tùy chọn:
+ Sao chép đồng thời Compact
+ Sao chép và nén với định dạng RAR, ZIP có đặt password (dĩ nhiên là sẽ có hàm giải nén và phụ hồi CSDL)
nerd 015

Em thích nhất Call file Backup lên để Compact thôi....Bởi khi link table và copy để lưu backup thì Data Backup đó nó phìn to thiệt...

Sẽ chờ đợi ....Thk anh.
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
#13
Đúng là MatTroiNguQuen. Sao ngủ lâu thế để hôm nay mới dậy? Còn cái xương nào không?
Viết tiếp chủ đề này đi
Thâ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
#14
Xin lỗi các bác! nợ chủ đề này lâu quá, hôm nay ráng ngồi trả nợ. 014

-Trong bài này mình làm ví dụ về dùng FileSystemObject để sao chép dữ liệu:
(Trong ví dụ mình có sử dụng module mdlFileDlg do bác paulsteigel giới thiệu và có chỉnh sửa hàm GetFileOpen để có thể tùy chọn bộ lọc - Filter)

Demo Backup DB 3A.rar

Trong ví dụ trên ta có thể gọi hàm AutoBackUp từ bất cứ đâu để sao chép CSDL

-Trong các bài viết sau mình sẽ lần lượt giới thiệu về hàm CompactDB và các hàm nén/ giải nén có mật khẩu (sử dụng WinRar  Portable, hoặc VszLib.dll và 7z.dll)

(03-04-15, 09:40 AM)maidinhdan Đã viết: Em thích nhất Call file Backup lên để Compact thôi....Bởi khi link table và copy để lưu backup thì Data Backup đó nó phìn to thiệt...

Hàm  CompactDB mình đang sử dụng:

Mã:
Function CompactDB(strSourceFile As String, Optional strPWD As String, Optional blnBackupSource As Boolean, _
     Optional strBackupFile As String, Optional ByRef strMSG As String) As String
       
    On Error GoTo Err_handler
    
    Dim strCompactFile As String
    Dim MyArr As Variant
    Dim i As Integer
    Dim objEngine As DAO.DBEngine
        
    If FileIsLocked(strSourceFile) Then Exit Function
    
    Set objEngine = Application.DBEngine

    MyArr = ParseFileName(strSourceFile)
   
    DoCmd.Hourglass True
    
    If blnBackupSource Then
        If strBackupFile = "" Then
            strBackupFile = BuildBackupFileName(strSourceFile)
        End If
        If BackupDB(strSourceFile, strBackupFile) = False Then
            strMSG = strMSG & vbCrLf & "-Qua trinh lam gon CSDL khong thanh cong! "
            GoTo Err_Exit
        End If
    End If
    strCompactFile = MyArr(1) & MyArr(2) & "_COMPACTED" & MyArr(3)
        
    If FileSysObj("FileExists", strCompactFile) Then
        FileSysObj "DeleteFile", strCompactFile
    End If
    
Compact:
        DoCmd.Hourglass True
    
        ' Compact CSDL va xuat sang mot tap tin moi (strCompactFile).
        If strPWD <> "" Then
            objEngine.CompactDatabase strSourceFile, strCompactFile, , , ";pwd=" & strPWD
        Else
            objEngine.CompactDatabase strSourceFile, strCompactFile
        End If
        'Neu khong co loi, tuc la qua trinh CompactDatabase hoan thanh thi xoa CSDL hien hanh
        FileSysObj "DeleteFile", strSourceFile
        'Sua ten file da Compact thanh CSDL hien hanh
        If Not FileSysObj("MoveFile", strCompactFile, strSourceFile) Then GoTo Err_Exit
        'Thong bao da hoan tat qua trinh CompactDatabase
        strMSG = strMSG & vbCrLf & "-Lam gon CSDL thanh cong! "
           
Err_Exit:
    DoCmd.Hourglass False
    Set objEngine = Nothing
    Exit Function
   
Err_handler:
    DoCmd.Hourglass False
    If Err.Number = 3031 Then
        i = i + 1
        If i > 1 And i < 4 Then MsgBox "Mat khau khong dung!"
        If i > 3 Then
            strMSG = strMSG & vbCrLf & "-Qua trinh lam gon CSDL khong thanh cong! "
            Resume Err_Exit
        End If
        strPWD = GetPassWord("Vui long cho biet mat khau cua CSDL:", 4 - i)
        If strPWD = "" Then i = 4
        Resume Compact
    Else
        MsgBox Err.Description, vbExclamation, "CompactDB Error: " & Err.Number
        strMSG = strMSG & vbCrLf & "-Qua trinh lam gon CSDL khong thanh cong! "
    End If
    Resume Err_Exit
       
End Function

Mã:
Public Function GetPassWord(Optional Message As String, Optional ingCount As Integer) As String
    Dim strTitle As String, Default As String, MyValue As Variant
    
    strTitle = "Nhap Mat Khau"
    If ingCount <> 0 Then
        Message = Message & vbCrLf & "(Ban con " & ingCount & " lan nhap mat khau!)"
    End If
    Default = "123456"
    MyValue = InputBox(Message, strTitle, Default)
    
    GetPassWord = MyValue
End Function

Hàm liên quan:
Mã:
Public Function ParseFileName(strPath As String, Optional iRet As Long = -1) As Variant
On Error GoTo Err_handler
    Dim strDrive As String
    Dim strFolderPath As String
    Dim strFullName As String
    Dim strShortName As String
    Dim strFileExt As String
    Dim strElse As String
    
    If strPath = "" Then Exit Function
    
    strDrive = Left$(strPath, InStr(strPath, ":") + 1)
    strFolderPath = Left$(strPath, InStrRev(strPath, "\"))
    strFullName = Mid$(strPath, Len(strFolderPath) + 1)
    
    If InStrRev(strFullName, ".") > 1 Then
        strShortName = Left$(strFullName, InStrRev(strFullName, ".") - 1)
    End If
    strFileExt = Mid$(strFullName, Len(strShortName) + 1)
    strElse = strFolderPath & strShortName
    
    Select Case iRet
    Case -1
        ParseFileName = Array(strDrive, strFolderPath, strShortName, strFileExt, strFullName, strElse)
    Case 0
        ParseFileName = strDrive
    Case 1
        ParseFileName = strFolderPath
    Case 2
        ParseFileName = strShortName
    Case 3
        ParseFileName = strFileExt
    Case 4
        ParseFileName = strFullName
    Case 5
        ParseFileName = strElse
    End Select

Err_Exit:
    Exit Function
   
Err_handler:
    ParseFileName = ""
    MsgBox Err.Description, , "ParseFileName Err: " & Err.Number
    Resume Err_Exit

End Function
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn maidinhdan , chuvoicon , tranthanhan1962 , Minh Tiên , tvn_hut
#15
Nhấp nút "Thanks" Vì "Mặt Zời đã thức dậy" 007
Chữ ký của chuvoicon Xin chào, mình là chuvoicon, Tham gia http://thuthuataccess.com/forum từ ngày 18-11 -13.
Reply
Những người đã cảm ơn
#16
Sorry! Demo trên còn một số lỗi chưa kiểm soát hết, mình đã thêm và sửa lại một số hàm nhằm bắt lỗi bằng Tiếng Việt và kiểm soát tốt hơn các khả năng có thể xảy ra:

Demo BackupDB 08-06-15.rar

Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn
#17
Thường thì quá trình sao lưu, CompactDatabase đối với CSDL vài chục MB trở lên cũng tốn một khoảng thời gian không nhỏ nên mình giao nó cho một "thằng con" làm nhiệm vụ backup. Từ chương trình chính gọi nó lên, giao nhiệm vụ, rồi mặc kệ nó, không ảnh hưởng gì đến "thằng cha". Khi nào thành công hay thất bại nó sẽ âm thầm chép vào dữ liệu của "Thằng cha" 014

Demo BackupDB 09-06-15.rar

Ở đây mình không dùng macro Autoexec hay gọi backup ngay trong sự kiện Formload mục đích là chờ cho quá trình khởi động của "thằng con" hoàn tất, nếu gọi backup ngay trong quá trình khởi động thì "thằng cha" cũng bị treo cho đến khi "thằng con" xong việc (Việc gì cũng phải khởi động hoàn tất rồi mới "hành sự " chứ nhỉ, hùng hục lao vào "lúp bê" ráng chịu 014)

Code gọi thằng con

Mã:
Public Sub OpenDB(strDbName As String, Optional strPWD As String, Optional blnVisible As Boolean)
On Error GoTo Err_OpenDB
    
    Dim appAccess As Object
    Dim strMyPath As String
     strMyPath = CurrentDb.Name
    
    If strDbName = "" Then
        Exit Sub
    End If
    If Dir$(strDbName) = "" Then
        MsgBox "Khong tim thay tap tin theo duong dan: " & vbCrLf & strDbName
        Exit Sub
    End If
    
    Set appAccess = CreateObject("Access.Application")
    
    If appAccess.SysCmd(7) >= 10 Then
        appAccess.AutomationSecurity = 1
    End If
    
    appAccess.OpenCurrentDatabase strDbName, False, strPWD
    appAccess.Run "CallBackup", strMyPath, blnVisible
    appAccess.Visible = blnVisible
    
Exit_OpenDB:
    Set appAccess = Nothing
    Exit Sub
Err_OpenDB:
    If Err.Number <> 0 Then MsgBox Err.Description, , "OpenDB Error: " & Err.Number
    Resume Exit_OpenDB
End Sub

đoạn code:
Mã:
If appAccess.SysCmd(7) >= 10 Then
        appAccess.AutomationSecurity = 1
    End If
dùng cho AC2003 nhằm tắt cửa sổ cảnh báo Security warning khi khởi động chương trình
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn Minh Tiên
#18
Chào các bác!
MTNQ xin tiếp tục về nén CSDL với  WinRar (Portable)

Module nén và giài nén (Click to View)


Tải ví dụ minh họa:
BackupToRar (OrZip)
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn maidinhdan , thanhtruong , tvn_hut
#19
Trong ví dụ trên:

1- Hàm  ShellAndWait lấy từ trang sau : http://www.rondebruin.nl
   các bạn có thể tham khảo thêm về nén file với WinZip, 7-Zip cũng từ trang trên:
   Zip(Compress) Activeworkbook, folder, file(s) with VBA

2- Class Module: clsBackupCtrlProperties 
   MTNQ viết nhằm mục đích sao lưu  thuộc tính của các điều khiển trên form (ForeColor,BackColor,FontSize,Visible,Enabled,Caption...) , khi cần trả lại trạng thái ban đầu ta chỉ cần gọi hàm Restore
VD:  obj1.Restore
MTNQ sẽ giới thiệu chi tiết về Class này trong một chủ đề khác

3- Giải thích các lệnh nén và giải nén của WinRar :
Command:
+) m: Move to archive  
   lệnh này tương đương với hai lệnh a (Add files to archive) và -df (Delete files after archiving)

+) -ep1: Loại trừ đường dẫn, chỉ nén file 
   nếu không có lệnh này thì file nén sẽ nằm trong nhiều lớp thư mục cha (có trong đường dẫn)

+) -ibck: Ẩn cửa sổ compression của WinRar khi nén file

+) Tham số : strMethod (phương thức nén) có các giá trị sau:
       -m0   store     do not compress file when adding to archive
       -m1   fastest   use fastest method (less compressive)
       -m2   fast      use fast compression method
       -m3   normal    use normal (default) compression method
       -m4   good      use good compression method (more
                       compressive, but slower)
       -m5   best      use best compression method (slightly more
                       compressive, but slowest)

    
+) -p[pwd] Set password

+) -ilog[name]    Log errors to file
  Trong ví dụ trên thì lỗi trong quá trình nén hoặc giải nén (nếu có) sẽ được ghi vào file ErrorLog.txt  nằm trong thư mục chứa WinRar  (CurrentProject.path & "\Tools\WinRAR\Data\WinRAR\ErrorLog.txt")

+) -inul: Disable all messages 
     Tắt tất cả các thông báo của WinRar 
     (MTNQ không dùng lệnh này trong ví dụ trên nhằm hiển thị các thông báo lỗi )

Hiện tại mình chỉ dùng các lệnh trên thui, nếu có bạn nào thắc mắc về command line của WinRar, WinZip hay 7-Zip thì cửa hỏi nhé
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn thanhtruong
#20
Mình thì mình không chia CSDL ra làm BAck end, nó vẫn còn nguyên file.mdb
Vì chỉnh sửa hoài mà chia ra thì khó làm lắm.

Mình đã làm được là tắt chương trình thì nó tạo ra file.mdb kèm theo ngày tháng năm giờ hiện tại.

Bậy giờ mình muốn thêm vào cái file vừa backup 1 pass thì phải làm sao.

Mình đọc hết mấy bài trên rồi mà không hiểu code nào cho cái file bacup đó pass 123456

Xin mọi người chỉ giáo
Chữ ký của thanhtruong Xin chào, mình là thanhtruong, Tham gia http://thuthuataccess.com/forum từ ngày 23-06 -14.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] Thiết kế form nhập và lưu trữ dữ liệu theo yêu cầu brianhuynh 16 624 20-10-16, 10:54 PM
Bài mới nhất: brianhuynh
  [Hỏi] Cách loại bỏ icon Filter trên Datasheet Form có nguồn là Query. toancvp 2 99 19-10-16, 08:53 PM
Bài mới nhất: toancvp
  Xóa tất cả các dữ liệu ChiMai 3 145 15-10-16, 02:47 PM
Bài mới nhất: cpucloi
  cách sửa lỗi cant find project or library trungminh 4 230 01-10-16, 03:37 PM
Bài mới nhất: maidinhdan
  [Hỏi] Cách đưa chức năng compact & repair vào form toancvp 6 489 24-08-16, 12:19 AM
Bài mới nhất: paulsteigel

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ơ