2
특정 기준이 충족되는 경우 .mdb 파일을 복사하는 VBA 함수를 작성하려고했습니다.왜 프로그래밍 방식으로 잠긴 .mdb를 복사 할 수 없지만 탐색기를 통해 복사 할 수 있습니까?
.mdb
에 복사/붙여 넣기가 연결된 .ldb
파일이있는 경우 FileCopy
메서드에서 오류가 발생 함을 알았을 때로드 블록에 맞았습니다.
그러나 Windows 탐색기를 통해 .mdb
을 수동으로 복사/붙여 넣기 할 수 있습니다.
복사하려고 시도하는 .mdb
은 파일 복사 절차를 실행하는 DB에 참조를 추가했기 때문에 항상 잠겨 있습니다.
VBA를 사용하여 프로그래밍 방식으로 강제로 복제하는 방법을 보여 줄 수 있습니까? 검색을 시도했지만 DB 손상 등의 이유로이 작업을 수행하는 것에 대한 조언을 찾지 못했습니다. 그러나이 절차가 실행되는 동안 DB 개체가 조작되지 않으므로 문제가되지는 않습니다.
Function fn_ArchiveMonthEndDB()
'load INI data
fn_ReadINI
Dim asOfDate As Date
asOfDate = getAsOfDate()
Dim monthEndDate As Date
monthEndDate = fn_GetMonthEndDate()
sSQL = "SELECT CDate(Nz(LastRunDate,'1/1/1990')) as BackupDate FROM tbl_UseStats WHERE ProcessName = 'Archive Backend DB'"
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(sSQL)
Dim dLastBackup As Date
dLastBackup = rs!BackupDate
rs.Close
Set rs = Nothing
If (dLastBackup <> monthEndDate) Then
'determine if it actually is month-end. if yes, then archive the DB.
If (asOfDate = monthEndDate) Then
'archive backend DB
sDir = iBackendArchive & "\" & CStr(Year(monthEndDate)) & CStr(Month(monthEndDate))
'create dir if it does not exist
If (Dir(sDir, vbDirectory)) = "" Then
MkDir sDir
End If
FileCopy iBackendPath & "\ETL_be.mdb", sDir & "\ETL_be.mdb"
Else
'if no, do nothing
End If
ElseIf (dLastBackup = monthEndDate) Then
'do nothing, because we already took a backup of the backend DB.
End If
End Function
조니 본즈 FTW! +1 –