ADO/JRO - Compactação de uma base de dados Access remota


Em um artigo recente - Compactando uma base de dados Access  - mostramos como compactar uma base de dados Access usando uma extensão da ADO: Microsoft Jet OLE DB Provider and Replication Objects (JRO).

Voltamos ao assunto para mostrar como fazer o mesmo serviço em base de dados remotas, ou seja,  vamos compactar uma base de dados Access 2000 (ou Access 97) que esta em um  servidor da web.

Para isto iremos criar um arquivo de script ASP chamado compacta.asp que irá executar o mesmo procedimento abordado no artigo anterior citado. As mudanças no código ocorrerão por conta da maneira de usar a ADO com o VBScript , ASP  e o código HTML. Vamos lá...

Compactação ON-Line

Vamos criar um único arquivo que conterá o código necessário para compactar o nosso banco de dados remoto. Este arquivo terá uma função que realizará a compactação propriamente dita e deverá exibir um formulário onde o usuário deverá informar a localização do banco de dados que será compactado.

Ao executar o arquivo compacta.asp será exibida a seguinte tela:  Ela apresenta o formulário onde o usuário vai informar o caminho e o nome da base de dados e se a versão do Access é a 97.

O código do arquivo compacta.asp é o seguinte:

<%
option explicit

Function CompactaDB(CaminhoDB,Access97)
Dim fso, Engine, strCaminhoDB
strCaminhoDB = left(CaminhoDB,instrrev(CaminhoDB,"\"))
Set fso = CreateObject("Scripting.FileSystemObject")

If fso.FileExists(CaminhoDB) Then
      Set Engine = CreateObject("JRO.JetEngine")
      If Access97 = "True" Then
          
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CaminhoDB, _
           "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strCaminhoDB & "temp.mdb;" _
           & "Jet OLEDB:Engine Type=4"

      Else
          
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CaminhoDB, _
           "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strCaminhoDB & "temp.mdb"

      End If
     
fso.CopyFile strCaminhoDB & "temp.mdb",CaminhoDB
      fso.DeleteFile(strCaminhoDB & "temp.mdb")
      Set fso = nothing
      Set Engine = nothing

      CompactaDB = "Seu banco de dados, " & CaminhoDB & ", foi compactado com sucesso" & vbCrLf
Else
      CompactaDB = "O Caminho ou o banco de dados não foi localizado.Tente outra vez..." & vbCrLf
End If

End Function
%>
<html><head><title>Compactação ON-LINE</title></head><body>

<h2 align="center"> Compactando uma base de dados Access Remota</h2>
<p align="center">
<form action=compacta.asp>
  Informe o caminho relativo da base de dados incluindo o nome do banco de dados.<br><br>
  <input type="text" size="50" name="CaminhoDB"><br><br>
  <input type="checkbox" name="Access97" value="True">Clique Aqui se a versão for Access 97<br><i> ( Access 2000 é o padrão )</i><br><br>
  <input type="submit" value="Iniciar Compactação">
<form>

<br><br>
<%
Dim CaminhoDB,Access97
CaminhoDB = request("CaminhoDB")
Access97 = request("Access97")

If CaminhoDB <> "" Then
   CaminhoDB = server.mappath(CaminhoDB)
   response.write(CompactaDB(CaminhoDB,Access97))
End If
%>
</p>

</body>

</html>

A linha de código - Set fso = CreateObject("Scripting.FileSystemObject") - cria a variável objeto fso usando o método CreateObject.(leia o  artigo Usando o FileSystemObject - FSO - Tratando arquivos e diretórios) e a seguir verifica se o arquivo que desejamos compactar existe - If fso.FileExists(CaminhoDB) Then. Se o arquivo existir verificamos se a base de dados é a versão Access 97 ou Access 2000 para efetuar a compactação usando o formato correto para versão correspondente do Jet. Asssim temos:

         Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CaminhoDB, _
           "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strCaminhoDB & "temp.mdb;" _
           & "Jet OLEDB:Engine Type=4"

         Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CaminhoDB, _
           "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strCaminhoDB & "temp.mdb"

A tela abaixo é exibida após a compactação ser realizada.

Após preencher o formulário e clicar no botão - Iniciar Compactação - a ação executada será o processamento do arquivo compacta.asp ( <form action=compacta.asp> ).

O código a seguir irá verificar se o caminho informado é valido e então chama a função : CompactaDB() passando os parâmetros : CaminhoDB ( o caminho e o nome da base de dados ) e Access97 que indica se a versão da base de dados é a versão 97.

If CaminhoDB <> "" Then
   CaminhoDB =
server.mappath(CaminhoDB)
   response.write(CompactaDB(CaminhoDB,Access97))
End If

Nota: O método MapPath permite que você determine o caminho físico no servidor informando um caminho virtual ou relativo.

É isso ai...  


 José Carlos Macoratti / Adaptado de um artigo da Aspalliance