si ti ajuda veja isso
'Usando ADO:
'Marque nas referências "Microsoft Jet and Replication
'Objects 2.1 Library" e:
Private Sub ADO_CompactarDB()
'Iniciamos o tratamento de erros.
'Se algo der errado, vamos para a linha indicada.
On Error Goto ErroCompactar
'Declaramos as variáveis
Dim JR As New JRO.JetEngine
Dim S_DbNome As String, S_DbTemp As String
'Descobrimos o caminho do Arquivo Original
'e do Arquivo Temp
S_DbNome = App.Path & "Armarinho.mdb"
S_DbTemp = App.Path & "AdmTmp.mdb"
If Right$(App.Path, 1) = "" Then
S_DbNome = App.Path & "Armarinho.mdb"
S_DbTemp = App.Path & "AdmTmp.mdb"
End If
'Descobrimos se o Arquivo Temp existe...
If Dir$(S_DbTemp) <> "" Then
'Se existe, deletamos (vide *Kill lá em baixo)
Call Kill(S_DbTemp)
End If
'Compactamos o banco de dados com o
'nome de Arquivo Temp
JR.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & S_DbNome & ";", _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & S_DbTemp & ";Jet." & _
"OLEDB:Engine Type = 4;"
'Este "Engine Type" no final indica a versão do Access que está
'sendo usada. Veja os valores e as versões correspondentes:
'5 (Defaut) para Access 2000
'4 para Access 97
'3 para Access 95/6
'2 para Access 2
'1 para Access 1
'Se Arquivo Original existir...
If Dir$(S_DbNome) <> "" Then
'deleta
Call Kill(S_DbNome)
End If
'Aqui, vc poderia usar a instrução
'Name (vide *Name lá em baixo)
JR.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & S_DbTemp & ";", _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & S_DbNome & ";Jet." & _
"OLEDB:Engine Type = 4;"
'Se chegamos até aqui, avisa ao usuário que
'tudo correu bem...
MsgBox "Compactação do Banco de Dados " & _
S_DbNome & " executada com sucesso.", _
vbOKOnly + vbInformation, "Compactação"
Set JR = Nothing
Exit Sub
ErroCompactar:
'Se caiu aqui, é porque houve erro. Avise ao usuário.
MsgBox "Houve um erro inesperado ao compactar o " & _
S_DbNome & " ." , vbOKOnly + vbInformation, _
"Compactação"
'Limpa o erro. Não é obrigatório mais é de bom
'costume fazer.
Err.Clear
End Sub
Kill >>> Esta expressão DELETA o arquivo especificado do HD, mais deve ser usada com cuidado. Este arquivo deletado NÃO será armazenado na lixeira. Para usa-la, vc deve se certificar que o arquivo realmente exista.
Name >>> A instrução Name, copia um arquivo para outro local com 'outro nome'. No lugar do segundo CompactDatabase, vc poderia usar a instrução Name. Isto é só uma questão de escolha. Eu coloquei assim como ilustração, mais os dois modos funcionam. Cuidado: como na instrução CompactDatabase, na instrução Name o arquivo que será copiado tem que existir, caso contrário dará erro.
valeu t+