• nén file data accdb bằng DAO
  • nén file data accdb bằng DAO

    trungn077 > 17-08-14, 11:01 PM

    chào cả nhà!
    mình có file access được sử dụng data riêng biệt (mạng nội bộ, nhiều người dùng) mình không sử dụng link table mà kết nối băng DAO, mọi người giúp mình code compact file data đặt ở nơi khác bằng DAO hoặc ADO cũng được. Cám ơn cả nhà 040 (file của e chỉ có thể nén bằng code thôi chứ ko thể dùng chức năng nén của access, 2003 thì biết còn 2007 pó tay).
  • RE: nén file data accdb bằng DAO

    MTNQ > 25-08-14, 03:35 PM

    Bạn tham khảo thủ tục sau:

    Mã PHP:
    Sub CompactDB(strSourceFile As StringOptional strPassword As String)
           
        
    On Error GoTo Err_Handler
        Dim strFullName 
    As String
        Dim strFolderPath 
    As String
        Dim strFileName 
    As String
        Dim strFileExt 
    As String
        Dim strLockExt 
    As String
        Dim strBackupFile 
    As String
        Dim strCompactFile 
    As String
        Dim L 
    As Long
        Dim objFSO 
    As Scripting.FileSystemObject
        Dim objEngine 
    As DAO.DBEngine
        
            
        Set objEngine 
    Application.DBEngine
        Set objFSO 
    CreateObject("Scripting.FileSystemObject")

        
    strFullName Dir(strSourceFile)
        
    strFolderPath Left$(strSourceFileLen(strSourceFile) - Len(strFullName))
        
    InStrRev(strFullName".")
                
        
    strFileName Left$(strFullName1)
        
    strFileExt Mid$(strFullNameL)
        
    Select Case strFileExt
            
    Case ".mdb":  strLockExt ".ldb"
            
    Case ".accdb"strLockExt ".laccdb"
        
    End Select
               
        
    If Not objFSO.FileExists(strFolderPath strFileName strLockExtThen
            strBackupFile 
    strFolderPath strFileName "_Backup" Format(Date"yyyymmdd") & strFileExt
            strCompactFile 
    strFolderPath strFileName "_COMPACTED" strFileExt

            
    ' Xoa tap tin backup neu no da ton tai
            If objFSO.FileExists(strBackupFile) Then
                objFSO.DeleteFile strBackupFile
            End If

            If objFSO.FileExists(strCompactFile) Then
                objFSO.DeleteFile strCompactFile
            End If
           
            ' 
    Sao luu CSDL truoc khi Compact
            objFSO
    .CopyFile strSourceFilestrBackupFile
                   
            
    ' Compact CSDL va xuat sang mot tap tin moi (strCompactFile).
            If strPassword <> "" Then
                objEngine.CompactDatabase strSourceFile, strCompactFile, , , ";pwd=" & strPassword
            Else
                objEngine.CompactDatabase strSourceFile, strCompactFile
            End If
            '
    Neu khong co loituc la qua trinh CompactDatabase hoan thanh thi xoa CSDL hien hanh
            objFSO
    .DeleteFile strSourceFile
            
    'Sua ten file da Compact thanh CSDL hien hanh
            objFSO.MoveFile strCompactFile, strSourceFile
            '
    Thong bao da hoan tat qua trinh CompactDatabase
            MsgBox 
    "CompactDatabase thanh cong, CSDL truoc thoi diem nen duoc sao luu tai: " strBackupFile
        
    Else
            
    MsgBox "CSDL dang duoc su dung.Vui long thoat tat ca ung dung dang truy cap den CSDL va thu lai!"
        
    End If
               
    Err_Exit:
        Exit 
    Sub
       
    Err_Handler
    :
        
    MsgBox Err.DescriptionvbExclamation"CompactDB Error " Err.Number
        Resume Err_Exit
           
    End Sub 

    Ví dụ:

    Mã PHP:
    Sub Test()
        
    Dim strs As String
        strs 
    "\\192.168.1.2\Downloads\Database.mdb"
        
    Call CompactDB(strs"PassWord")
    End Sub 

    Lưu ý: Nhới khai báo Microsoft Scripting Runtime trong danh sách thư viện tham chiếu
  • RE: nén file data accdb bằng DAO

    ungthienhai > 13-09-22, 09:49 PM

    code này muốn di chuyển file backup sang thư mục khác thì làm sao bác?
  • RE: nén file data accdb bằng DAO

    ungthienhai > 13-09-22, 10:03 PM

    Sau khi nén và mở lại thì lỗi 3031 rồi bác, có cách nào fix không?