ASP - Gerando XML a partir de uma tabela Access


Active Server Pages - ASP - revolucionou a criação de páginas dinâmicas para Web. Quem não se lembra de sua primeira página ASP e da sensação de 'vitória' por ter conseguido criar uma página dinâmica que gera dados a partir da interação com o usuário.

Apesar das muitas críticas , é claro que ASP esta longe de ser perfeita , temos que confessar :  "sem ASP talvez a história do desenvolvimento para web hoje não fosse a mesma coisa".

Creio que o grande mérito das tecnologias que cativam , fazem sucesso e teimam em continuar a serem usadas apesar de tudo é sua simplicidade e facilidade de utilização. Com certeza uma dessas tecnologias é ASP.

Neste artigo vou mostrar como gerar arquivo XML de forma dinâmica ( on the fly) a partir de uma tabela Access.

Suponha que você tenha uma tabela com os dados do seus clientes e que precise gerar uma página com visualização XML dos dados dos seus clientes. Com ASP isto é moleza...

As etapas as serem cumpridas são : (é claro que existem diversas outras possibilidades com nível de complexidade e refinamento maior)

Abaixo o jeitão de uma possível página HTML

A partir principal do código esta no link vinculado ao texto - Gerar XML - o seu código é dado a seguir :

<font face="Arial Black"><b><a href="geraxml.asp">Gerar XML</font></a></b></font></p>

O arquivo geraxml.asp é que irá fazer todo o serviço. Seu código e visto a seguir:

<%@ LANGUAGE="VBSCRIPT" %>
<%
'Variáveis
Dim sql
Dim rst
Dim bd
Dim provedor 
'Instrução SQL - selecionando registros da tabela clientes
sql = "Select * from clientes "

'Definindo um provedor e instanciando e abrindo um objeto conexao
provedor = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="& Server.MapPath("\dados\clientes.mdb")
Set bd = Server.CreateObject("ADODB.Connection")
bd.Open provedor

'Instanciando e abrindo objeto recordset
Set rst = Server.CreateObject("ADODB.RecordSet")
rst.Open sql, bd, 3, 3

'O contentType é o responsável pelo conteúdo da página, 
'informamos que o browser apresentará resposta em XML
Response.ContentType="text/xml"
%>
<!--Tags XML com campos da fonte de dados clientes-->
<?xml version="1.0" encoding="iso-8859-1"?>
<clientes>
<%Do while Not rst.EOF%>
  <cliente>
      <nome><%=rst(1).value%></nome>
      <cidade><%=rst(3).value%></cidade>
      <cep><%=rst(2).value%></cep>
      <estado><%=rst(4).value%></estado>
   </cliente>
<%rst.MoveNext : Loop%>
</clientes>
<%
'Fechando os objetos criados
rst.close
Set rst = nothing
bd.close
Set bd = nothing
%>

No código acima destacamos:

- A string de conexão usando um provedor OLE DB . (preferível a uma conexão ODBC.)
A string para conexão ODBC seria : "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\dados\clientes.mdb")
- A abertura do recordset usa os parâmetros numéricos -
rst.Open sql, bd, 3, 3 - pois não estou usando o arquivo adovbs.inc . A correspondência é exibida na tabela abaixo  :

'---- valores para CursorTypeEnum ----
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

'---- valores de LockTypeEnum ----
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

'---- valores de CursorLocationEnum ----
Const adUseServer = 2
Const adUseClient = 3

- O contentType e a tag de cabeçalho para o arquivo XML devem ser cuidadosamente declarados:

Response.ContentType="text/xml"
%>
<!--Tags XML com campos da fonte de dados clientes-->
<?xml version="1.0" encoding="iso-8859-1"?>

- Eu estou usando os índices para se referir aos campos do recordset : rst(1) , rst(2) , rst(3) e rst(4) (não é muito legível mas é mais rápido)
- Atenção cuidado com o caminho do arquivo .mdb . Para testar o script não esqueça de alterar conforme sua configuração.

Ao clicar no link o arquivo de script acima irá gerar o arquivo XML conforme abaixo:

Para gerar o arquivo em disco poderiamos usar o objeto FileSystemObject. (que tal exercitar ??)

Pegue os arquivos do artigo artigo : aqui:

Eu sei , é apenas ASP , mas eu gosto... 


José Carlos Macoratti