Internet:nuevas formas de publicar tus
tablas Fox
Por Alberto Rodriguez
© Copyrights 1997 by FoxPress, All rights reserved
FoxPress, Abril 1997
La publicación de información en Internet sigue siendo uno de los temas de actualidad. Ya no es la publicación estática sino la forma de transmitir la información guardada en las Bases de Datos a Internet de una forma fácil y asequible.
En el número de Septiembre de 1996 de FoxPress ya se publicó una forma de mostrar información sacada de tablas .DBF usando NT 4.0 e Internet Information Server 2.0
En ese artículo se mostraba una foma válida de publicitar información en Internet y que era el sistema que en esencia se utilizaba en www.datapress.com. La tecnología que se usaba se basaba en invocar a ficheros planos .IDC que recogían consultas de órdenes SQL que invocaban al ISAPI y posteriormente según unas plantillas que se guardaban en ficheros con la extensión .HTX se devolvía la información resultante al browser que la había solicitado
Desde aquel número las cosas han evolucionado y se puede decir que aquella tecnología ha quedado ya obsoleta.
En este número nos proponemos mostrar la forma de publicitar información en Internet usando la tecnología de Páginas de Servidor Activo (Active Server Pages), que vienen con el IIS 3.0 y utilizando dos técnicas: la primera, con el novedoso ActiveX Data Object (ADO), y la segunda acudiendo a OLE
Para más adelante quedará otra forma de mostrar información en Internet como es el uso del FOXISAPI.DLL
Las Páginas Activas
Microsoft ha introducido con la versión 3.0 del IIS un nuevo concepto llamado Páginas Activas, Pero, ¿qué son estas páginas? ¿Son realmente activas? Hagamos un poco de historia:
Páginas de Contenido Estático
En un principio las páginas tenían un contenido estático, es decir, debías cambiar manualmente el contenido de las páginas para que se pudiera mostrar un tipo diferente de información. En este modelo estático un browser usa el protocolo Hypertext Transport Protocol (HTTP) para solicitar una página HTML a un servidor Web. El Servidor recibe la petición y envía una página HTML al browser, que interpreta y muestra la página. Este modelo, aunque es válido, facilita una forma limitada de interactuar con la página Web ya que se debe cambiar manualmente la página HTML para poder modificar el contenido.
Páginas HTML dinámicas
Se consiguieron mediante el uso de gateways tales como el Common Gateway Interface (CGI), el Internet Server Application Programming Interface (ISAPI), etc... De esta manera un browser puede enviar una petición HTTP a una aplicación, que en realidad es un ejecutable, más que intentar dialogar con un archivo estático de formato HTML. El servidor ejecuta la aplicación, que lee los datos que se le solicitan y responde creando una página HTML con los datos solicitados. Esta nueva página HTML que se crea en ese momento se envía al browser. El problema de estos sistemas es que esos programas son difíciles de crear y cambiar. Los programas de tipo gateway no están integrados en las páginas HTML y requieren un proceso de creación diferente a los archivos HTML.
Servidor Activo de Páginas
Los Servidores Activos de Páginas son en realidad una colección de extensiones que se añaden al servidor HTTP y que hace que el código Visual Basic Script y Java Script de las páginas HTML sea traducido íntegramente a formato HTML.
Al recibir una petición, el Servidor HTTP toma el fichero que tiene la extensión .ASP, comprueba si tiene algún tipo de código Visual Basic Script o Java Script y lo traduce a HTML, de forma que el código que entrega al browser es puro código HTML. El código Visual Basic Script o JavaScript no viajaría por la red sino sólo el código HTML.
Un ejemplo de lo anterior es:
Antes (con el IIS 2.0), si teníamos en la máquina servidor un fichero con el siguiente código:
<HTML>
<HEAD>
<TITLE>Crea un 'Hello World' incrementando el
tamaño</TITLE></HEAD>
<BODY BGCOLOR=#FFFFFF>
<%for i = 3 to 7 %>
<FONT SIZE=<%= i
%>>Hello World</FONT><BR>
<%next %>
<BR>
<BR>
</BODY>
</HTML>
este mismo código viajaría por la red, y si el cliente remoto mira en la opción View/Source(Ver/Fuente) del Explorer se le mostraría exactamente el mismo código que tenemos en nuestro fichero. El browser lo ejecutaría como hasta ahora. El problema que se presenta es que si el browser es Netscape no entendería el código Visual Basic Script.
Con las páginas Activas, tenemos el mismo código fuente. Pero si el Servidor de HTTP comprueba que el fichero tiene la extensión .ASP traducirá todo el código VB Script o JavaScript a formato HTML. En nuestro ejemplo, traduciría el anterior código y entregaría el que se trascribe a continuación. Mirando en el Explorer (opción Ver/Fuente) pasaríamos a tener:
<HTML>
<HEAD>
<TITLE>Crea un 'Hello World' incrementando el
tamaño</TITLE></HEAD>
<BODY BGCOLOR=#FFFFFF>
<FONT SIZE=3>Hello
World</FONT><BR>
<FONT SIZE=4>Hello World</FONT><BR>
<FONT SIZE=5>Hello World</FONT><BR>
<FONT SIZE=6>Hello World</FONT><BR>
<FONT SIZE=7>Hello World</FONT><BR>
<BR>
<BR>
</BODY>
</HTML>
ActiveX Data Objects
Una vez entendido lo que son las Páginas Activas, vamos a ver la forma de usar ActiveX Data Objects en un Servidor de Páginas Activas (ASP) para acceder a datos en una Base de Datos de Visual FoxPro.
Requerimientos:
Para poder probar los ejemplos que vamos a mostrar se necesita:
Paso a Paso
Origen de Datos:
ODBCfox51
Base de Datos:
VFP\Samples\tastrade\data\tastrade.dbc
4. A continuación, con cualquier editor o con el FrontPage97 creamos una página HTML que guardaremos con la extensión .ASP en el directorio IIS/wwwroot/scripts:
<HTML>
<HEAD>
</HEAD>
<BODY>
<%
Set Conn =Server.CreateObject("ADODB.Connection")
Conn.Open "ODBCfox51"
Set RS = Conn.Execute("SELECT * FROM tastrade!customer")
Do While Not RS.EOF
%>
<%=
RS("company_name") %>
<TR>
<%RS.MoveNext
Loop
RS.Close
Conn.Close
%>
</BODY>
</HTML>
El resultado lo veremos en el Explorer escribiendo la dirección:
HTTP:// <nombre del Servidor HTTP>/Scripts/ejemp1.asp
Y ya está.
En el ejemplo anterior hemos definido de forma visual el Origen de Datos y luego lo hemos invocado.
Otra forma de trabajar es definir el origen de datos desde dentro del código VB Script de la siguiente manera:
Contenido
de la página ASP
--------------------------
<%@
LANGUAGE="VBSCRIPT" %>
<HTML>
<HEAD>
<TITLE>VFP ASP ADO Test</TITLE>
</HEAD>
<BODY>
<H3>ActiveX Data Object (ADO)</H3>
<%
Set Conn =
Server.CreateObject("ADODB.connection")
ConnStr= "Driver=Microsoft Visual Foxpro Driver;
"+_"UID=;SourceType=DBC;SourceDB=C:\VFP\Samples\Tastrade\Data\Tastrade.dbc"
Conn.Open ConnStr 'Esto
puede ser un datasource o una cadena de conexión
Set cmdTemp = Server.CreateObject("ADODB.Command")
Set rs = Server.CreateObject("ADODB.Recordset")
SQLText="Select Distinct
Products.Product_ID,Products.Product_Name,"+ _
"Products.English_Name,Products.Unit_Price, " + _
"Products.Quantity_In_Unit
from Tastrade!Products"
cmdTemp.CommandText = SQLText
cmdTemp.CommandType = 1 'Orden SQL
Set cmdTemp.ActiveConnection = Conn
rs.CacheSize = 10
rs.Open cmdTemp,,adopenstatic
%>
<P>
<TABLE BORDER=1>
<TR>
<% For i = 0 to RS.Fields.Count - 1 %>
<TD><B><% = RS(i).Name %></B></TD>
<% Next %>
</TR>
<% Do While Not RS.EOF %>
<TR>
<% For i = 0 to RS.Fields.Count - 1 %>
<TD VALIGN=TOP><% = RS(i) %></TD>
<% Next %>
</TR>
<%
RS.MoveNext
Loop
RS.Close
Conn.Close
%>
</TABLE>
<BR>
<BR>
</BODY>
</HTML>
En este ejemplo hemos usado los objetos del ADO llamados:
Para más información sobre el uso de esos objetos me remito a la documentación
Usando OLE para mostrar información en Internet
Visual FoxPro 5.0 es un servidor OLE, lo que quiere decir que puede ser invocado por cualquier cliente OLE para pedirle información. Esta petición se puede hacer incluso faltaría más a través de Internet.
La poderosa orden createobject() nos permite crear una instancia de la aplicación tanto en la máquina cliente como en un Servidor de nuestra red local como en Internet.
Desde cualquier aplicación cliente OLE podemos crear una instancia de VFP 5.0 con la orden:
CREATEOBJECT(VisualFoxPro.application)
y cambiar propiedades e invocar métodos.
El siguiente código:
x1 = ; CreateObject("VisualFoxPro.Application")
? x1.application.name
nos devolvería: Visual FoxPro
Pero no sólo VFP es un Servidor OLE sino que las aplicaciones que nosotros realicemos también serán si así lo especificamos Servidoras OLE.
El siguiente código que ya apareció en un número anterior de FoxPress nos permite crear un Servidor OLE:
DEFINE CLASS persona AS CUSTOM OLEPUBLIC
Nombre = "Pepe"
Apellidos = "García"
PROCEDURE DarNombre
RETURN this.Nombre + " "+ This.Apellidos
ENDPROC
ENDDEFINE
Una vez compilado y autoregistrado, desde la ventana de órdenes del cliente se podría escribir:
ox = CREATE
("prueba.personas")
? ox.nombre
que nos devolvería la palabra Pepe
En el ejemplo que se va a mostrar se trata de usar esta técnica para publicitar los datos de una Tabla en Internet.
Paso a Paso
set default to c:\tmp
SELECT * FROM clientes into cursor cursor1
cHTML = ""
FOR i = 1 to _Tally
cHTML = cHTML + AllTrim(cursor1.nombre) + Chr(10)
cHTML = cHTML + AllTrim(cursor1.cod_cli) + Chr(10)
cHTML = cHTML + "<P><BL>"
skip
endfor
Return cHTML
<HTML>
<HEAD>
<TITLE>Consulta de Clientes</TITLE>
</HEAD>
<BODY>
<%
' Se usa VFP como Servidor de Automatización OLE para obtener
información de los clientes
Set CustObj = CreateObject("proj1.base")
x = CustObj.peticion
Response.Write x%></font></h2>
</BODY>
</HTML>
Nota: es especialmente importante la línea:
SET DEFAULT TO C:\TMP
Ya que cuando se registra en Windows el Servidor OLE queda por defecto en el directorio System32.
Espero que estos dos sistemas nos faciliten la forma de mostrar los datos de Internet.
Alberto Rodríguez es socio de Fox Software, S.L. y se puede entrar en contacto con él en alb@datapress.com