Maestros del Web


Estás en Inicio / Editorial / Flash

24.10.2006

Tutorial de Bases de datos y XML para Flash utilizando ASP

El siguiente tutorial propone la utilización de un archivo de tipo XML como intermediario entre la base de datos y el Flash.

Cada vez con más frecuencia los desarrolladores de sitios en Flash necesitan mostrar contenidos dinámicamente, tomando datos de fuentes externas. Existen diversos tipos de fuentes de datos que pueden utilizarse, pero cuando se trata de datos más o menos complejos y con una estructura jerárquica suele recurrirse a bases de datos.

Presentación de la base de datos

El desarrollo del tutorial está realizado utilizando una base Access muy sencilla, pero el ejemplo puede adecuarse a bases más potentes, como SQL Server, con muy pequeñas modificaciones.
Supongamos que tenemos que tomar datos de una base que utiliza solo 3 tablas, con la estructura que se detalla en la siguiente figura:

El ejemplo se refiere a una compañía que dispone de Representantes en distintos países y se propone mostrar en su web realizada en Flash los datos de cada uno para que sus clientes contacten al representante más cercano.
Se trata de una estructura jerárquica de datos que nos proponemos respetar cuando consultemos la base (bd_tutorial.mdb).

Supongamos que la empresa carga los datos a través de un Panel de Cliente realizado en algún lenguaje de programación del lado del servidor (ASP o PHP). Los datos de muestra son los siguientes:

Trabajando en ASP y XML

Nuestro trabajo consistirá en lograr tres objetivos:

  • Recoger los datos de la base mediante consultas SQL alojándolos transitoriamente en objetos de tipo Recordset.
  • Volver a grabar esos datos en formato XML, que respetará la estructura jerárquica y que es de muy fácil acceso desde el Flash.
  • Realizar una película en Flash que lea los datos XML y los muestre a los visitantes.

Los primeros dos objetivos los realizaremos utilizando una página ASP (entorno Windows) que denominaremos representantes.asp.
El tercero será desarrollado íntegramente en la parte 2 de este tutorial: de XML a Flash.

Comentaremos a continuación los aspectos claves del código de representantes.asp.
Antes que nada, nuestra página activa deberá conectarse a la base y realizar sobre ella las consultas SQL que recojan los datos de forma ordenada dentro de los objeto Recordset.

Conectarse a la base bd_tutorial.mdb

Dim Conn, ConnStr
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
ConnStr = ConnStr & Server.MapPath("data/bd_tutorial.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = adModeReadWrite
Conn.ConnectionString = ConnStr
Conn.Open

Realizar la primera consulta SQL

Una vez conectados a la base debemos realizar la primera consulta SQL, que recuperará la lista de los datos ubicados más alto en la jerarquía, en nuestro caso las Áreas Geográficas. Debemos armar la consulta de tal modo de obtener únicamente aquellas áreas que tengan algún país asociado.

Si algún área no tuviera todavía países asociados la consulta lo ignorará, como ocurre con "Asia" en la base de muestra.
Si algún área posee más de un país asociado, lo que es lógico que ocurra, aparecerá varias veces (tantas como países tenga) por lo que utilizamos el predicado DISTINCT para obtener cada área una sola vez.

El código sería el siguiente:

Dim strSQLAreas
strSQLAreas = "SELECT DISTINCT Areas.* FROM Areas INNER JOIN Paises ON Areas.IdArea =" & _ "Paises.AreaPais"
Set rsAreas = Server.CreateObject("ADODB.Recordset")
rsAreas.Open strSQLAreas, Conn, 1

En este momento estamos en condiciones de empezar a armar nuestro archivo XML.
La idea es ir armándolo y grabándolo línea a línea en el servidor mediante el objeto ASP FileSystemObject.
Para poder grabar deberemos disponer en el servidor de una carpeta que posea permiso de escritura, caso contrario obtendremos un mensaje de error.

En nuestro ejemplo utilizamos una carpeta denominada XML y nuestro archivo representantes.xml tendrá las siguientes características:

  • Tendrá un nodo (primer hijo) llamado arbitrariamente lista.
  • Dentro de lista tendremos tantos nodos area (hijos de lista) como áreas tengamos.
  • Dentro de cada nodo area tendremos tantos nodos pais (hijos de cada area) como países tenga esa área.
  • Dentro de cada nodo pais tendremos tantos nodos representantes como representantes tenga ese país.

Los nombres de cada Area, cada País y los datos de cada Representante (nombre, apellido, etc.) los incluiremos como atributos de cada nodo bajo la forma de pares nombre = valor (por ejemplo: apellido="Gonzalez").
En resumen, la estructura será la siguiente:

<lista>
<area nombre="xx">
<pais nombre="yy">
<representante nombre="zz" apellido="zz" telefono="zz" email="zz">
</representante>
<representante nombre="zz" apellido="zz" telefono="zz" email="zz">
</representante>
</pais>
</area>
</lista>

Volviendo al código ASP, la lógica que seguiremos consiste en analizar para cada Area (bucle Do While #1) qué Países hay, para cada País (bucle Do While #2) qué Representantes hay y para cada Representante (bucle Do While #3) cuáles son sus datos.

Ya disponemos de las Areas (en el Recordset rsAreas que obtuvimos más arriba) por lo que podemos armar los bucles y la escritura del XML de la manera que sigue:

El resto del código

dim fso, archivo
Set fso = createobject("scripting.filesystemobject")
Set archivo = fso.CreateTextFile(Server.MapPath("xml/representantes.xml"), True)
archivo.WriteLine("<?xml version='1.0' encoding='ISO-8859-1'?>")
archivo.WriteLine("<lista>")
If rsAreas.RecordCount = 0 Then
'***no hay Areas con países asociados => xml vacío /***
archivo.WriteLine("</lista>")
Else
rsAreas.MoveFirst
'Bucle Do While #1 - para cada Area
Do While Not rsAreas.EOF
'escribimos el nodo XML
archivo.WriteLine("<area nombre='" & rsAreas("NombreArea") & "'>")
'buscamos los Países del Area que tengan Representantes, sin duplicados: DISTINCT
strSQLPaises = "SELECT DISTINCT Paises.IdPais, Paises.NombrePais FROM Paises " & _
"INNER JOIN Representantes ON Paises.IdPais = Representantes.PaisRepres " & _
" WHERE Paises.AreaPais =" & rsAreas("IdArea")
Set rsPaises = Server.CreateObject("ADODB.Recordset")
rsPaises.Open strSQLPaises, Conn, 1
If rsPaises.RecordCount <> 0 Then
'Bucle Do While #2 - para cada País
Do While Not rsPaises.EOF
'escribimos el nodo XML
archivo.WriteLine("<pais nombre='" & rsPaises("NombrePais") & "'>")
'buscamos los Representantes del País
strSQLRepre = "SELECT * FROM Representantes WHERE " & _
"PaisRepres=" & rsPaises("IdPais")
Set rsRepre = Server.CreateObject("ADODB.Recordset")
rsRepre.Open strSQLRepre, Conn, 1
If rsRepre.RecordCount <> 0 Then
'Bucle Do While #3 - datos de cada Representante
Do While Not rsRepre.EOF
'escribimos el nodo XML
archivo.WriteLine("<representante ciudad='" & rsRepre("CiudadRepres") &
 "' nombre='" & rsRepre("NombreRepres") &' apellido='" & rsRepre("ApellidoRepres") &
"' telefono='" & rsRepre("TelefonoRepres") & "' email='" & rsRepre("EmailRepres") & "'>")
'cerramos el nodo de cada Representante archivo.WriteLine("</representante>")
rsRepre.MoveNext
Loop
'cerramos y destruimos el recordset de Representantes
rsRepre.Close
Set rsRepre = Nothing
End If
'cerramos el nodo de cada País
archivo.WriteLine("</pais>")
rsPaises.MoveNext
Loop
'cerramos y destruimos el recordset de Países
rsPaises.Close
Set rsPaises = Nothing
End If
'cerramos el nodo de cada Area
archivo.WriteLine("</area>")
rsAreas.MoveNext
Loop
'cerramos y destruimos el recordset de Areas
rsAreas.Close
Set rsAreas = Nothing
'cerramos el nodo principal
archivo.WriteLine("</lista>")
archivo.Close
End If

En este punto tenemos una página ASP (representantes.asp) que cada vez que se ejecuta toma los datos que existan en la base y los graba en un archivo con formato XML (representantes.xml).
El archivo XML así generado puede verse en cualquier editor de textos aunque es mejor utilizar algún editor XML como XML Editor o Notepad.

Resultaría conveniente (por no decir indispensable) hacer que representantes.asp se ejecute cada vez que se realiza algún cambio en la base a través del panel que utiliza la empresa para actualizar sus datos. De ese modo garantizaremos que siempre se leerán los datos más recientes disponibles.

En la parte 2 de este tutorial: "de XML a Flash", desarrollaremos una película Flash con la programación necesaria en ActionScript para leer y mostrar dinámicamente el contenido de nuestro archivo XML, respetando exactamente la estructura de los datos guardados en la base.

Este tutorial fue publicado originalmente en rakidwam.com.ar por Fernando Campaña.

Califica esta nota:

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (5 votos, promedio: 2.4 de 5)
Loading ... Loading ...
Fernando Campaña

Sobre el autor

Fernando Campaña
Diseñador y desarrollador web, reside en Argentina y actualmente es encargado del sitio rakidwam.com.ar.

Si eres nuevo en Maestros del Web y te agradan nuestras publicaciones, te invitamos a suscribirte a nuestro Feed.

Sindícanos en: Google Reader, Bloglines, My Yahoo o My MSN | ¿Qué es el Feed?

Comentarios

16 comentarios en total.

  1. Gaston 24.10.2006 - 14:29 - #

    Buen desarrollo de la informacion,
    me falto leer la parte 2 que no la encuentro.
    Abrazos

  2. Trulala 25.10.2006 - 06:28 - #

    Casualmente estaba buscando algo como esto. Espero con ganas la próxima lección 2.
    Gracias

  3. marta 28.10.2006 - 11:11 - #

    porque me gustan

  4. mare 31.10.2006 - 08:08 - #

    Tambien estoy esperando la parte 2

  5. vvv 29.12.2006 - 16:59 - #

    vvvvv

  6. CLAUDIO 11.01.2007 - 11:29 - #

    A LA ESPERA DE OTRO MATERIAL, EL PRIMERO ESTA BUENO.

  7. Matias 27.02.2007 - 07:13 - #

    un komentario muy peke respecto a este tutorial

    lo e visto en muxas partes igual
    no hay una manera mas sencillas de recoger datos desde access por medio de asp y poder publicar kon flash?

    Muxas gracias igual por la info ta wena

  8. yttrg 08.03.2007 - 15:49 - #

    wqwreqweqwewqe

  9. yo 15.03.2007 - 17:33 - #

    ta bien chico falta muchos puntos va bien

  10. BCN 09.04.2007 - 08:29 - #

    No os pone de los nervios el Access?

  11. Alejandro 09.06.2007 - 17:12 - #

    El ejemplo expuesto es muy bueno pero me gustaria saber mucho mas con lo qu es la coneccion de base de datos con flash, me gustaria recibir una respuesta a mi inquietud gracias

  12. james 13.06.2007 - 18:14 - #

    como crear una base de datos en mi mail con todos los contactos?

  13. james 13.06.2007 - 18:16 - #

    como crear una base de datos en mi mail con todos los contactos?

  14. Dani 25.07.2007 - 10:11 - #

    la segunda parte esta en http://www.maestrosdelweb.com/editorial/basexmlflashp2/
    fijaos en la barra de direccion de vuestro navegador, cambiad el 1 por el 2 y listo….

    Excelente CURSO (segun educagratis.cl)

  15. Ader 06.09.2007 - 16:26 - #

    la parte i y 2 está muy buena felicitaciones

  16. USA poker tournamnets 03.03.2008 - 19:25 - #

    Court strung some poker tournamnets. The case is speechlessly likely. It’s living to be befell! As everyone knows, this fun computer angrily forbade regardless of some selected poker online tournamnets. Actually, one uncertain study ironically knitted alongside the underground poker online tournamnets. A negative meeting hid considering that mighty activity.
    USA poker tournamnets - http://www.usapokertournament.com/

Deja tu Comentario


Maestros del Web se reserva el derecho de moderación de los comentarios. Evita utilizar palabras soeces, ataques directos, descalificativos, insultos, de lo contrario tu comentario será eliminado.


Boletín

Agrega nuestro feed a  Netvibes
wikio Add to Technorati Favorites

-


Maestros del Web es el punto de encuentro para los entusiastas de la red.

Creative Commons by-nc-sa 3.0 | Política de Privacidad | CMS: Wordpress