2016-08-25 1 views
1

Есть ли способ скопировать базу данных Access изнутри через код VBA? Я пробовал использовать fso.CopyFile и FileCopy, но они приводят к ошибкам разрешений, так как файл уже открыт.Скопировать доступ к базе данных с помощью кода VBA изнутри

+0

http://stackoverflow.com/questions/39127550/copyfile-of-current-project-that-works-in-shared-mode-gives-permission-denied – Andre

+0

Спасибо, я использую библиотечную функцию из shell32.dll и он смог скопировать открытый файл. –

ответ

2

Я нашел, что вы можете использовать функцию shell32.dll для копирования открытого файла. Я даже добавил функциональность индикатора выполнения. Вот код

Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long 

Public Const FO_COPY = &H2 
Public Const FOF_SIMPLEPROGRESS = &H100 

Public Type SHFILEOPSTRUCT 
    hWnd As Long 
    wFunc As Long 
    pFrom As String 
    pTo As String 
    fFlags As Integer 
    fAnyOperationsAborted As Long 
    hNameMappings As Long 
    lpszProgressTitle As Long 
End Type 

Public Sub VBCopyFile(ByRef strSource As String, ByRef strTarget As String) 
    Dim op As SHFILEOPSTRUCT 

    With op 
     .wFunc = FO_COPY 
     .pTo = strTarget 
     .pFrom = strSource 
     .fFlags = FOF_SIMPLEPROGRESS 
    End With 

    '~~> Perform operation 
    SHFileOperation op 
End Sub 

Мне просто нужно было вызвать VBCopyFile Sub с соответствующими параметрами, и это сработало.