Monografias | Manual ASPManual ASPResumen: Crear una página ASP. Agregar secuencias de comandos del servidor. Combinar HTML y comandos de secuencias de comandos. Utilizar directivas ASP. Alcance de las variables. Actualizar registros.~~Un archivo de páginas Active Server (ASP) es un archivo de texto con la extensión .asp que contiene cualquier combinación de lo siguiente. MANUAL ASP Crear una página ASP Un archivo de páginas Active Server (ASP) es un archivo de texto con laextensión .asp que contiene cualquier combinación de lo siguiente: Un método rápido para crear un archivo .asp consiste en cambiar la extensiónde los archivos HTML (.html o .htm) por la extensión .asp. Si el archivo nocontiene funciones ASP, el servidor prescinde del proceso de secuencias decomandos ASP y envía el archivo al cliente. Como desarrollador Web, esta opciónproporciona una gran flexibilidad, ya que puede asignar a los archivos laextensión .asp incluso si no piensa agregar funciones ASP hasta más adelante. Para publicar el archivo .asp en Web, guarde el nuevo archivo en undirectorio virtual de su sitio Web (asegúrese de que el directorio tenga lospermisos Secuencia de comandos o Ejecución). A continuación, escriba en elexplorador la dirección URL del archivo para pedirlo. (Recuerde, las páginasASP debe enviarlas el servidor, por lo que no puede pedirlas mediante su ruta física.)Cuando el archivo se cargue en el explorador, observará que el servidor envióuna página HTML. Al principio puede parecer extraño, pero recuerde que elservidor analiza y ejecuta todas las secuencias de comandos ASP del servidorantes de enviar el archivo. El usuario siempre recibe código HTML estándar. Para crear archivos .asp, se puede utilizar cualquier editor de textos. Amedida que avance, puede que encuentre más productivo utilizar un editor másorientado a ASP, como Microsoft(r) Visual InterDev™. (Para obtener másinformación, visite el sitio Web de Microsoft Visual InterDev en la direcciónhttp://msdn.microsoft.com/vinterdev/.) Agregar secuencias de comandos del servidor Una secuencia de comandos del servidor es una serie de instrucciones que seutiliza para enviar al servidor Web comandos de forma secuencial. (Si yadesarrolló antes sitios Web, probablemente conozca las secuencias de comandosdel cliente, que se ejecutan en el explorador Web.) En los archivos .asp, lassecuencias de comandos se separan del texto y de las etiquetas HTML mediantedelimitadores. Un delimitador es un carácter o una secuencia decaracteres que marca el principio o el final de una unidad. En el caso de HTML,dichos delimitadores son los símbolos menor que (<) y mayor que (>), queenmarcan las etiquetas HTML. ASP utiliza los delimitadores <% y %> para enmarcar los comandos.Dentro de los delimitadores puede incluir cualquier comando válido dentro dellenguaje de secuencia de comandos que esté utilizando. El ejemplo siguientemuestra una página HTML sencilla que contiene un comando de secuencia decomandos: <HTML> <BODY> Esta página se actualizó por última vez el <%= Now ()%>. </BODY> </HTML> La función Now() de VBScript devuelve la fecha y la horaactuales. Cuando el servidor Web procesa esta página, reemplaza <%= Now()%> con la fecha y la hora actuales, y devuelve la página al explorador conel siguiente resultado: Esta página se actualizó el 1/29/99 2:20:00 p.m. A los comandos enmarcados por delimitadores se les llama comandosprincipales de secuencias de comandos, que se procesan mediante el lenguajeprincipal de secuencia de comandos. Todos los comandos utilizados dentro de losdelimitadores de secuencias de comandos deben ser válidos en el lenguajeprincipal de secuencia de comandos. De forma predeterminada, el lenguajeprincipal de secuencia de comandos es VBScript, pero también puede establecerun lenguaje diferente. Consulte Trabajar con lenguajes de secuencias decomandos. Si ya conoce las secuencias de comandos del cliente, ya sabrá que laetiqueta HTML <SCRIPT> se utiliza para delimitar las secuencias decomandos y las expresiones. También puede utilizar la etiqueta <SCRIPT>para las secuencias de comandos del cliente, siempre que necesite definirprocedimientos en múltiples lenguajes en un archivo .asp. Para obtener másinformación, consulte Trabajar con lenguajes de secuencias de comandos. Combinar HTML y comandos de secuencias de comandos Dentro de los delimitadores de ASP puede incluir cualquier instrucción,expresión, procedimiento u operador que sea válido en el lenguaje principalpara secuencia de comandos. Una instrucción, en VBScript y en otroslenguajes, es una unidad sintácticamente completa que expresa un tipo de acción,declaración o definición. La instrucción condicional If...Then...Elseque aparece a continuación es una instrucción de VBScript muy común: <% Dim dtmHour dtmHour = Hour(Now()) If dtmHour < 12 Then Saludos = "Buenos días" Else strGreeting = "Hola" End If %> <%= strGreeting %> Según la hora, la secuencia de comandos asigna el valor "Buenos días"o el valor "Hola" a la variable de cadena strGreeting. La instrucción<%= strGreeting %> envía al explorador el valor actual de la variable. De esta forma, los usuarios que vean esta secuencia de comandos antes de las12:00 de la mañana (según la zona horaria del servidor Web) verían lasiguiente línea de texto: Buenos días Los usuarios que vean esta secuencia de comandos después de las 12:00 de lamañana verían la siguiente línea de texto: Hola Puede incluir texto HTML entre las secciones de una instrucción. Porejemplo, la secuencia de comandos siguiente, que combina HTML dentro de unainstrucción If...Then...Else, produce el mismo resultado quela del ejemplo anterior: <% Dim dtmHour dtmHour = Hour(Now()) If dtmHour < 12 Then %> Buenos días <% Else %> Hola <%End If %> Si la condición es verdadera, es decir, si es antes del mediodía, elservidor Web envía al explorador el código HTML que sigue a la condición("Buenos días"); de lo contrario, envía el código HTML que sigue a Else("Hola"). Esta forma de combinar HTML y comandos de secuencia decomandos es cómoda para continuar la instrucción If...Then...Elseen varias líneas de texto HTML. El ejemplo anterior es más útil si deseapresentar un saludo en varias partes de una página Web. Puede asignar el valorde la variable una única vez y después presentarla varias veces. En lugar de mezclar texto HTML con comandos de secuencia de comandos, puededevolver texto HTML al explorador desde dentro de los comandos de secuencia decomandos. Para devolver texto al explorador, utilice el objeto integrado Responsede ASP. El ejemplo siguiente produce el mismo resultado que las secuencias decomandos anteriores: <% Dim dtmHour dtmHour = Hour(Now()) If dtmHour < 12 Then Response.Write "Buenos días" Else Response.Write "Hola" End If %> Response.Write Puede incluir procedimientos escritos en su lenguaje predeterminado desecuencias de comandos dentro de delimitadores ASP. Para obtener más información,consulte Trabajar con lenguajes de secuencias de comandos. Si va a trabajar con comandos JScript, puede insertar las llaves que indicanun bloque de instrucciones directamente en sus comandos ASP, incluso aunque esténentremezclados con etiquetas y texto HTML. Por ejemplo: <% if (screenresolution == "low") { %> Ésta es la versión de texto de la página. <% } else { %> Ésta es la versión multimedia de la página. <% } %> -O bien-
<% if (screenresolution == "low") { Response.Write("Ésta es la versión de texto de la página.") } else { Response.Write("Ésta es la versión multimedia de la página.") } %> Utilizar directivas ASP ASP proporciona directivas que no forman parte de los lenguajes de secuenciasde comandos: Dichas directivas son la directiva de resultado y la directiva deproceso. La directiva de resultado de ASP <%= expresión %>presenta el valor de una expresión. Dicha directiva es equivalente al uso de Response.Writepara presentar información. Por ejemplo, la expresión <%= ciudad %> envíaal explorador la palabra Barcelona (el valor actual de la variable). La directiva de proceso de ASP <%@ palabra clave %>ofrece a ASP la información que necesita para procesar un archivo .asp. Porejemplo, la siguiente directiva establece VBScript como lenguaje principal desecuencia de comandos de la página: <%@ LANGUAGE=VBScript %> Las directivas de proceso deben estar en la primera línea de los archivos.asp. Para agregar más de una directiva a una página, deben incluirse en elmismo delimitador. No ponga las directivas de proceso en los archivos incluidoscon la instrucción #include. Debe incluir un espacio en blancoentre el signo @ y la palabra clave. La directiva de proceso tiene lassiguientes palabras clave:
Importante Puede incluir más de una palabra claveen una única directiva. Los pares de palabra clave y valor deben estarseparados por un espacio. No ponga espacios ni antes ni después del signo igual(=).El ejemplo siguiente establece el lenguaje de secuencia de comandos y la páginade códigos: <%@ LANGUAGE="Jscript" CODEPAGE="932" %>
Espacio en blanco en las secuencias de comandos Si su lenguaje principal de secuencias de comandos es VBScript o JScript, ASPquita el espacio en blanco de los comandos. En otros lenguajes, ASP conserva elespacio en blanco para que los lenguajes que interpreten la posición o la sangríapuedan interpretarlo correctamente. El espacio en blanco incluye espacios,tabuladores, retornos y saltos de línea. En VBScript y JScript puede utilizar el espacio en blanco que sigue aldelimitador de apertura y que precede al de cierre para facilitar la lectura delos comandos. Todas las instrucciones siguientes son válidas: <% Color = "Green" %> <%Color="Green"%> <% Color = "Green" %> ASP quita el espacio en blanco que se encuentre entre los delimitadores decierre de las instrucciones y los delimitadores de apertura de las instruccionessiguientes. Sin embargo, se recomienda utilizar espacios para mejorar lalegibilidad. Si tiene que conservar el espacio en blanco entre dosinstrucciones, como cuando vaya a presentar los valores de las variables en unafrase, utilice el carácter de espacio de no separación de HTML ( ).Por ejemplo: <% 'Define dos variables con valores de cadena. strFirstName = "Juan" strLastName = "García" %> <P>Esta página Web está personalizada para "<%= strFirstName%> <%= strLastName %>." </P>
Utilizar variables y constantes Una variable es una ubicación de almacenamiento con nombre dentrode la memoria del equipo que contiene datos, como un número o una cadena detexto. A los datos contenidos en una variable se les llama valor de lavariable. Las variables ofrecen una manera de almacenar, recuperar y manipularvalores mediante nombres que ayuden a entender lo que hace la secuencia decomandos. Declarar y asignar nombre a variables Siga las reglas y recomendaciones de su lenguaje de secuencias de comandos ala hora de declarar variables y asignarles nombres. Incluso aunque no necesitadeclarar una variable para poder utilizarla, es conveniente hacerlo porque ayudaa prevenir errores. Declarar una variable significa indicar al motor desecuencias de comandos que existe una variable con un nombre concreto, de formaque pueda hacer referencia a la variable a lo largo de una secuencia decomandos. VBScript VBScript no necesita declaraciones de variables, pero es conveniente declarartodas las variables antes de utilizarlas. Para declarar una variable enVBScript, utilice la instrucción Dim, Publico Private. Por ejemplo: <% Dim NombreUsuario %> Puede utilizar la instrucción Option Explicit de VBScripten los archivos .asp para hacer obligatoria la declaración de variables con lasinstrucciones Dim, Private, Publicy ReDim. La instrucción Option Explicit debeaparecer después de las directivas ASP y antes del texto HTML o de los comandosde la secuencia de comandos. Esta instrucción sólo afecta a los comandos ASPescritos en VBScript; no afecta a los comandos escritos en JScript. <% Option Explicit %> <HTML> <% Dim strNombreUsuario Public lngNumeroCuenta %>
Alcance de las variables El alcance, o vida, de una variable determina qué comandos desecuencia de comandos pueden tener acceso a dicha variable. Una variabledeclarada dentro de un procedimiento tiene alcance local; la variablese crea y se destruye cada vez que se ejecuta el procedimiento. No se puedetener acceso a ella desde fuera del procedimiento. Una variable declarada fuerade un procedimiento tiene alcance global; su valor es accesible ymodificable desde cualquier comando de secuencia de comandos de una página ASP. Nota Al limitar el alcance de la variable a unprocedimiento mejorará el rendimiento.Si declara variables, una variable local y una variable global pueden tenerel mismo nombre. La modificación del valor de una de ellas no afecta al valorde la otra. Sin embargo, si no declara las variables, podría modificarinadvertidamente el valor de una variable global. Por ejemplo, los siguientescomandos de secuencia de comandos devuelven el valor 1 incluso aunque haya dosvariables llamadas Y: <% Option Explicit Dim Y Y = 1 SetLocalVariable Response.Write Y Sub SetLocalVariable Dim Y Y = 2 End Sub %> Por el contrario, los comandos siguientes devuelven el valor 2 porque lasvariables no se han declarado de forma explícita. Cuando la llamada alprocedimiento asigna a Y el valor 2, el motor de secuencias de comandos da porsupuesto que el procedimiento pretende modificar la variable global: <% Option Explicit Dim Y = 1 SetLocalVariable Response.Write Y Sub SetLocalVariable Y = 2 End Sub %> Para evitar problemas, adquiera el hábito de declarar explícitamente todaslas variables. Lo cual es especialmente importante si utiliza la instrucción #includepara incluir archivos en su archivo ASP. La secuencia de comandos incluida estácontenida en un archivo aparte, pero se trata como si formara parte del archivocontenedor. Es muy fácil olvidarse de que hay que utilizar nombres de variablesdiferentes en la secuencia de comandos principal y en la secuencia de comandosincluida, a menos que declare las variables. Asignar a las variables alcance de sesión o de aplicación Las variables globales sólo son accesibles en un mismo archivo ASP. Parahacer que una variable sea accesible en varias páginas, asigne a la variablealcance de sesión o de aplicación. Las variables con alcance de sesión estándisponibles en todas las páginas de una aplicación ASP que pida un mismousuario. Las variables con alcance de aplicación están disponibles en todaslas páginas de una aplicación ASP que pida cualquier usuario. Las variables desesión son una buena manera de almacenar información para un único usuario,como sus preferencias o el nombre o la identificación del usuario. Lasvariables de aplicación son una buena manera de almacenar información paratodos los usuarios de una determinada aplicación, como los saludos específicoso los valores generales necesarios en la aplicación. ASP proporciona dos objetos integrados en los que puede almacenar variables:el objeto Session y el objeto Application. También puede crear instancias de objetos con alcance de sesión o deaplicación. Para obtener más información, consulte Establecer el alcance delos objetos. Alcance de sesión Para asignar alcance de sesión a una variable, almacénela en el objeto Sessionasignando un valor a una entrada con nombre del objeto. Por ejemplo, lossiguientes comandos almacenan dos nuevas variables en el objeto Session: <% Session("Nombre") = "Juan" Session("Apellido") = "Soto" %> Para recuperar la información del objeto Session, tengaacceso a la entrada con nombre mediante la directiva de resultado (<%=) o Response.Write.En el ejemplo siguiente se utiliza la directiva de resultado para presentar elvalor actual de Session("Nombre"): Reciba nuestra bienvenida,<%= Session("Nombre") %> Puede almacenar las preferencias del usuario en el objeto Sessiony después tener acceso a dichas preferencias para determinar qué página hayque devolver al usuario. Por ejemplo, puede permitir que los usuariosespecifiquen la versión en texto del contenido de la primera página de laaplicación y aplicar esta opción a las siguientes páginas de la aplicaciónque el usuario visite. <% strScreenResolution = Session("ScreenResolution") If strScreenResolution = "Low" Then %> Ésta es la versión de texto de la página. <% Else %> Ésta es la versión multimedia de la página. <%End If %> Nota Si hace referencia a una variable con alcancede sesión más de una vez en una secuencia de comandos, piense en asignarle unavariable local, como en el ejemplo anterior, para mejorar el rendimiento.
Alcance de aplicación Para asignar alcance de aplicación a una variable, almacénela en el objeto Applicationasignando un valor a una entrada con nombre del objeto. Por ejemplo, el comandosiguiente almacena en el objeto Application un saludo específicode una aplicación: <% Application("Saludo") = "¡Reciba nuestra bienvenida alDepartamento de ventas!" %> Para recuperar la información del objeto Application,utilice la directiva de resultado de ASP (<%=) o Response.Writepara tener acceso a la entrada con nombre desde cualquier página posterior dela aplicación. En el ejemplo siguiente se utiliza la directiva de resultadopara presentar el valor de Application("Saludo"): <%= Application("Saludo") %> De nuevo, si hace referencia a una variable con alcance de aplicación en susecuencia de comandos repetidamente, debe de asignarle una variable local paramejorar el rendimiento. Utilizar constantes Una constante es un nombre que representa un número o una cadena.Algunos de los componentes de base que se proporcionan con ASP, como ActiveXData Objects (ADO), definen constantes que se pueden utilizar en las secuenciasde comandos. Un componente puede declarar constantes en la biblioteca detipos del componente, un archivo que contiene información acerca de losobjetos y los tipos aceptados por un componente COM. Después de haber declaradouna biblioteca de tipos en su archivo .asp puede usar las constantes definidasen cualquier secuencia de comandos en el mismo archivo .asp. Igualmente, puededeclarar una biblioteca de tipos en el archivo Global.asa para usar lasconstantes definidas en cualquier archivo .asp de la aplicación. Para declarar una biblioteca de tipos, utilice la etiqueta <METADATA>en su archivo .asp o Global.asa. Por ejemplo, para declarar la biblioteca detipos de ADO, utilice las siguientes instrucciones: <!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library"TYPE="TypeLib"UUID="{00000205-0000-0010-8000-00AA006D2EA4}"--> O bien, en lugar de hacer referencia al identificador único universal (UUID)de la biblioteca de tipos, puede hacer referencia a la biblioteca de tiposmediante la ruta del archivo: <!-- METADATA TYPE="typelib" FILE="c:\program files\commonfiles\system\ado\msado15.dll"--> Entonces puede usar las constantes ADO en el archivo .asp donde declaró labiblioteca de tipos o en un archivo que reside en una aplicación que contieneun archivo Global.asa con la declaración de biblioteca de tipos ADO. En elejemplo siguiente, adOpenKeyset y adLockOptimistic son constantes ADO: <% 'Crea y abre el objeto Recordset. Set rsCustomersList = Server.CreateObject("ADODB.Recordset") rstCustomerList.ActiveConnection = cnnPubs rstCustomerList.CursorType = adOpenKeyset rstCustomerList.LockType = adLockOptimistic %> En la siguiente tabla se enumeran las bibliotecas de tipos y losidentificadores UUID que se utilizan con más frecuencia:
Interactuar con secuencias de comandos del cliente Es posible aumentar la eficacia de ASP si se utiliza para generar o manipularsecuencias de comandos del cliente. Por ejemplo, puede escribir secuencias decomandos del servidor que construyan secuencias de comandos del cliente basadasen variables específicas del servidor, el tipo del explorador o los parámetrosde la petición HTTP. Si intercala instrucciones de secuencias de comandos del servidor en lassecuencias de comandos del cliente (delimitadas mediante etiquetas HTML<SCRIPT>), como se muestra en la plantilla del ejemplo siguiente, puedeinicializar de forma dinámica y alterar las secuencias de comandos del clienteen el momento de realizar la petición: <SCRIPT LANGUAGE="VBScript"> <!-- variable = <%=valor definido por el servidor %>. . . secuencia de comandos del cliente <% secuencia de comandos del servidor que se utiliza para generar unainstrucción del cliente %> secuencia de comandos del cliente . . . --> </SCRIPT> Al incorporar estas funciones es posible crear algunas aplicaciones útiles einteresantes. Por ejemplo, ésta es una sencilla secuencia de comandos delservidor (escrita en VBScript) que manipula una secuencia de comandos delcliente (escrita en JScript): <% Dim dtmTime, strServerName, strServerSoftware, intGreeting dtmTime = Time() strServerName = Request.ServerVariables("SERVER_NAME") strServerSoftware = Request.ServerVariables("SERVER_SOFTWARE") 'Genera un número aleatorio. Randomize GreetCondition = int(rnd * 3) %> <SCRIPT LANGUAGE="JScript"> <!-- //Llama a la función para mostrar el saludo showIntroMsg() function showIntroMsg() { switch(<%= intGreeting %>) { case 0: msg = "Este es el servidor Web <%= strServerName%> con <%=strServerSoftware %>." break
case 1: msg = "Reciba nuestra bienvenida al servidor Web <%=strServerName%>. La hora local es <%= dtmTime %>." break case 2: msg = "Este servidor utiliza <%= strServerSoftware %>." break } document.write(msg) } --> </SCRIPT>
Escribir procedimientos Un procedimiento es un grupo de comandos de secuencia de comandosque realizan una tarea específica y puede devolver un valor. Puede definir suspropios procedimientos e invocarlos repetidamente desde sus secuencias decomandos. Puede poner las definiciones de los procedimientos en el mismo archivo .aspque llama a los procedimientos o bien puede poner los procedimientos utilizadoscon más frecuencia en un archivo .asp compartido y utilizar la directiva#include para incluirlo en otros archivos .asp que llamen a los procedimientos.Como alternativa, puede encapsular dicha funcionalidad en un componente COM. Definir procedimientos Las definiciones de los procedimientos pueden encontrarse dentro de etiquetas<SCRIPT> y </SCRIPT> y deben seguir las reglas del lenguaje desecuencias de comandos. Utilice el elemento <SCRIPT> para losprocedimientos escritos en lenguajes distintos del lenguaje principal parasecuencias de comandos. Sin embargo, utilice los delimitadores de las secuenciasde comandos (<% y %>) en los procedimientos escritos en el lenguajeprincipal de secuencias de comandos. Cuando utilice la etiqueta HTML <SCRIPT>, debe emplear dos atributospara asegurar el proceso de la secuencia de comandos por parte del servidor. Lasintaxis de la etiqueta <SCRIPT> es la siguiente: <SCRIPT LANGUAGE=JScript RUNAT=SERVER> definición del procedimiento </SCRIPT> El atributo RUNAT=SERVER indica al servidor Web que procese la secuencia decomandos en el servidor. Si no establece este atributo, la secuencia de comandosla procesará el explorador del cliente. El atributo LANGUAGE determina ellenguaje de secuencia de comandos utilizado en este bloque. Puede especificarcualquier lenguaje para el que haya instalado un motor de secuencias de comandosen el servidor. Para especificar VBScript, use el valor VBScript. Paraespecificar JScript, use el valor JScript. Si no asigna el atributo LANGUAGE, elbloque de la secuencia de comandos se interpretará en el lenguaje principal desecuencia de comandos. Los comandos del bloque de la secuencia de comandos deben componer uno ovarios procedimientos completos en el lenguaje de secuencia de comandos elegido.Por ejemplo, los comandos siguientes definen el procedimiento JScript MiFuncion. <HTML> <SCRIPT LANGUAGE=JScript RUNAT=SERVER > function MiFuncion() { Response.Write("Llamó a MiFuncion().") } </SCRIPT> Importante No incluya en las etiquetas <SCRIPT> delservidor comandos de secuencias de comandos que no formen parte deprocedimientos completos. Los comandos que no formen parte de un procedimientopueden provocar resultados impredecibles puesto que deben ejecutarse en un ordendeterminado. Además, no puede utilizar la directiva de resultado de ASP<%=%> dentro de los procedimientos. En su lugar, utilice Response.Writepara enviar contenido al explorador.Llamar a procedimientos Para llamar a procedimientos, incluya el nombre de los procedimientos en uncomando. Si va a llamar a procedimientos JScript desde VBScript, debe utilizarparéntesis después del nombre del procedimiento; si el procedimiento no tieneargumentos, utilice paréntesis vacíos. Si va a llamar a procedimientosVBScript o JScript desde JScript, utilice siempre paréntesis después delnombre del procedimiento. En VBScript también puede utilizar la palabra clave Callpara llamar a un procedimiento. Sin embargo, si el procedimiento al que llamarequiere argumentos, la lista de argumentos debe aparecer entre paréntesis. Siomite la palabra clave Call, también debe omitir los paréntesisen los que se incluye la lista de argumentos. Si utiliza la sintaxis Callpara llamar a una función integrada o definida por el usuario, se descartaráel valor devuelto por la función. El ejemplo siguiente ilustra la creación y la llamada a procedimientos endos lenguajes para secuencias de comandos diferentes (VBScript y JScript). <%@ LANGUAGE=VBScript %> <HTML> <BODY> <% Echo %> <BR> <% printDate() %> </BODY> </HTML> <% Sub Echo Response.Write "<TABLE>" & _ "Response.Write"<TR><TH>Nombre</TH><TH>Valor</TH></TR>" Set objQueryString = Request.QueryString For Each strSelection In objQueryString Response.Write "<TR><TD>" & p &"</TD><TD>" & _ FormValues(strSelection) & "</TD></TR>" Next Response.Write "</TABLE>" End Sub %> <SCRIPT LANGUAGE=JScript RUNAT=SERVER> function PrintDate() { var x x = new Date() Response.Write(x.toString()) } </SCRIPT> Nota Las llamadas de VBScript a las funcionesJScript no distinguen entre mayúsculas y minúsculas.Pasar matrices a procedimientos Para pasar una matriz entera a un procedimiento en VBScript, utilice elnombre de la matriz seguido de paréntesis vacíos; en JScript, utilicecorchetes vacíos.
Procesar los datos proporcionados por el usuario Mediante el objeto Requestde ASP puede crear sencillas y eficaces secuencias de comandos para recopilar yprocesar datos obtenidos de formularios HTML. En este tema no sólo aprenderá acrear secuencias de comandos básicas para procesar formularios, sino que tambiénconocerá técnicas útiles para validar los datos de los formularios, tanto ensu servidor Web como en el explorador de Web del usuario.Acerca de los formularios HTML Los formularios HTML, el método más común para recopilar informacióndesde el Web, consiste en un conjunto de etiquetas HTML especiales que presentanelementos de interfaz de usuario en una página Web. Los cuadros de texto, losbotones y las casillas de verificación son ejemplos de elementos que permitenque los usuarios intercalen con una página Web y envíen información a unservidor Web. Por ejemplo, las siguientes etiquetas HTML generan un formulario en el que unusuario puede escribir su nombre, apellido y edad, e incluye un botón paraenviar la información a un servidor Web. El formulario también contiene unaetiqueta de entrada oculta (no presentada por el explorador Web) que puedeutilizar para pasar información adicional al servidor Web. <FORM METHOD="Post" ACTION="Profile.asp"> <INPUT TYPE="text" NAME="Nombre"> <INPUT TYPE="text" NAME="Apellido"> <INPUT TYPE="text" NAME="Edad"> <INPUT TYPE="Hidden" NAME="EstadoUsuario"VALUE="Nuevo"> <INPUT TYPE="Submit" VALUE="Entrar"> </FORM> Presentar con detalle el conjunto completo de etiquetas HTML para formulariosse sale del ámbito de este tema, sin embargo, hay numerosas fuentes deinformación que puede utilizar para aprender a crear y utilizar formulariosHTML. Por ejemplo, puede utilizar la posibilidad que ofrece su explorador paraver el código fuente con el fin de examinar cómo se crean los formularios HTMLen otros sitios Web. También puede visitar el sitio Web de MSDN de Microsoft enla dirección http://msdn.microsoft.com/ para conocer las técnicas másrecientes para utilizar los formularios HTML con otras tecnologías de Internet. Procesar datos de formularios con ASP Después de crear el formulario HTML tendrá que procesar los datosproporcionados por el usuario, lo que implica enviar la información a unarchivo .asp para que la analice y manipule. De nuevo, examine el código HTMLdel ejemplo anterior. Observe que el atributo ACTION de la etiqueta <FORM>hace referencia a un archivo llamado Profile.asp. Cuando el usuario envíainformación HMTL, el explorador utiliza el método POST para enviarla a unarchivo .asp del servidor, en este caso Profile.asp. Este archivo .asp puedecontener archivos de comandos que procesen la información e interactúen conotras secuencias de comandos, componentes COM o recursos, como una base dedatos. Existen tres formas básicas de recopilar información de un formulario HTMLmediante ASP:
Los dos primeros métodos funcionan igual que los formularios que interactúancon otros programas de servidor Web, con la única diferencia de que con ASP sesimplifica mucho la tarea de recuperar y procesar la información. El tercer métodoes especialmente útil y se muestra en la sección Validar los datos de losformularios. Obtener datos de los formularios El objeto Request de ASP proporciona dos colecciones quefacilitan la tarea de recuperar información de los formularios enviados con laspeticiones URL. La colección QueryString La colección QueryStringrecupera los valores del formulario pasados al servidor Web como texto acontinuación del signo de interrogación de la dirección URL de la petición.Los valores del formulario se pueden anexar a la dirección URL de la peticiónmediante el método GET de HTTP o, manualmente, si se agregan los valores delformulario a la dirección URL.Si el ejemplo del formulario anterior utilizara el método GET (METHOD ="GET") y el usuario escribiera Juan, Soto y 30,se enviaría la siguiente petición URL al servidor: http://Workshop1/Painting/Profile.asp?Nombre=Juan&Apellido=Soto&Edad=30&EstadoUsuario=Nuevo El archivo Profile.asp podría contener la siguiente secuencia de comandospara procesar formularios: Hola, <%= Request.QueryString("nombre") %> <%=Request.QueryString("apellido") %>. Tiene <%= Request.QueryString("edad") %> años. <% If Request.QueryString("EstadoUsuario") = "Nuevo" Then Response.Write"Ésta es su primera visita a este sitio Web" End if %> En este caso, el servidor Web devolvería el texto siguiente al exploradorWeb del usuario: Hola Juan Soto. Tiene 30 años. Ésta es su primera visita a este sitio Web La colección QueryString también tiene un parámetroopcional que puede utilizar para tener acceso a uno de los múltiples valoresque se encuentran en el cuerpo de la petición URL (con el método GET). Tambiénpuede utilizar la propiedad Count para contar el número deveces que aparece un determinado tipo de valor. Por ejemplo, un formulario que contenga un cuadro de lista con varioselementos puede generar la siguiente petición: http://OrganicFoods/list.asp?Comida=Manzanas&Comida=Aceitunas&Comida=Pan Podría utilizar el siguiente comando para contar los diferentes valores: Request.QueryString("Comida").Count Para presentar los tipos de valores, Lista.asp podría contener la secuenciade comandos siguiente: <% lngTotal = Request.QueryString("Comida").Count For i = 1 To lngTotal Response.Write Request.QueryString("Comida")(i) &"<BR>" Next %> La secuencia de comandos anterior mostraría: Manzanas Aceitunas Pan También puede mostrar la lista completa de valores como una cadenadelimitada por comas, del modo siguiente: <% Response.Write Request.QueryString("Item") %> Aparecería la cadena siguiente: Manzanas, Aceitunas, Pan Colección Form Cuando utiliza el método GET de HTTP para pasar a un servidor Web valores deun formulario grande y complejo, corre el riesgo de perder información. Algunosservidores Web tienden a restringir el tamaño de la cadena de petición de URL,por lo que los valores de los formularios grandes pasados con el método GETpodrían quedar truncados. Si necesita enviar una gran cantidad de informacióndesde un formulario a un servidor Web, debe utilizar el método POST de HTTP. Elmétodo POST, que envía los datos de los formularios en el cuerpo de la peticiónHTTP, puede enviar un número casi ilimitado de caracteres a un servidor. Puedeutilizar la colección Form del objeto Requestde ASP para recuperar los valores enviados mediante el método POST.La colección Form almacena valores de manera similar a lacolección QueryString. Por ejemplo, si un usuario completa unformulario escribiendo una larga lista de nombres, se podrían leer los nombrescon la secuencia de comandos siguiente: <% lngTotal = Request.Form("Comida").Count For i = 1 To lngTotal Response.Write Request.Form("Comida")(i) &"<BR>" Next %> Validar los datos de los formularios Un formulario Web bien diseñado suele incluir una secuencia de comandos delcliente que valida los datos proporcionados por el usuario antes de enviar lainformación al servidor. Las secuencias de comandos de validaciónpueden comprobar si el usuario escribió un número válido o si un cuadro detexto está en blanco. Imagine que su sitio Web incluye un formulario quepermite calcular la tasa de retorno de una inversión. Probablemente querrácomprobar si un usuario realmente escribió texto o números en los camposapropiados del formulario, antes de enviar al servidor información que podríano ser válida. En general, lo mejor es realizar en el cliente tantas comprobaciones como seaposible. Además, de poder preguntar antes al usuario por los errores, lavalidación en el cliente mejora el tiempo de respuesta, reduce la carga delservidor y libera ancho de banda para otras aplicaciones. La siguiente secuencia de comandos del cliente valida los datos escritos porel usuario (en este caso, la secuencia de comandos determina si el número decuenta que escribió el usuario es realmente un número) antes de enviarlos alservidor: <SCRIPT LANGUAGE="JScript"> function ComprobarNumero() { if (isNumeric(document.UserForm.AcctNo.value)) return true else { alert("Escriba un número de cuenta válido.") return false } } //Función para determinar si el valor del formulario es un número. //Nota: El método isNaN JScript es un método más elegante para determinarsi //un valor no es un número. Sin embargo, algunos exploradores no admiteneste método. function isNumeric(str) { for (var i=0; i < str.length; i++) { var ch = str.substring(i, i+1) if( ch < "0" || ch>"9" || str.length == null) { return false } } return true } </SCRIPT> <FORM METHOD="Get" ACTION="balance.asp"NAME="FormularioUsuario" ONSUBMIT="return CheckNumber()"> <INPUT TYPE="Text" NAME="NumCuen"> <INPUT TYPE="Submit" VALUE="Enviar"> </FORM> Sin embargo, si la validación de un formulario requiere el acceso a una basede datos debe considerar la utilización de la validación del formulario en elservidor. Una forma muy útil de realizar la validación en el servidor es crearformularios que se envíen la información a sí mismos. Es decir, el archivo.asp contiene en realidad el formulario HTML que recibe los datos del usuario.(Recuerde, puede utilizar ASP para interactuar con secuencias de comandos delcliente y código HTML. Para obtener más información, consulte Interactuar consecuencias de comandos del cliente.) Los datos escritos vuelven al mismoarchivo, que se encarga de validar la información y avisa al usuario si éstosno son correctos. Mediante este método se pueden mejorar las características de uso y larespuesta de los formularios basados en Web. Por ejemplo, si se incluyeinformación del error junto al campo del formulario en el que se escribió lainformación incorrecta, será más fácil para el usuario descubrir el origendel error. (Normalmente, los formularios basados en Web reenvían las peticionesa una página Web independiente que contiene información del error. Losusuarios que no comprendan esta información podrían sentirse frustrados.) Por ejemplo, la secuencia de comandos siguiente determina si un usuarioescribió un número de cuenta válido, para lo que se envía la información así misma (Verify.asp) y llama a una función definida por el usuario querealiza una consulta a una base de datos: <% strAcct = Request.Form("Cuenta") If Not AccountValid(strAcct) Then ErrMsg = "<FONT COLOR=Red>El número de cuenta que ha escrito noes válido.</FONT>" Else Procesa los datos del usuario . . . Server.Transfer("Complete.asp") End If
Function AccountValid(strAcct) Aquí se incluirá una secuencia de comandos o una llamada a un método de uncomponente de conexión con una base de datos. End Function %> <FORM METHOD="Post" ACTION="Verify.asp"> Número de cuenta: <INPUT TYPE="Text"NAME="Cuenta"> <%= ErrMsg %> <BR> <INPUT TYPE="Submit"> </FORM> En este ejemplo, la secuencia de comandos se encuentra en un archivo llamadoVerify.asp, el mismo archivo que contiene el formulario HTML y, para enviarse lainformación a sí mismo, especifica Verify.asp en el atributo ACTION. Importante Siutiliza JScript para la validación en el servidor, asegúrese de colocar un parde paréntesis vacíos detrás del elemento de la colección Request(QueryString o Form) al asignar la coleccióna una variable local. Sin el paréntesis la colección devolverá un objeto enlugar de una cadena. La secuencia de comandos siguiente muestra el métodocorrecto para asignar variables con JScript:<% var Nombre = Request.Form("Nombre")(); var Contraseña = Request.Form("Contraseña")(); if(Nombre > "") { if(Nombre == Contraseña) Response.Write("El nombre y la contraseña son iguales".) else Response.Write("El nombre y la contraseña son diferentes".); } %> VBScript presenta el mismo comportamiento si la colección contiene variosvalores separados por comas o con los que se pueda crear un índice. Estosignifica que tanto para VBScript como para JScript, además de colocar un parde paréntesis detrás del elemento de la colección Request,necesitará especificar el índice del valor deseado. Por ejemplo, la siguientelínea en JScript devuelve sólo el primero de los varios valores de un elementode un formulario: var Nombre = Request.Form("Nombre")(1);
Acceso al origen de datos ActiveX Data Objects (ADO) es una tecnología ampliable y de fácil uso paraagregar a sus páginas Web acceso a bases de datos. Puede utilizar ADO paraescribir secuencias de comandos compactas y escalables que le permitanconectarse a orígenes de datos compatibles con OLE DB, como bases de datos,hojas de cálculo, archivos de datos secuenciales o directorios de correo electrónico.OLE DB es una interfaz de programación de nivel de sistema que proporciona unconjunto estándar de interfaces COM para que permitan exponer las funciones delsistema de administración de bases de datos. Con el modelo de objetos ADO es fáciltener acceso a estas interfaces (mediante lenguajes de secuencias de comandos,como VBScript o JScript) para agregar funciones de bases de datos a lasaplicaciones Web. Además, también puede utilizar ADO para tener acceso a basesde datos compatibles con la Conectividad abierta de bases de datos (ODBC, OpenDatabase Connectivity). Si no tiene mucha experiencia en conectividad con bases de datos, encontraráque la sintaxis de ADO es sencilla y fácil de utilizar. Si es un programadorexperimentado, agradecerá el acceso escalable de alto rendimiento queproporciona ADO para una gran variedad de orígenes de datos.
Crear una cadena de conexión El primer paso en la creación de una aplicación de datos en Web consiste enproporcionar un método para que ADO encuentre e identifique el origen de datos.Para ello se utiliza una cadena de conexión, una serie de argumentosseparados mediante un punto y coma que definen parámetros como el proveedor delorigen de datos y la ubicación del mismo. ADO utiliza la cadena de conexiónpara identificar el proveedor OLE DB y para dirigir al proveedor alorigen de datos. El proveedor es un componente que representa el origen de datosy que expone la información en la aplicación en forma de conjuntos de filas. En la tabla siguiente se enumeran las cadenas de conexión de OLE DB paravarios orígenes de datos habituales:
Para proporcionar compatibilidad con versiones anteriores, el proveedor OLEDB para ODBC admite la sintaxis de las cadenas de conexión ODBC. En la tablasiguiente se enumeran las cadenas de conexión ODBC que se utilizanhabitualmente:
Conectarse al origen de datos ADO proporciona el objeto Connection para establecer yadministrar las conexiones entre las aplicaciones y los orígenes de datoscompatibles con OLE DB o las bases de datos compatibles con ODBC. El objeto Connectionincorpora propiedades y métodos que se pueden utilizar para abrir y cerrarconexiones con bases de datos, y para enviar consultas de actualización de lainformación. Para establecer una conexión con una base de datos, cree primero unainstancia del objeto Connection. Por ejemplo, la secuencia decomandos siguiente crea una instancia del objeto Connection yprocede a abrir una conexión: <% 'Crea un objeto Connection. Set cn = Server.CreateObject("ADODB.Connection") 'Abre una conexión mediante la cadena de conexión OLE DB. cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\DatosMercado\VentasPrevistas.mdb" %> Nota La cadena de conexión no contiene espaciosen blanco ni antes ni después del signo igual (=).En este caso, el método Open del objeto Connectionse refiere a la cadena de conexión. Ejecutar consultas SQL con el objeto Connection Con el método Execute del objeto Connectionpuede emitir comandos al origen de datos, como consultas de SQL (Lenguaje deconsulta estructurado). (SQL, lenguaje estándar para comunicarse con bases dedatos, define comandos para recuperar y actualizar información.) El método Executeacepta parámetros que especifiquen el comando (o la consulta), el número deregistros de datos a los que afecta y el tipo de comando que se utiliza. La siguiente secuencia de comandos utiliza el método Execute paraenviar una consulta con un comando INSERT de SQL, que inserta datos en una tablaconcreta de la base de datos. En este caso, el bloque de la secuencia decomandos inserta el nombre José Lugo en unatabla de la base de datos llamada Customers. <% 'Define la cadena de conexión OLE DB. strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\Datos\Empleados.mdb" 'Crea la instancia del objeto Connection y abre una conexión con la base dedatos. Set cn = Server.CreateObject("ADODB.Connection") cnn.Open strConnectionString 'Define la instrucción SELECT de SQL. strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('José','Lugo')" 'Utiliza el método Execute para enviar una consulta SQL a la base de datos. cnn.Execute strSQL,,adCmdText + adExecuteNoRecords %>
Observe que se especifican dos parámetros en la instrucción que se utilizapara ejecutar la consulta: adCmdText y adExecuteNoRecords.El parámetro opcional adCmdText especifica el tipo de comandoe indica que el proveedor debe evaluar la instrucción de consulta (en estecaso, una consulta SQL) como una definición textual de un comando. El parámetroadExecuteNoRecords indica a ADO que no debe crear un conjuntode registros de datos si no se devuelven resultados a la aplicación. Este parámetrosólo funciona con los tipos de comandos definidos como texto, como lasconsultas SQL, o con procedimientos almacenados de bases de datos. Aunque losparámetros adCmdText y adExecuteNoRecords sonopcionales, debe especificarlos al utilizar el método Executepara mejorar así el rendimiento de la aplicación de datos. Importante Losparámetros ADO, como adCmdText, deben estar definidos parapoder utilizarlos en una secuencia de comandos. Un método cómodo para definirlos parámetros consiste en utilizar una biblioteca de tipos de componentes,que es un archivo que contiene definiciones para todos los parámetros ADO. Paraimplementar una biblioteca de tipos de componentes debe declararla antes.Agregue la etiqueta siguiente <METADATA> al archivo .asp o a Global.asapara declarar la biblioteca de tipos ADO:<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library"TYPE="TypeLib"UUID="{00000205-0000-0010-8000-00AA006D2EA4}"--> Si desea obtener más detalles acerca de cómo implementar las bibliotecas detipos de componentes, consulte la sección Utilizar constantes del tema Utilizarvariables y constantes. Además del comando INSERT de SQL, puede utilizar loscomandos UPDATE y DELETE de SQL para modificary quitar información de la base de datos. Con el comando UPDATE de SQL puede modificar los valores delos elementos de una tabla de la base de datos. La siguiente secuencia decomandos usa el comando UPDATE para cambiar todos los camposFirstName de la tabla Customers a Juan en todas las filas cuyo campo LastNamecontenga el apellido Soto. <% Set cn = Server.CreateObject("ADODB.Connection") cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\Datos\Empleados.mdb" cn.Execute "UPDATE Customers SET FirstName = 'Juan' WHERE LastName ='Soto' ",,adCmdText + adExecuteNoRecords %> Para quitar determinados registros de una tabla de la base de datos, utiliceel comando DELETE de SQL. La siguiente secuencia de comandosquita todas las filas de la tabla Customers cuyo apellido sea Soto: <% Set cn = Server.CreateObject("ADODB.Connection") cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\Datos\Empleados.mdb" cn.Execute "DELETE FROM Customers WHERE LastName ='Soto'",,adCmdText + adExecuteNoRecords %> Nota Debe tener mucho cuidado al utilizar elcomando DELETE de SQL. Un comando DELETE queno vaya acompañado de una cláusula WHERE eliminará todas lasfilas de la tabla. Asegúrese de incluir la cláusula WHERE deSQL, que especifica las filas exactas que se van a eliminar.Utilizar el objeto Recordset para manipular los resultados Para recuperar datos, examinar resultados y modificar su base de datos, ADOproporciona el objeto Recordset. El objeto Recordsettiene las funciones necesarias para, dependiendo de las restricciones de lasconsultas, recuperar y presentar un conjunto de filas, o registros, deuna base de datos. El objeto Recordset mantiene la posición decada registro devuelto por la consulta, lo que permite recorrer los resultadosde uno en uno. Recuperar un conjunto de registros Las buenas aplicaciones de datos Web emplean el objeto Connectionpara establecer un vínculo, y el objeto Recordset paramanipular los datos devueltos. Al combinar las funciones especializadas de ambosobjetos puede desarrollar aplicaciones de bases de datos que realicen casicualquier tarea de tratamiento de datos. Por ejemplo, la siguiente secuencia decomandos del servidor utiliza el objeto Recordset para ejecutarun comando SELECT de SQL. El comando SELECTrecupera un conjunto específico de información basándose en las restriccionesde la consulta. La consulta también contiene una cláusula WHEREde SQL, que se utiliza para establecer el criterio de selección de la consulta.En este ejemplo, la cláusula WHERE limita la consulta a todoslos registros que contengan el apellido Soto en la tabla Customersde la base de datos. <% 'Establece una conexión con un origen de datos. strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\Datos\Empleados.mdb" Set cn = Server.CreateObject("ADODB.Connection") cnn.Open strConnectionString 'Crea una instancia de un objeto Recordset. Set rsCustomers = Server.CreateObject("ADODB.Recordset") 'Abre un objeto Recordset con el método Open 'y utiliza la conexión establecida por el objeto Connection. strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName ='Soto' " rstCustomers.Open strSQL, cnn 'Recorre el conjunto de los registros y presenta los resultados 'e incrementa la posición del registro con el método MoveNext. Set objFirstName = rstCustomers("Nombre") Set objLastName = rstCustomers("Apellido") Do Until rstCustomers.EOF Response.Write objFirstName & " " & objLastName &"<BR>" rstCustomers.MoveNext Loop %> Observe que en el ejemplo anterior, el objeto Connectionestableció la conexión con la base de datos y que el objeto Recordsetutilizó la misma conexión para recuperar resultados de la base de datos. Estemétodo es útil cuando tenga que configurar con precisión la forma en que seestablece el vínculo con la base de datos. Por ejemplo, si necesitaraespecificar el tiempo de espera antes de anular un intento de conexión, tendríaque utilizar el objeto Connection para establecer dichapropiedad. Sin embargo, si sólo desea establecer una conexión con laspropiedades de conexión predeterminadas de ADO, podría utilizar el método Opendel objeto Recordset para establecer el vínculo: <% strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\Datos\Empleados.mdb" strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName ='Soto' " Set rsCustomers = Server.CreateObject("ADODB.Recordset") 'Abre una conexión con el método Open 'y utiliza la conexión establecida por el objeto Connection. rstCustomers.Open strSQL, strConnectionString 'Recorre el conjunto de registros, presenta los resultados 'e incrementa la posición del registro con el método MoveNext. Set objFirstName = rstCustomers("Nombre") Set objLastName = rstCustomers("Apellido") Do Until rstCustomers.EOF Response.Write objFirstName & " " & objLastName &"<BR>" rstCustomers.MoveNext Loop %> Cuando establece una conexión con el método Open delobjeto Recordset, está utilizando implícitamente el objeto Connectionpara proteger el vínculo. Para obtener más información, consulte ladocumentación acerca de Microsoft ActiveX Data Objects (ADO), disponible en elsitio Web de Microsoft Universal Data Access en la direcciónhttp://www.microsoft.com/data/. Nota Para mejorar de forma significativa elrendimiento de las aplicaciones ASP de base de datos, piense en la posibilidadde cambiar el estado del conjunto de registros a Application.Para obtener más información, consulte Guardar datos en la memoria caché.A menudo resulta útil contar el número de registros que se devuelven en unconjunto de registros. El método Open del objeto Recordsetpermite especificar un parámetro opcional, cursor, que determina cómorecupera y recorre el conjunto de registros el proveedor subyacente. Al agregarel parámetro de cursor adOpenKeyset a la instrucción que seutiliza para ejecutar la consulta, permite que la aplicación cliente recorratodo el conjunto de registros. Como resultado, la aplicación puede utilizar lapropiedad RecordCount para calcular con precisión el númerode registros del conjunto. Vea el siguiente ejemplo: <% Set rsCustomers = Server.CreateObject("ADODB.Recordset") rs.Open "SELECT * FROM NewOrders","Provider=Microsoft.Jet.OLEDB.3.51;DataSource='C:\PedidosClientes\Pedidos.mdb'", adOpenKeyset, adLockOptimistic,adCmdText 'Utiliza la propiedad RecordCount del objeto Recordset para realizar lacuenta. If rs.RecordCount >= 5 then Response.Write "Recibimos estos " & rs.RecordCount & "nuevos pedidos<BR>" Do Until rs.EOF Response.Write rs("NombreCliente") & " " &rs("ApellidoCliente") & "<BR>" Response.Write rs("NumeroCuenta") & "<BR>" Response.Write rs("Cantidad") & "<BR>" Response.Write rs("FechaEntrega") &"<BR><BR>" rs.MoveNext Loop Else Response.Write "Hay menos de " & rs.RecordCount & "nuevos pedidos." End If rs.Close %> Combinar formularios HTML y el acceso a bases de datos Las páginas Web que contienen formularios HTML pueden permitir que losusuarios consulten de forma remota una base de datos y recuperen informaciónconcreta. Con ADO puede crear secuencias de comandos sorprendentemente sencillasque recopilen información del formulario del usuario, creen una consultapersonalizada para la base de datos y devuelvan información al usuario.Mediante el objeto Request de ASP puede recuperar la informaciónescrita en los formularios HTML e incorporar dicha información a susinstrucciones SQL. Por ejemplo, el siguiente bloque de secuencia de comandosinserta en una tabla la información suministrada por un formulario HTML. Lasecuencia de comandos recopila información del usuario con la colección Formdel objeto Request. <% 'Abre una conexión mediante el objeto Connection. El objeto Command 'no tiene un método Open para establecer la conexión. strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\Catálogo\Semillas.mdb" Set cn = Server.CreateObject("ADODB.Connection") cnn.Open strConnectionString 'Crea una instancia del objeto Command 'y utiliza la propiedad ActiveConnection para adjuntar 'la conexión al objeto Command. Set cm= Server.CreateObject("ADODB.Command") Set cmn.ActiveConnection = cnn 'Define la consulta SQL. cmn.CommandText = "INSERT INTO MySeedsTable (Type) VALUES (?)" 'Define la información de configuración de los parámetros de la consulta. cmn.Parameters.Append cmn.CreateParameter("type",adVarChar, ,255) 'Asigna el valor de la entrada y ejecuta la actualización. cmn("type") = Request.Form("SeedType") cmn.Execute ,,adCmdText + adExecuteNoRecords %> Para obtener más información acerca de los formularios y el uso del objeto Requestde ASP, consulte Procesar los datos introducidos por el usuario. Transferencia entre archivos .ASP Para utilizar Response.Redirect para redirigir un exploradorse necesita un viaje de ida y vuelta, lo que significa que el servidorenvía al explorador una respuesta HTTP en la que indica la ubicación de lanueva dirección URL. El explorador abandona automáticamente la cola de lapetición del servidor y envía una nueva petición HTTP para la dirección URL.Después, el servidor agrega esta petición a la cola de peticiones, junto conlas peticiones que mientras tanto llegan desde otros clientes. En un sitio Webcon mucha carga, este sistema puede desperdiciar ancho de banda y reducir elrendimiento del servidor, especialmente si se redirige el explorador a unarchivo que se encuentre en el mismo servidor. Puede utilizar el método Server.Transfer para realizar latransferencia de un archivo .asp a otro que se encuentre en el mismo servidor,en lugar del método Response.Redirect. Con Server.Transferpuede transferir directamente las peticiones de archivos .asp sin necesidad deabandonar la cola de peticiones, lo que elimina viajes de ida y vuelta. Por ejemplo, la secuencia de comandos siguiente muestra cómo podríautilizar Server.Transfer para saltar entre las páginas de unaaplicación según la información de estado: <% If Session("blnSaleCompleted") Then Server.Transfer("/Pedido/Gracias.asp") Else Server.Transfer("/Pedido/MasInfo.asp") End if %> Server.Transfer envía peticiones desde un archivo .asp en ejecucióna otro archivo. Durante la transferencia, el archivo .asp que se pidióinicialmente finaliza inmediatamente la ejecución sin vaciar el búfer de salir(para obtener más información, consulte la sección Almacenamiento en búferdel contenido). La petición de información se pone a disposición del archivode destino cuando éste comienza la ejecución. Durante la ejecución, elarchivo tiene acceso al mismo conjunto de objetos intrínsecos (Request,Response, Server, Session y Application)que el archivo que se pidió inicialmente.También se puede utilizar Server.Transfer para realizar unatransferencia entre archivos .asp que se encuentren en diferentes aplicaciones.Sin embargo, al hacerlo el archivo se comportará como si formara parte de laaplicación que inició la transferencia (es decir, el archivo sólo tendráacceso a las variables con alcance en la aplicación inicial, no en la aplicaciónen la que realmente reside el archivo). Por ejemplo, si realiza unatransferencia desde un archivo que se encuentra en la aplicación Ventas a otroque se encuentra en Personal, la aplicación Ventas tomará prestado el archivode la aplicación Personal y lo ejecutará como si fuera parte de ella. ASP proporciona también el comando Server.Execute quepermite transferir un archivo, ejecutar el contenido y volver al archivo queinició la transferencia. Si tiene conocimientos de VBScript, le ayudará pensaren Server.Execute como análogo a una llamada a unprocedimiento, con la diferencia de que en lugar de ejecutar un procedimiento seejecuta un archivo .asp completo. Por ejemplo, la secuencia de comandos siguiente muestra cómo podríautilizar Server.Execute para incluir archivos .asp de forma dinámica:
<% . . If blnUseDHTML Then Server.Execute("DHTML.asp") Else Server.Execute("HTML.asp") End If . . %> Mientras el archivo de destino pertenezca a una aplicación del mismoservidor, la aplicación inicial se transferirá a este archivo, ejecutará sucontenido y continuará con la ejecución del archivo que inició latransferencia. Igual que sucede con Server.Transfer, alejecutar un archivo .asp éste se comporta como si formara parte de la aplicacióninicial. Sin embargo, Server.Execute, no funciona cuando los servidoresson distintos. Para obtener más información, consulte Server.Execute.Enviar contenido al explorador A medida que se procesa una secuencia de comandos ASP, el texto y los gráficosque no se encuentren entre delimitadores ASP o etiquetas <SCRIPT> sedevuelve directamente al explorador. También puede enviar explícitamentecontenido al explorador mediante el objeto Response. Enviar contenido Para enviar contenido al explorador desde delimitadores ASP o desde unprocedimiento, utilice el método Write del objeto Response.Por ejemplo, la instrucción siguiente envía un saludo diferente al usuariodependiendo de si el usuario ha visitado la página con anterioridad o no: <% If blnFirstTime Then Response.Write "<H3 ALIGN=CENTER>Reciba nuestra bienvenida a la páginade introducción</H3>" Else Response.Write "<H3 ALIGN=CENTER>Gracias por volver a la páginade introducción</H3>" End If %> Fuera de un procedimiento, no tiene que utilizar Response.Writepara devolver contenido al usuario. El contenido que no se encuentra dentro dedelimitadores de secuencia de comandos se envía directamente al explorador, queda formato y presenta este contenido. Por ejemplo, la secuencia de comandossiguiente produce el mismo resultado que la secuencia de comandos anterior: <H3 ALIGN=CENTER> <% If blnFirstTime Then %> Reciba nuestra bienvenida a la página de introducción. <% Else %> Gracias por volver a la página de introducción. <%End If %> </H3> Intercale secuencias de comandos y código HTML cuando tenga que devolver elresultado una vez o cuando sea más cómodo agregar instrucciones a texto HTMLexistente. Utilice Response.Write cuando no desee dividir unainstrucción con delimitadores o cuando desee generar la cadena de texto quevaya a devolver al explorador. Por ejemplo, podría generar una cadena de textoque creara una fila de una tabla con los valores enviados por un formularioHTML: Response.Write "<TR><TD>" &Request.Form("Nombre") _ & "</TD><TD>" &Request.Form("Apellido") & "</TD></TR>" Request.Form devuelve los valores enviados por un formulario HTML(consulte Procesar los datos introducidos por el usuario).Nota El carácter & es el carácter decontinuación de cadenas de VBScript. El carácter de subrayado (_) es el carácterde continuación de línea de VBScript.
Secuencias de comandos sencillas La siguiente secuencia de comandos ilustra las técnicas básicas que seutilizan en las secuencias de comandos ASP. Si no tiene experiencia en eldesarrollo de aplicaciones o nunca ha escrito secuencias de comandos, éste esun buen lugar para empezar. Elija un ejemplo en la siguiente lista:
Variables Introducción Todas las aplicaciones escritas a lo largo de la historia, independientementedel lenguaje de programación empleado, han utilizado variables de algún tipo ylas secuencias de comandos ASP no son una excepción. Tanto VBScript comoJScript permiten crear y administrar variables de forma fácil y sencilla. Cada lenguaje realiza de forma diferente la declaración de variables.JScript y VBScript son bastante flexibles en lo que respecta a las variables ysu declaración. En VBScript, cualquier variable se considera automáticamentede tipo Variant si se declara inicialmente con la instrucción Dim.A cada variable se le asigna un subtipo, como Numeric y Array.JScript es parecido; la variable se declara inicialmente con la instrucción var.En general, ambos lenguajes tienden a realizar automáticamente gran parte de laadministración de tipos de datos, incluida la conversión de tipos. De hecho,ni siquiera es necesario emplear las instrucciones Dim o var parautilizar una nueva variable; en sus respectivos lenguajes son opcionales. Paseo por el código Este ejemplo declara varios tipos diferentes de variables, realiza algunasoperaciones sencillas en ellas y las muestra al explorador cliente con losdelimitadores especiales de secuencias de comandos <% = ...%>. Se asignaun entero a la variable intVariable, se suma a sí mismo y se envía elresultado al explorador cliente. A la variable StrVariable se le asignael nombre, se agrega a Soto y se envía al explorador cliente. Del mismo modo sedeclaran o crean, inicializan, manipulan y muestran los valores booleanos y lasfechas. Observaciones El último paso de la demostración de la variable de fecha es especialmenteinteresante. En VBScript, primero se asigna la variable a una cadena de fechaliteral y después se muestra. Después se restablece y se asigna el valordevuelto por la función Now de VBScript, que devuelve la hora actual delsistema. El ejemplo de JScript utiliza la función Date de JScript paraestablecer el literal inicial, para lo que pasa parámetros a la función, yestablecer después la fecha actual del sistema en la variable, sin pasar parámetrosa la función.
<%@ LANGUAGE = VBScript %> <% Option Explicit %> <HTML> <HEAD> <TITLE>Variable Sample</TITLE> </HEAD> <BODY BGCOLOR="White" TOPMARGIN="10"LEFTMARGIN="10"> <!-- Display header. --> <FONT SIZE="4" FACE="ARIAL, HELVETICA"> <B>Variable Sample</B></FONT><BR> <HR> <H3>Integer Manipulation</H3> <% 'Declare variable. Dim intVar 'Assign the variable an integer value. intVar = 5 %> <P><%= intVar %> + <%= intVar %> = <%= intVar + intVar%></P> <HR> <H3>String Manipulation</H3> <% 'Declare variable. Dim strVar 'Assign the variable a string value. strVar = "Jemearl" %> <P>This example was done by <%= strVar + " Smith"%></P> <HR> <H3>Boolean Manipulation</H3> <% 'Declare variable. Dim blnVar 'Assign the variable a Boolean value. blnVar = true 'Output message based on value. If (blnVar) Then Response.Write "<P>The Boolean value is True.</P>" Else Response.Write "<P>The Boolean value is False.</P>" End If %> <HR> <H3>Date and Time</H3> <% 'Declare variable. Dim dtmVar 'Assign the variable a value. dtmVar = #08 / 27 / 97 5:11:42pm# %> <P>The date and time is <%= dtmVar %> <% 'Set the variable to the web server date and time. dtmVar = Now() %> <P>The <STRONG>system</strong> date and time is <%=dtmVar %></P> </BODY> </HTML> Bucles Introducción Los bucles representan uno de los mecanismos más importantes de control deflujo en un lenguaje de programación. Las construcciones en bucle proporcionanla base de cualquier aplicación que deba realizar una tarea de formarepetitiva, como sumar 1 a una variable, leer un archivo de texto o procesar yenviar un mensaje de correo electrónico. Paseo por el código VBScript y JScript proporcionan varios mecanismos para realizar bucles. Esteejemplo demuestra las tres instrucciones más comunes para realizar bucles, For... Next, Do ... Loop y While ... Wend. Estas tresinstrucciones son ligeramente diferentes y la situación indicará cuál de lastres es la más indicada. Sin embargo, para este ejemplo, cada tipo de instrucciónde bucle se utiliza para realizar la misma tarea: imprimir un saludo cincoveces, cada una de ellas con una fuente mayor. En cada instrucción de bucle seinicializa la variable i y se define la condición de prueba, de formaque i nunca sea mayor que 5. La variable se incrementa en 1 unidad encada iteración del bucle. <%@ LANGUAGE = VBScript %> <% Option Explicit %> <HTML> <HEAD> <TITLE>Looping</TITLE> </HEAD> <BODY BGCOLOR="White" TOPMARGIN="10"LEFTMARGIN="10"> <!-- Display header. --> <FONT SIZE="4" FACE="ARIAL, HELVETICA"> <B>Looping with ASP</B></FONT><BR> <HR SIZE="1" COLOR="#000000"> <!-- Looping with a For loop. --> <% Dim intCounter For intCounter = 1 to 5 %> <FONT SIZE=<% = intCounter %>> Hello World with a For Loop!<BR> </FONT> <% next %> <HR> <!-- Looping with a While...Wend loop. --> <% intCounter = 1 While(intCounter < 6) %> <FONT SIZE=<% = intCounter %>> Hello World with a While Loop!<BR> </FONT>
<% intCounter = intCounter + 1 %> <% wend %> <HR> <!-- Looping with a Do...While loop. --> <% intCounter = 1 Do While(intCounter < 6) %> <FONT SIZE=<% =intCounter %>> Hello World with a Do...While Loop!<BR> </FONT> <% intCounter = intCounter+1 %> <% loop %> </BODY> </HTML> Operadores condicionales Introducción Los operadores condicionales, junto con las variables y las construcciones debucle, forman los pilares básicos de los lenguajes de programación y, portanto, de las aplicaciones. Las aplicaciones basadas en Web que se implementanmediante secuencias de comandos ASP pueden aprovechar el control de flujo queproporcionan los operadores condicionales, así como la interactividad y lasofisticación de HTML. Paseo por el código Este ejemplo demuestra las instrucciones If ... Then o if ... elseen VBScript y JScript, así como las instrucciones Select ... Case y switch... case, más complejas. La demostración de cada una de estasinstrucciones realiza la misma tarea: enviar una página al explorador clientecon la fecha y la hora actuales y un saludo. El texto del saludo será"Buenos días" o "Buenas tardes", dependiendo de si en elreloj del sistema aparece a.m. o p.m. <%@ LANGUAGE = VBScript %> <% Option Explicit %> <HTML> <HEAD> <TITLE>Conditional Operator Sample</TITLE> </HEAD> <BODY BGCOLOR="White" TOPMARGIN="10"LEFTMARGIN="10"> <!-- Display header. --> <FONT SIZE="4" FACE="ARIAL, HELVETICA"> <B>Conditional Operator Sample</B></FONT><BR> <HR SIZE="1" COLOR="#000000"> <!-- If...Then example --> <% Dim varDate varDate = Date() %> <P>The date is: <%= varDate %></P> <% 'Select Case statement to display a message based on the day of the month. Select Case Day(varDate) Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Response.Write("<P>It's the beginning of themonth.</P>") Case 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 Response.Write("<P>It's the middle of the month.</P>") Case Else Response.Write("<P>It's the end of the month.</P>") End Select %> <P>The time is: <%= Time %></P> <% 'Check for AM/PM, and output appropriate message. If (Right(Time,2)="AM") Then Response.Write("<P>Good Morning</P>") Else Response.Write("<P>Good Evening</P>") End If %> </BODY> </HTML>
Funciones y procedimientos Introducción Las funciones y los procedimientos proporcionan un método para evitar tenerque escribir varias veces un mismo bloque de código cada vez que desee realizaruna tarea determinada. Tanto VBScript como JScript permiten llamar a una funcióno a un procedimiento desde cualquier lugar de una secuencia de comandos. Esteejemplo demuestra cómo puede crear y utilizar estas herramientas en secuenciasde comandos ASP. Si no tiene ninguna función en la página ASP, el motor ASP se limita aprocesar el archivo completo, de principio a fin, cada vez que lo pide unexplorador cliente. Sin embargo, las funciones y los procedimientos se ejecutansólo cuando se les llama, no con el resto del código. En VBScript o JScript las funciones y los procedimientos se indican mediantela instrucción Function. Además, VBScript establece una diferenciaentre una función que devuelve un valor y otra que no lo hace; la primera deellas se indica con la instrucción Sub, que la identifica como unasubrutina. Paseo por el código Este ejemplo define una función, PrintOutMsg, que toma como parámetrosun mensaje y un número que especifica cuántas veces se escribirá el mensajeen el explorador cliente mediante el método Response.Write. Para esteejemplo, la función se limita a devolver al explorador cliente el número deveces que se imprimió el mensaje. Observaciones Es importante tener en cuenta el atributo RUNAT de la etiqueta<SCRIPT>. SI no se incluye, ASP asumirá que se trata de una secuencia decomandos del cliente y devolverá el código al explorador para que lo procese.Esto haría que ASP no reconociera la llamada a la función PrintOutMsg,devolviera un error y anulara la ejecución. <%@ LANGUAGE = VBScript %> <% Option Explicit %> <SCRIPT LANGUAGE=VBScript RUNAT=Server> 'Define Server Side Script Function. Function PrintOutMsg(strMsg, intCount) Dim i 'Output Message count times. For i = 1 to intCount Response.Write(strMsg & "<BR>") Next 'Return number of iterations. PrintOutMsg = intCount End Function </SCRIPT> <HTML> <HEAD> <TITLE>Functions</TITLE> </HEAD> <BODY BGCOLOR="White" TOPMARGIN="10"LEFTMARGIN="10"> <!-- Display header. --> <FONT SIZE="4" FACE="ARIAL, HELVETICA"> <B>Server Side Functions</B></FONT><BR>
<P> The function "PrintOutMsg" prints out a specific message a setnumber of times.<P> <% 'Store number of times function printed message. Dim intTimes 'Call function. intTimes = PrintOutMsg("This is a function test!", 4) 'Output the function return value. Response.Write("<p>The function printed out the message "& intTimes & " times.") %> </BODY> </HTML>
Datos introducidos por el usuario en un formulario con POST Introducción Probablemente, la forma más básica de interactividad Web es el formularioHTML. Es importante tener en cuenta que ASP no sustituye a los formularios, sinoque los mejora y hace que sea más fácil implementarlos y administrarlos. La etiqueta HTML <FORM> especifica qué método utilizará elformulario para comunicar la información a la secuencia de comandos que laprocesará. El atributo del método POST indica que la información delformulario pasará a través de una conexión HTTP independiente a la secuenciade comandos o al programa que la procesará. La secuencia de comandos o elprograma pueden analizar la información y realizar cualquier tarea que seanecesaria, y devolver el resultado al explorador cliente. Paseo por el código Este ejemplo muestra cómo implementar un formulario sencillo mediante elatributo del método POST de HTTP, así como una de las principalesventajas de la creación de formularios mediante ASP: la posibilidad de combinarel formulario y el código de proceso real en un mismo archivo. Este ejemplocrea un pequeño formulario con dos cuadros de entrada de texto, uno para elnombre del usuario (fname) y otro para el apellido (lname). Paraobtener el valor de las variables fname y lname en la petición setiene acceso a la colección Request.Forms y después se muestran losresultados en la parte inferior de la página. La primera vez que se ejecuta la secuencia de comandos no aparece ningúntexto debajo de la línea horizontal. Esto se debe a que no había informacióndisponible para pasarla a la secuencia de comandos cuando se inició y ASP pasapor alto las búsquedas de Request.Forms si no existe información. Sinembargo, si hace clic en el botón Enviar, se cargará de nuevo la página y lasecuencia de comandos ya dispondrá de la información que escribió en loscuadros de texto.
<%@ Language = VBScript %> <% Option Explicit %> <HTML> <HEAD> <TITLE>Form Posting</TITLE> </HEAD> <BODY BGCOLOR="White" TOPMARGIN="10"LEFTMARGIN="10"> <!-- Display header. --> <FONT SIZE="4" FACE="ARIAL, HELVETICA"> <B>Form Posting</B></FONT><BR> <HR> <P>This page will take the information entered in the form fields, and use the POST method to send the data to an ASP page. <FORM NAME=Form1 METHOD=Post ACTION="Form_VBScript.asp"> First Name: <INPUT TYPE=Text NAME=fname><P> Last Name: <INPUT TYPE=Text NAME=lname><P> <INPUT TYPE=Submit VALUE="Submit"> </FORM> <HR> <% Response.Write Request.form("fname")%> <BR> <% Response.Write Request.form("lname")%> <BR> </BODY> </HTML>
Llenar los campos Introducción Puede utilizar formularios para recopilar datos de los usuarios, pero tambiénpuede utilizarlos para mostrar información. Por ejemplo, si un exploradorcliente tiene acceso al motor de búsqueda de su directorio de teléfonos, querrámostrar los resultados de la búsqueda. La secuencia de comandos de búsqueda(que también puede implementar mediante ASP) acepta los datos introducidos porel usuario, tiene acceso a la base de datos y envía el resultado al formulariode presentación en una cadena de consulta. Este ejemplo es una demostraciónsencilla de cuál sería la apariencia del formulario. Paseo por el código Para este ejemplo, los datos se incluyen en el código de la secuencia decomandos pero, obviamente, la información podría provenir de un formulariointeractivo, de una base de datos o de un archivo de texto. Al iniciarse elejemplo se inicializan las variables. Después, crea un formulario con lasetiquetas HTML <FORM> y define cuatro cuadros de texto. Por último, conlos delimitadores de secuencias de comandos del servidor <%= ... %>,la secuencia de comandos llena los cuadros de texto con los valores establecidosen la inicialización. <%@ LANGUAGE = VBScript %> <% Option Explicit %> <% 'Create and set variables that will be used in populating 'the form. In a typical application, these values would come from a database or text file. Dim strFirstName Dim strLastName Dim strAddress1 Dim strAddress2 Dim blnInfo strFirstName = "John" strLastName = "Doe" strAddress1 = "1 Main Street" strAddress2 = "Nowhere ZA, 12345" %> <HTML> <HEAD> <TITLE>PopulateForm Sample</TITLE> </HEAD> <BODY BGCOLOR="White" TOPMARGIN="10"LEFTMARGIN="10"> <!-- Display header. --> <FONT SIZE="4" FACE="ARIAL, HELVETICA"> <B>PopulateForm Sample</B></FONT><BR> <HR SIZE="1" COLOR="#000000"> <FORM ACTION=""> <!-- Use ASP variables to fill out the form. --> <P>First Name: <INPUT TYPE="TEXT" NAME="FNAME"VALUE="<%= strFirstName %>"></P> <P>Last Name: <INPUT TYPE="TEXT" NAME="LNAME"VALUE="<%= strLastName %>"></P> <P>Street: <INPUT TYPE="TEXT" NAME="STREET"VALUE="<%= strAddress1%>"></P> <P>City State, Zip: <INPUT TYPE="TEXT"NAME="FNAME" VALUE="<%= strAddress2 %>"></P> </BODY> </HTML>
Conectividad con bases de datos Si va a crear una aplicación basada en Web, lo más probable es que tengaformularios. Posiblemente, también tendrá que conectarla de alguna forma conuna base de datos. ActiveX® Data Objects (ADO) proporciona unconjunto de eficaces herramientas que le permitirán tener acceso a orígenes dedatos y manipularlos. Los ejemplos de esta sección ilustran las técnicas necesarias para utilizarADO de forma efectiva y cómo puede utilizar mejor estas funciones en unaaplicación basada en Web.
Para obtener más información acerca de ADO y de las herramientas de accesoa datos de Microsoft en general, consulte la documentación de Microsoft DataAccess.
Consulta sencilla Introducción Aunque una base de datos puede ser un sistema muy complicado y lasherramientas de acceso a datos deben ser eficaces y sensibles, es igualmenteimportante que las tareas sencillas de acceso a bases de datos sean fáciles derealizar. Este ejemplo demuestra cómo ADO proporciona un método sencillo pararealizar este tipo de tareas. Paseo por el código El objetivo de esta aplicación de ejemplo es obtener un pequeño conjunto deregistros de una base de datos de Microsoft® Access e imprimir elresultado. El primer paso consiste en crear una instancia del objeto Connectionmediante el método Server.CreateObject. El ejemplo utiliza la instanciadel objeto Connection para abrir el proveedor de datos OLE DB y, después,para ejecutar un comando SELECT de SQL y así obtener todos los registrosde la tabla Autores. Para terminar, la secuencia de comandos recorre la coleccióndel conjunto de registros obtenido y muestra los resultados. Después se cierranel conjunto de registros y la conexión con el origen de datos OLE DB. Importante OLE DB debe estar correctamente configuradoen el servidor para que este ejemplo funcione correctamente.
<%@ LANGUAGE = VBScript %> <% Option Explicit %> <HTML> <HEAD> <TITLE>Simple ADO Query</TITLE> </HEAD> <BODY BGCOLOR="White" topmargin="10"leftmargin="10"> <!-- Display Header --> <font size="4" face="Arial, Helvetica"> <b>Simple ADO Query with ASP</b></font><br> <hr size="1" color="#000000"> Contacts within the Authors Database:<br><br> <% Dim oConn Dim oRs Dim filePath Dim Index ' Map authors database to physical path filePath = Server.MapPath("authors.mdb") ' Create ADO Connection Component to connect ' with sample database Set oConn = Server.CreateObject("ADODB.Connection") oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &filePath ' Execute a SQL query and store the results ' within recordset Set oRs = oConn.Execute("SELECT * From Authors") %>
<TABLE border = 1> <% Do while (Not oRs.eof) %> <tr> <% For Index=0 to (oRs.fields.count-1) %> <TD VAlign=top><% = oRs(Index)%></TD> <% Next %> </tr> <% oRs.MoveNext Loop %> </TABLE> <% oRs.close oConn.close %> </BODY> </HTML>
Agregar o eliminar registros Introducción Este ejemplo muestra las técnicas que necesita conocer para utilizar ASP yADO con el fin de agregar y eliminar registros de una base de datos. Paseo por el código Primero se utiliza CreateObject para crear una instancia del objeto Connection,que a su vez se utiliza para abrir una conexión con el proveedor de datos OLEDB. Se utiliza de nuevo CreateObject para crear un objeto Recordsetvacío. Se configura la propiedad ActiveConnection para hacer referenciaal nuevo objeto Connection. Aunque el objeto Recordset de ADO proporciona el método AddNewpara agregar nuevos registros a una base de datos, puede que la escalabilidadmejore si envía comandos INSERT de SQL directamente al motor de base de datos.Este ejemplo utiliza el comando Recordset.Execute, junto con la cadena decomandos apropiada de SQL, para insertar información acerca de un nuevo autor. En este momento se crea otra instancia del objeto Recordset y se abrecon otro comando SQL. Se selecciona el registro recién agregado y se elimina,para lo cual se pasa el comando DELETE de SQL directamente al motor de base dedatos. Por último, finaliza la secuencia de comandos. Importante OLE DB debe estar correctamente configuradoen el servidor para que este ejemplo funcione correctamente. <%@ LANGUAGE = VBScript %> <% Option Explicit %> <% Response.Expires= -1 %> <!--METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" --> <HTML> <HEAD> <TITLE>Add/Delete Database Sample</TITLE> </HEAD> <BODY BGCOLOR="White" topmargin="10"leftmargin="10"> <!-- Display Header --> <font size="4" face="Arial, Helvetica"> <b>Add/Delete Database Sample</b></font><br> <hr size="1" color="#000000"> <% Dim oConn Dim oRs Dim filePath ' Map authors database to physical path filePath = Server.MapPath("authors.mdb") ' Create ADO Connection Component to connect with sample database Set oConn = Server.CreateObject("ADODB.Connection") oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &filePath ' To add, delete and update recordset, it is recommended to use ' direct SQL statement instead of ADO methods. oConn.Execute "insert into authors (author, YearBorn) values ('PaulEnfield', 1967)" ' Output Result Set oRs = oConn.Execute (" select * from authors where Author= 'PaulEnfield' and YearBorn =1967 " )
Response.Write("<p>Inserted Author: " &oRs("Author") & "," & oRs("YearBorn")) ' Close Recordset oRs.Close Set oRs= Nothing ' Delete the inserted record oConn.Execute "Delete From authors where author='Paul Enfield' andYearBorn = 1967 " ' Output Status Result Response.Write("<p>Deleted Author: Paul Enfield, 1967") %> </BODY> </HTML>
Actualizar registros Introducción Este ejemplo muestra cómo utilizar ADO en una aplicación para actualizarlos registros existentes. Paseo por el código Primero se utiliza CreateObject para crear una instancia del objeto Connection,que a su vez se utiliza para abrir una conexión con el proveedor de datos OLEDB. Se utiliza de nuevo CreateObject para crear un objeto Recordsetvacío. Se configura la propiedad ActiveConnection para hacer referenciaal nuevo objeto Connection. Después se configura el nuevo conjunto de registros. El método Recordset.Executeutiliza como parámetro una cadena de comandos SQL. Este ejemplo utiliza unacadena de comandos UPDATE de SQL para realizar la actualización en losregistros adecuados de la base de datos. <%@ LANGUAGE = VBScript %> <% Option Explicit %> <!--METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" --> <HTML> <HEAD> <TITLE>Update Database</TITLE> </HEAD> <BODY BGCOLOR="White" topmargin="10"leftmargin="10"> <!-- Display Header --> <font size="4" face="Arial, Helvetica"> <b>Update Database</b></font><br> <hr size="1" color="#000000"> <% Dim oConn ' object for ADODB.Connection obj Dim oRs ' object for output recordset object Dim filePath ' Directory of authors.mdb file ' Map authors database to physical path filePath = Server.MapPath("authors.mdb") ' Create ADO Connection Component to connect with sample database Set oConn = Server.CreateObject("ADODB.Connection") oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &filePath ' To add, delete and update recordset, it is recommended to use ' direct SQL statement instead of ADO methods. oConn.Execute "Update Authors Set Author ='Scott Clinton'" _ & "where Author='Scott Guthrie' " Set oRs = oConn.Execute ( "select * from Authors where author" _ & "= 'Scott Clinton'" ) %> Changed Author: <%= oRs("Author") %>, <%=oRs("Yearborn") %> <P> <% oConn.Execute "Update Authors Set Author ='Scott Guthrie'" _ & "where Author='Scott Clinton' " Set oRs = oConn.Execute ( "select * from Authors where author" _ & "= 'Scott Guthrie'" ) %> Changed Author: <%= oRs("Author") %>, <%=oRs("Yearborn") %> </BODY> </HTML> MapPath El método MapPath asigna al directorio físico correspondiente delservidor la ruta virtual o relativa especificada. Sintaxis Server.MapPath( Ruta ) Parámetros Ruta Especifica la ruta virtual o relativa que se asignará a un directorio físico.Si Ruta comienza con una barra diagonal (/) o con una barra diagonalinversa (\), el método MapPath devuelve la ruta como si Ruta fuerauna ruta virtual completa. Si Ruta no comienza con una barra diagonal, elmétodo MapPath devuelve una ruta relativa al directorio del archivo .aspque se procesa. Observaciones El método MapPath no comprueba si la ruta que devuelve existe en elservidor o si es válida. Como el método MapPath asigna la ruta independientemente de si losdirectorios especificados existen o no, puede utilizarlo para asignar una ruta auna estructura física de directorios y, después, pasarla a un componente quecree en el servidor el directorio o el archivo especificado. Puede utilizar la sintaxis de ruta relativa para el parámetro Ruta siel valor de la propiedad AspEnableParentPaths es TRUE (que es el valorpredeterminado). Si le preocupa permitir que las secuencias de comandos tenganacceso a la estructura física de directorios, puede deshabilitar esta característicasi asigna el valor FALSE a la propiedad AspEnableParentPaths. Para ellopuede utilizar el complemento Servicios de Internet Information Server o unasecuencia de comandos. Ejemplo Para los siguientes ejemplos, el archivo data.txt se encuentra en eldirectorio C:\Inetpub\Wwwroot\Script, al igual que el archivo test.asp, quecontiene las siguientes secuencias de comandos. El directorio C:\Inetpub\Wwwrootse establece como directorio particular del servidor. El siguiente ejemplo utiliza la variable de servidor PATH_INFO para asignarla ruta física al archivo actual. La siguiente secuencia de comandos <%=server.mappath(Request.ServerVariables("PATH_INFO"))%><BR> produce el resultado c:\inetpub\wwwroot\script\test.asp<BR> Como los parámetros de la ruta de los siguientes ejemplos no empiezan con uncarácter de barra diagonal, se asignan de forma relativa al directorio actual,en este caso C:\Inetpub\Wwwroot\Script. Las siguientes secuencias de comandos <%= server.mappath("data.txt")%><BR> <%= server.mappath("script/data.txt")%><BR> producen el siguiente resultado c:\inetpub\wwwroot\script\data.txt<BR> c:\inetpub\wwwroot\script\script\data.txt<BR>
Los dos ejemplos siguientes utilizan el carácter de barra diagonal paraespecificar que la ruta que se obtiene debe buscarse como ruta virtual completadel servidor. Las siguientes secuencias de comandos <%= server.mappath("/script/data.txt")%><BR> <%= server.mappath("\script")%><BR> producen el siguiente resultado c:\inetpub\wwwroot\script\data.txt<BR> c:\inetpub\wwwroot\script<BR> Los siguientes ejemplos muestran cómo puede utilizar una barra diagonal (/)o una barra diagonal inversa (\) para obtener la ruta física al directorioparticular. Las siguientes secuencias de comandos <%= server.mappath("/")%><BR> <%= server.mappath("\")%><BR> producen el siguiente resultado c:\inetpub\wwwroot<BR> c:\inetpub\wwwroot<BR>
El siguiente documento es un manual de ASP, trata los principales comandos deASP, desde lo mas sencillo o lo intermedio, comandos y utilidades basicas parael desarrollo de paginas Web interactivas, haciendo uso del Microsoft InternetInformation Service.
Trabajo enviado por: Publicación enviada por P. Padrón Contactar mailto:ppadron@telcel.net.ve Código ISPN de la Publicación EpypklZuplXRuEDLXH Publicado Thursday 7 de August de 2003 Ultimas Publicaciones en ilustrados.com
ilustrados.com nace con el fin difundir el conocimiento publicando trabajos de investigación, monografias, tesis, presentaciones powerpoint y afines. Publicar trabajos en ilustrados.com ha alcanzado prestigio y reconocimiento internacional siendo cada vez más el número de académicos, empresas, investigadores, científicos que consultan las publicaciones de nuestro portal. | |||||||||||||||||||||||||||||||||||||||||||||||||