COMPACTAR DB.

ADRIANO 03/09/2007 17:12:14
#233925
Olá!

Estou com o seguinte problema, preciso compactar um banco de dados access usando ado, criei uma função que faz isso, mas o banco depois de compactado simplesmente da erro e não abre mais.

O erro que ocorre qdo tento abrir é o seguinte: "Unrecognized database format."

Estou usando access 97 e a função que estou usando é a seguinte:

'Compacta banco de dados, para chamar somente se o banco de dados estiver fechado.
'Tem que declarar a utilização da referencia: Microsoft Jet and Replication objects 2.6 Library.
[c]Public Function SIS_Conexao_Compactar_DB(ByVal DB_ORIGEM As String, ByVal DB_DESTINO As String, Optional SENHA As String) As Boolean
On Error GoTo Trata_Erros
Dim JE As JetEngine

Set JE = New JetEngine

'Descobre se o arquivo destino existe...
If Not Dir$(DB_DESTINO) = vbNullString Then
'Se existe, deletamos
Kill DB_DESTINO
End If

If Trim(SENHA) = vbNullString Then
'Compacta BD sem senha.
JE.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DB_ORIGEM & ";", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DB_DESTINO & ";Jet.OLEDB:Engine Type = 5;"
Else
'Compacta BD com senha.
JE.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DB_ORIGEM & ";Jet OLEDB:Database Password=" & SENHA, _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DB_DESTINO & ";Jet.OLEDB:Engine Type = 4;"
End If
'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

SIS_Conexao_Compactar_DB = True
Set JE = Nothing

Exit Function

Trata_Erros:
SIS_Conexao_Compactar_DB = False
Set JE = Nothing
End Function

[/c]

Já tentei reparar o banco mais acontece o mesmo erro que postei acima.

Preciso resolver isso logo, quero um jeito que permita que o banco seja aberto depois...

Aguardo respostas, obrigado.
ADRIANO 04/09/2007 15:09:43
#234078
Será que ninguém aqui já compactou um db access usando ado???

Ou taum com preguiça de ler????

No aguardo meu povo!

Abraço.
USUARIO.EXCLUIDOS 04/09/2007 17:05:08
#234125
Resposta escolhida
Tente isso companheiro;

Ao invés de JE as JetEngine >> JE as jro.JetEngine;

e então:

CNString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

Origem = {caminho da base}
Destino = Left({caminho da base}, Len({caminho da base}) - {qtd de caracteres do nome da base}) & "Temp.mdb" 'isso é para gerar um arquivo temporário no mesmo local da base.

CNP.CompactDatabase CNString & Origem, CNString & Destino

FileCopy Destino, Origem
Kill Destino


USUARIO.EXCLUIDOS 04/09/2007 17:06:27
#234127
CORREÇÂO!!

no seu caso, onde se lê:
CNP.CompactDatabase CNString & Origem, CNString & Destino

entende-se:
je.CompactDatabase CNString & Origem, CNString & Destino
ADRIANO 05/09/2007 13:04:27
#234267
Pode crer...

Agora funcionou....

Obrigado!
Tópico encerrado , respostas não são mais permitidas