Soporta requisitos de procesamiento de transacción online, complejos y rigurosos.

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Soporta requisitos de procesamiento de transacción online, complejos y rigurosos."

Transcripción

1 MANEJADORES DE BASE DE DATOS IBM Informix Dynamic Server (IDS) 9.30 proporciona fiabilidad superior, atendiendo las necesidades de las exigentes prácticas actuales del e business particularmente para aplicativos que requieran transacciones de alto desempeño. Soporta requisitos de procesamiento de transacción online, complejos y rigurosos. Optimiza capacidades de inteligencia del negocio competitivas Maximiza operaciones de datos para el grupo de trabajo y para la empresa en total. Proporciona la firmeza de una administración de base de datos comprobada, mejor de su especie. Informix Dynamic Server con J/Foundation combina las características de IDS con un ambiente abierto, flexible, empotrado de Java! Virtual Machine. IDS con J/Foundation permite que los desarrolladores de base de datos escriban lógica de negocio del lado servidor usando el lenguaje Java!. Java User Defined Routines (UDRs) tienen completo acceso a las características de la base de datos extensible líder mundial, de la base de datos IDS. Haciendo del IDS la plataforma ideal para el desarrollo de base de datos Java. Además de Java UDRs, el IDS está en conformidad con el estándar SQLJ para procedimientos almacenados en Java, permitiendo el uso de los paquetes Java estándar que se encuentran incluidos en el Java Development Kit (JDK). Escribir UDRs en Java proporciona aplicativos mucho más flexibles que se pueden desarrollar más rápidamente que C, y más potentes y administrables que los lenguajes de procedimientos almacenados. Una extensión adicional de escribir UDRs en Java es escribir módulos DataBlade en Java. Los módulos DataBlade son colecciones de nuevas funciones del lado servidor y tipos de datos puestos en conjunto para extender el IBM Informix Dynamic Server con el servidor de datos J/Foundation. El DataBlade Developer's Kit (DBDK) ahora soporta Java y permite el desarrollo, diseminación y depuración de UDRs en Java. La tecnología IBM Informix DataBlade es líder en la industria en extender el servidor para permitir tanto la administración de contenido rich, cuanto la lógica de negocio. J/Foundation está provisto con IDS en muchas de las plataformas IDS 9.30 soportadas. Las plataformas soportadas incluyen Sun Solaris 32 bit, Microsoft Windows NT/2000, Linux, IBM AIX, SGI Irix, y Compaq Tru 64 IBM Informix Dynamic Server (IDS) 9.30 proporciona fiabilidad superior, atendiendo las necesidades de las exigentes prácticas actuales del e business particularmente para aplicativos que requieran transacciones de alto desempeño. Soporta requisitos de procesamiento de transacción online, complejos y rigurosos. Optimiza capacidades de inteligencia del negocio competitivas Maximiza operaciones de datos para el grupo de trabajo y para la empresa en total. Proporciona la firmeza de una administración de base de datos comprobada, mejor de su especie. Informix Dynamic Server con J/Foundation combina las características de IDS con un ambiente abierto, flexible, empotrado de Java! Virtual Machine. IDS con J/Foundation permite que los desarrolladores de base 1

2 de datos escriban lógica de negocio del lado servidor usando el lenguaje Java!. Java User Defined Routines (UDRs) tienen completo acceso a las características de la base de datos extensible líder mundial, de la base de datos IDS. Haciendo del IDS la plataforma ideal para el desarrollo de base de datos Java. Además de Java UDRs, el IDS está en conformidad con el estándar SQLJ para procedimientos almacenados en Java, permitiendo el uso de los paquetes Java estándar que se encuentran incluidos en el Java Development Kit (JDK). Escribir UDRs en Java proporciona aplicativos mucho más flexibles que se pueden desarrollar más rápidamente que C, y más potentes y administrables que los lenguajes de procedimientos almacenados. Una extensión adicional de escribir UDRs en Java es escribir módulos DataBlade en Java. Los módulos DataBlade son colecciones de nuevas funciones del lado servidor y tipos de datos puestos en conjunto para extender el IBM Informix Dynamic Server con el servidor de datos J/Foundation. El DataBlade Developer's Kit (DBDK) ahora soporta Java y permite el desarrollo, diseminación y depuración de UDRs en Java. La tecnología IBM Informix DataBlade es líder en la industria en extender el servidor para permitir tanto la administración de contenido rich, cuanto la lógica de negocio. J/Foundation está provisto con IDS en muchas de las plataformas IDS 9.30 soportadas. Las plataformas soportadas incluyen Sun Solaris 32 bit, Microsoft Windows NT/2000, Linux, IBM AIX, SGI Irix, y Compaq Tru 64 Nombre del Formato: Tipo de Formato: Descripción del Formato: Formato disponible en Data Junction Enterprise: Formato disponible en Data Junction Profesional: Nombre del Editor: Más información en: Comentarios adicionales: Informix Base de Datos Base de datos comercial Sí No (la versión Enterprise es necesaria si se desea leer o escribir datos en este formato) IBM Software Informix Sin comentarios Funciones Oracle Requisitos previos: Usted necesita saber los valores de las variables de entorno siguientes: ORACLE_HOME Ésta es la trayectoria a su directorio de la instalación del oráculo. Se define generalmente en la escritura de la conexión de UNIX de su usuario del oráculo y de todos los usuarios del cliente del oráculo. ORACLE_SID Éste es el nombre del caso de la base de datos que usted desea conectar con. También se define en el ambiente de UNIX de su usuario del oráculo y de todos los usuarios del cliente del oráculo. Descubra los valores de estas variables por el loggin adentro como usuario que pueda conectar con la base de datos en la pregunta con sqlplus. Entonces mecanografíe en su aviso de la cáscara de Unix: prompt> echo $ORACLE_HOME /opt/oracle/oracle/8.0.3 prompt> echo $ORACLE_SID ORACLE 2

3 A simple PHP script using ora_* functions <?php putenv("oracle_sid=oracle"); putenv("oracle_home=/opt/oracle/oracle/8.0.3"); $conn = ora_login("scott", "tiger"); $curs = ora_open($conn); ora_commitoff($conn); $query = sprintf(&quotselect * from cat"); /* Long version */ /* ora_parse($curs, $query); ora_exec($curs); ora_fetch($curs); */ /* Short Version */ ora_do($conn, $query); $ncols = ora_numcols($curs); $nrows = ora_numrows($curs); printf("result size is $ncols cols by $nrows rows. "); for ($i=0; $i<$ncols; $i++) { printf("col[%s] = %s type[%d] = %s ", $i, ora_columnname($curs, $i), $i, ora_columntype($curs, $i)); } for ($j=0; $j<$nrows; $j++) { for ($i=0; $i<$ncols; $i++) { $col = ora_getcolumn($curs, $i); printf(&quotval[%d, %d] = %s * ", $j, $i, ora_getcolumn($curs, $i); } printf(" "); }?> Stevel at nettek llc dot com <?php putenv( 3

4 "ORACLE_SID=sid1"); putenv( "ORACLE_HOME=/u01/app/oracle/product/8.0.5"); $handle = ora_plogon( "TIGER")or die; $cursor = ora_open($handle); ora_commitoff($handle); $query = "SELECT * FROM EMP"; ora_parse($cursor, $query) or die; ora_exec($cursor); echo "<HTML><PRE>\n"; echo "$query\n\n"; $numcols = 0; while(ora_fetch($cursor)){ $numcols = ora_numcols($cursor); for($column=0; $column < $numcols; $column++){ $data = trim(ora_getcolumn($cursor, $column)); if($data =="") $data = "NULL"; echo"$data\t"; } echo "\n"; } $numrows = ora_numrows($cursor); echo "\nrows RETURNED: $numrows\n"; 4

5 echo "</PRE></HTML>\n"; ora_close($cursor);?> Vistas y envolturas La implementación de VFP de las vistas le permite trabajar con ellas de modo similar a como trabaja con tablas nativas. Como las trataré en detalle en este artículo, usarlas es clave para lograr ser independiente del software de soporte (back end). El otro concepto importante es el uso de envolturas. Por envoltura me refiero a la técnica por la cual una función o comando, como SKIP, es "envuelta" en algún código que la protege y almacenada en una función definida por el usuario, de forma tal que cada vez que se utilice, no tenga que codificar de nuevo la intercepción de errores necesaria. Por ejemplo, la función SafeSkip puede verse como: Function SafeSkip LParameters calias llmoved =.F. * Avoid that "EOF encountered" error If!EOF(cAlias) Skip In (calias) If EOF(cAlias) * Moved to EOF, retreat Skip 1 In (calias) Else llmoved =.T. Endif Endif Return llmoved Mientras más fuentes de datos intente accesar, más código condicional necesitará escribir. Escribir código de esta forma le proporcionará los siguientes beneficios: 5

6 Crea un solo punto de mantenimiento si se necesita realizar algún cambio. El mismo código puede accesar múltiples fuentes de datos. Puede comenzar a codificar aplicaciones cliente/servidor utilizando software de soporte en VFP hasta que se tome una decisión acerca de utilizar MS SQL Server, Oracle, Informix, Sybase o DB/2. Formularios de entrada de datos basadas en vistas. Cuando se trata de formularios de entrada de datos para una aplicación cliente/servidor, puede utilizar ya sea SQL Pass through (SPT), el cual es sencillamente pasar una cadena de SQL a través de un ODBC a la fuente de datos, o vistas remotas, que significa enunciados SQL almacenados en DBC cuyas tablas temporales resultantes se comportan muy similar a las tablas nativas de VFP. El SPT almacenará su conjunto de resultados en un cursor local, así que Usted tendrá que hacer un ciclo sobre los controles dentro de un formulario y añadir cada uno de ellos individualmente (por ejemplo, thisform.txtcustomer.value = SQLResult.customer). Claro, actualizar el servidor requeriría que Usted creara los enunciados SQL Update, Insert, y Delete apropiados, sin mencionar la verificación de contención multiusuario que debe ser codificada también, una tarea algo tediosa y plagada de oportunidades de error. Esta es la manera en que las cosas son usualmente hechas en Visual Basic (así que Usted sabe que debe de haber una mejor manera con VFP <risa>). Las vistas remotas, por otro lado, son increíblemente sencillas de usar. Todo lo que necesita hacer es crear una vista con la misma estructura que la tabla subyacente, abrir la vista, (realizar el SQL Select), manipular la tabla temporal local que se crea de la misma forma en que lo haría con una tabla nativa de FoxPro, luego hacer un TableUpdate. El TableUpdate automáticamente hace unos enunciados SQL Update, SQL Insert y SQL Delete por Usted y los pasa al administrador del controlador ODBC en tu estación de trabajo. El administrador del controlador ODBC utiliza el controlador ODBC que Usted ha seleccionado para traducir el SQL en la sintaxis que el software de soporte (back end) entiende. Es así de sencillo. Yo recomiendo utilizar las vistas remotas para los ofrmularios de entrada de datos por las siguientes razones: Un conjunto de código. El mismo conjunto de código puede funcionar con tablas VFP o con tablas remotas en un SQL Server. Usted solo tiene que utilizar vistas locales o vistas remotas de acuerdo a las tablas que se utilicen. Desempeño. De muchas formas, las vistas pueden ser más rápidas que el SPT debido a que TableUpdate (una función de VFP de bajo nivel) crea automáticamente el código SPT por Usted. El tiempo que tomaría crear las cadenas de SQL update por Usted mismo y ejecutar el código muy probablemente sería mayor que el TableUpdate. Si Usted piensa en cuanto es lo que en realidad TableUpdate realiza (registrar la memoria intermedia [buffer] de cambios, determinar el tipo de actualización hecha, leer las propiedades de la vista, construir el lote de enunciados SQL, pasarlos al administrador de manejador ODBC, regresar una bandera de éxito/fracaso y limpiar la memoria intermedia de cambios), estoy seguro de que Usted estará de acuerdo con que puede tener mejor desempeño que el SPT. Todo lo anterior se puede hacer sin un solo error de sintaxis. Las propiedades de las vistas ofrecen una funcionalidad adicional sobre el SPT. Por ejemplo, para simular una cuenta de cinco BatchUpdate, se necesitaría concatenar cinco enunciados SQL con punto y comas antes de pasarlos al ODBC. El SPT aún tiene un muy importante lugar en la aplicación cliente/servidor; Discutiré más acerca de esto en el Paso 3. Para mayor información sobre la utilización básica de las vistas locales y remotas, refierase a la VFP Developer's Guide. Todas los comandos relacionados con datos deben de pasar a través de una función. Casi la peor cosa que puede hacer para convertir en difícil el diseño de su aplicación, es codificar directamente (hard code) comandos de acceso, tales como los enunciados SQL, Zap, Pack, Reindex, Seek y 6

7 demás. En otras palabras, luce su código como el siguiente? Function PurgeOrders * This function purges (deletes) orders shipped * prior to the date passed. LParameter dshipdate Local lcmsg Select Count(*) as OrderCnt from Orders ; Where ShipDate <= dshipdate Into Cursor tcpurge If _Tally = 0 lcmsg = "There are no orders to purge." Else Delete from Orders Where ShipDate <= dshipdate lcmsg = Trim(Str(_Tally)) + ; " orders were purged from the system." Endif MessageBox(lcMsg) EndFunc Esta clase de enunciados SQL es solo buena para accesar tablas que se pueden encontrar en su ruta de acceso. Dentro del mundo cliente/servidor puede comunicarse con las fuentes de datos por medio de un manejador de conexión (connection handle). Para las vistas, la cláusula de conexión remota <ConnectionName DataSourceName> del comando Create SQL View habilita que una vista accese datos remotos. Y para el SQL en línea, la función de FoxPro SQLExec() es utilizada para pasar enunciados SQL al servidor por medio de ODBC. Regresa un 1 si hubo un error, 1 en caso de éxito y un 0 si una petición (query) asíncrona está pendiente de completarse aún. Como ejemplo, aquí está como obtener un cursor de órdenes de venta de un cliente dado utilizando SQL Pass through: llsuccess = SQLExec(goEnv.nHandle, ; "Select * From ORDERS Where Customer =?ccustomer",; "tcorders") > 0 Si Usted hubiese empleado una función de envoltura para el enunciado SQL Select dentro de PurgeOrders, entonces podría condicionalmente ejecutarlo contra datos en el SQL Server, datos en el servidor de archivos o incluso datos en la estación de trabajo local. Debe crear clases de las funciones necesarias para hacer el acceso 7

8 de datos independiente del software de soporte (back end). Aquí esta la función PurgeOrders reescrita de forma cliente/servidor: Function PurgeOrders * This function purges (deletes) orders shipped * prior to the date passed. LParameter dshipdate Local lcsqlstr lcsqlstr = "Select Count(*) as OrderCnt " + ; "from Orders " + ; "Where ShipDate <=?dshipdate" This.SQLExecute(lcSQLStr, "tcpurge") If Reccount("tcPurge") = 0 lcmsg = "There are no orders to purge." Else lcsqlstr = "Delete from Orders ; Where ShipDate <=?dshipdate" This.SQLExecute (lcsqlstr) lcmsg = Trim(Str(Reccount("tcPurge"))) ; + " orders were purged from the system." Endif MessageBox(lcMsg) EndFunc Function SQLExecute * Wrapper for VFP function SQLExec LParameters cexecutestr, ccursor Local llsuccess ccursor = Iif(PCount() = 1, "SQLResult", ccursor) 8

9 llsuccess =.T. If goenv.lremote llsuccess = (SQLExec(goEnv.nHandle, ; cexecutestr, ccursor) > 0) Else && local, just macro expand cexecutestr * Add VFP "Into Cursor..." clause If Upper(Left(cExecuteStr,6)) = "SELECT" cexecutestr = cexecutestr + ; " Into Cursor " + ccursor + " NoFilter" Endif * This should be error trapped to return llsuccess &cexecutestr Endif Return llsuccess EndFunc Notará el uso de Reccount() vs. _Tally. Los cursores SPT no actualizan _TALLY, así que tendrá que olvidarse de utilizar esta variable tan agradable. Sin embargo, no tendrá que preocuparse de que Reccount() contenga los registros eliminados, dado que las fuentes SQL de datos remotas no tienen una eliminación de dos etapas. Y si el software de soporte fuese una base de datos de VFP, la cláusula NoFilter prevendría que VFP creara un filtro en vez de una tabla temporal. La segunda peor cosa que puede hacer para convertir su aplicación en un diseño cliente/servidor difícil es incluir funciones de VFP en sus SQL Selects. Sin embargo, si Usted tiene una envoltura como SQLExecute, tiene la oportunidad de leer el enunciado SQL antes de ejecutarlo y convertirlo a la sintaxis específica del software de soporte. Por ejemplo, la función de SQL Server, Convert() se utiliza para convertir tipos de datos. Así que, Usted probablemente podría imaginarse como se vería el código para encontrar "Str(" o "Val(" en una cadena y hacer una StrTran() para poner la función Convert en lugar de las anteriores. Una última opción es remover la función incluida y hacer el enunciado SQL independiente del software de soporte, luego utilizar la función VFP específica en el cursor local. Utilice procedimientos almacenados o peticiones parametrizadas. En términos de velocidad de ejecución, no hay nada más rápido que un procedimiento almacenado (stored procedure, SP). Dado que son precompilados y viven en el mismo edificio que las tablas, qué podría ser más eficiente?. La forma en que los parámetros necesitan ser pasados al software de soporte es casi siempre diferente, así que, de nuevo, una función de envoltura se vuelve útil aquí. Por ejemplo, tome nota de la sintaxis distinta entre VFP y el SQL Server: 9

10 SQLExec("usp_GetOrders('Acme')") && VFP SQLExec("usp_GetOrders 'Acme'") && SQL Server Todo lo que Usted necesita para resolver esto es mejorar la función de envoltura SQLExecute para manejar procedimientos almacenados. (Le dejaré esta sencilla tarea a Usted). Si no desea irse por la ruta de los procedimientos almacenados, siempre están las peticiones parametrizadas almacenadas en objetos de negocios. Con las peticiones parametrizadas, no tiene que preocuparse de la sintaxis de llamada de procedimientos almacenados específicos del software de soporte, ni tiene de preocuparse acerca de rescribir los procedimientos almacenados para cada fuente de datos. La disminución de desempeño que se obtiene puede bien valer el incremento en la mantenibilidad. Usted ya ha visto como es que se ve una petición parametrizada; es solo un enunciado SPT: llsuccess = SQLExec(goEnv.nHandle, ; "Select * From Orders Where Customer ; =?ccustomer", "tcorders") > 0 Note la sintaxis de la condición de filtrado: Customer =?ccustomer. La sintaxis es importante debido a que: 1) la mayoría de los software de soporte la soportan; y 2) le evita tener que construir los parámetros del enunciado SQL en una cadena de caracteres específica del software de soporte: Case lsqlserver "...Customer = '" + ccustomer + "' And ; shipdate <= '" + DTOS(dShipdate) + "'" Case VFP "...Customer = '" + ccustomer + "' And ; shipdate <= {" + DTOS(dShipdate) + "}" Otro beneficio es que no se topará con el "error del apóstrofe", que ocurre cuando intenta construir un enunciado SQL como el anterior, pero la variable tiene un apóstrofe en ella (por ejemplo, "Jim's"). Dado que su valor es evaluado antes de que la cadena sea enviada al servidor, terminará con comillas no apareadas correctamente y con un error de tiempo de ejecución. Como puede ver, el uso de "?" puede realmente compactar su código, así que yo recomiendo su utilización ampliamente. Por las anteriores razones, recomiendo SPT en vez de las vistas, siempre esté creando una petición ad hoc y/o no intenta actualizar la fuente de datos. Muchas personas crean vistas para propósitos de reporteo, pero en sistemas grandes, no puedo ver la razón de incurrir en la sobrecarga de utilizar vistas cuando un procedimiento almacenado o un enunciado SPT SELECT puede ser implementado en su lugar. (A menos que deseé exponer una vista de lado del servidor a sus usuarios). El DBC de vistas del lado del cliente se puede volver demasiado sobrecargado con datos que no necesita mantener, dado que no hay propiedades de la vista que realmente necesiten ser establecidas. Encuentre maneras creativas de limitar los conjuntos de resultados. 10

11 Dentro del paradigma cliente/servidor, los conjuntos de registros son transferidos desde el servidor hacia la estación de trabajo local, por tanto, deben ser lo más pequeños posible para reducir el tráfico en la red. Por lo tanto, de manera algo diferente a como funcionan las funciones de aplicaciones de servidor de archivos VFP, las formas se deben abrir sin datos. Esto además ayudará a mantener una carga ligera causada por las formas, aún y si la cantidad de sus datos crecen más allá de la capacidad de bases de datos de servidores de archivos, como VFP. Y si piensa al respecto, tiene sentido dar a los usuarios solo aquello que buscan. Por qué presentar al usuario una tabla que tiene 10,000 ordenes de venta abiertas cuando solo puede trabajar con un cliente a la vez? Piense que hemos programado así, durante tanto tiempo, debido a que las herramientas de búsqueda incremental nos dotaron de capacidades de navegación rápida, aún entre grandes cantidades de datos. Si bien es cierto que esto es aceptable en sistemas pequeños, la carga se volvería insoportable en una red y su aplicación no escalaría al mismo paso que los datos y los usuarios lo hicieran. Vistas parametrizadas. Así que si su forma se abre sin datos en el mundo cliente/servidor, como le hacemos para obtener datos? Necesita proporcionarle a sus usuarios una herramienta para introducir criterios de filtrado. Estos valores servirán como parámetros de la porción Where del enunciado SQL de la vista. Usted puede proveer esta funcionalidad de muchas formas diferentes, puede elegir entre muy sencillas hasta muy complejas. Una implementación sencilla es tener una forma adherida a una vista parametrizada. Cuando un usuario entra en el modo Find, Usted puede proveer una caja de texto para introducir el valor del parámetro. Por ejemplo: * Create this view when you create the form. Create SQL View vorders As Select * From Orders Where Customer =?ccustomer * Open the view (with no data) in the Data Environment * or Load when you run the form. Use vorders NoData * Get the customer parameter in Find Mode ccustomer = thisform.txtcustomer.value Requery() && retrieve orders for ccustomer Una segunda técnica que proporcionaría mucha más flexibilidad es proporcionar una herramienta Query By Form (QBF). El QBF significa que en el modo Find, Usted puede proveer a los usuarios una manera para que introduzcan criterios de filtrado en cualquier (o solo la mayoría) de los controles de una forma. Luego construya una cadena Where SQL de acuerdo y utilícela de una de dos maneras: 1. Construya un enunciado SPT para crear un conjunto de registros de los campos importantes y el ID único. Construya una vista que esté parametrizada por el ID único. Los usuarios pueden navegar el cursor para encontrar los datos que necesitan y Usted hacer de nuevo la petición de la vista basada en la ID única. 2. Puede también utilizar la cadena SQL generada por la QBF para recrear la definición de vista remota en tiempo real. Dado que su DBC de las vistas está en la estación de trabajo, no hay problemas de contención 11

12 aquí. (Más de esto en el Paso 5). Sugerencia: Existen al menos dos herramientas de otras compañías de software disponibles para implementar Query By Form en VFP: QBF Builder Stonefield Query Manejando los enlaces entre controles y a tablas de búsqueda Este concepto de limitar el conjunto de resultados debería ser aplicado también a los controles. Qué de bueno tiene limitar las ordenes de venta a un cliente si se van a llenar varias casillas de selección (combo boxes) en la forma con datos de una tabla de búsqueda (look up)?. La lista de selección (list box) de varios miles de registros no tiene lugar en una aplicación cliente/servidor. Hay al menos dos formas de evitar este problema. Una es no utilizar esta clase de controles en tablas grandes y en su lugar utilizar una caja de texto. Luego solo lanzar una forma separada con una tabla cuando el usuario seleccione una tecla de método abreviado (hotkey) definida. Si Usted insiste en utilizar controles con registros múltiples, puede intentar con una segunda técnica. No llene el control hasta que el evento GotFocus sea disparado. Esta técnica de enlace tardío (late binding) le evitará la sobrecarga de llenar controles no utilizados. Puede utilizar una combinación de cualquiera de estas técnicas dependiendo del tamaño anticipado de la tabla de búsqueda y solo controlarla con una propiedad y/o tabla de opciones. La VFP Developer's Guide le ofrece una sugerencia adicional: Hacer copias de las tablas de búsqueda frecuentemente utilizadas a cada estación de trabajo. Como sea, el saber cuando mantener una versión local en sincronía con la versión del servidor me suena como una pesadilla. Por lo tanto, recomiendo una de las opciones anteriores. Formularios Uno a Muchos Los formularios uno a muchos deberían ser manejados como sigue. Cualquiera que sea la técnica que Usted decida utilizar para formularios de tabla única debe ser utilizada para la porción del encabezado de un formulario uno a muchos. Las vistas de las tablas hijas, deben de ser parametrizada con el ID único de la vista madre. Así que cuando Usted navegue de un encabezado a otro, a la vista hija solo necesita ser pedida de nuevo. Al utilizar este método, solo el hijo del encabezado actual necesita ser adquirido localmente. Mantenga las vistas en su propio DBC para tratar software de soporte independientemente. Si, en su diseño de marco de trabajo, las vistas son mantenidas en sus propios DBC, esto hará la transición a otro software de soporte más sencilla. En otras palabras, cuando Usted desea que su aplicación accese a fuentes de datos diferentes, desea mantener la mayor cantidad de piezas de su marco de trabajo intactas. Mantener las vistas en DBCs separados de las tablas (en un escenario donde VFP es el software de soporte) hará el acceso las fuentes de datos remotas una cuestión de accionar un interruptor. La implementación podría ser como sigue: Cree un directorio llamado \VFPViews, y almacene un DBC de vistas locales en él. Nombre el DBC como AppViews.DBC (\VFPViews\AppViews.DBC). Cree un directorio separado para cada fuente de datos que Usted desea accesar, manteniendo el mismo nombre del DBC de la vista. En otras palabras el DBC \SSViews\AppViews.DBC contendría vistas 12

13 que accesan un SQL Server. Dado que frecuentemente existen varios lugares en su código donde se referirá a las vistas de la base de datos, esto evitará que tenga que escribir código condicional para cada software de soporte. En un archivo de inicialización de su elección, almacene la información tal como el nombre DSN del ODBC, la ruta de directorios donde están almacenadas las vistas, una bandera indicando si accesa datos locales o remotos y si son locales, la ruta de directorios de donde están almacenadas las tablas de VFP. Establezca la ruta con Set Path To... al directorio de vistas apropiado al iniciar la aplicación. Si es un software de soporte en VFP, establezca Set Path To al directorio de red donde se almacenan las tablas de VFP. Aunque es cierto que podría añadir el nombre de la base de datos de vistas al archivo de inicialización, frecuentemente esto ya esta codificado por toda la aplicación. El tener DBCs separados de las vistas también mantendrá el tamaño de éstas manejable. Si el software de soporte fuese una base de datos de VFP, combinarlos significaría que se necesitarían almacenar dos veces el doble del número de objetos de bases de datos. Si tal fuera el caso, Modify Database podría tomarnos un tiempo excesivamente largo en un sistema grande. También notará que el DBC de la vista (sin importar si contiene vistas remotas o locales) es mantenido localmente, no en la red para ser compartido por todos los usuarios. Utilizar esta técnica brindará mucha de la flexibilidad específica de usuario, como aprenderá luego en este artículo. Todo este pedazo se siente como si se asumiera un almacenamiento local también, pero no está dicho explícitamente. Utilize Locate en vez de Seek para navegar en datos locales. Dado que todos los datos son accesados a través de enunciados SQL en una aplicación cliente/servidor, Usted pierde la habilidad de utilizar el mejor amigo de todo desarrollador de VFP, Seek. Enjuage esas lágrimas, porque hay una alternativa: Locate. Dado que los conjuntos locales de resultados serán (por definición cliente/servidor) relativamente pequeños, el comando Locate será más que suficiente para mover el puntero de registro en un cursor local o una tabla temporal. Aquí vienen aún mejores noticias. El conjunto de resultados de una vista es de hecho una tabla temporal. Para ver a que me refiero. Abra cualquier vista y verifique el valor que regresa DBF(). Debe de ver algo como C:\WINDOWS\TEMP\ TMP. Así que esta "cosa" de hecho tiene una presencia en el disco. Y en VFP, tiene una presencia en el disco que podemos indexar. Así que, siéntase libre de indexar al cursor de la vista tanto como desee si siente la necesidad de la velocidad. Pero de todas formas, yo me quedaré con Locate en vez de Seek. Dado que Locate es, además, optimizable con Rushmore, el utilizarlo con o sin índice no hará que falle, uno solo será marginalmente más rápido que el otro. Conclusión. Bueno, solo estamos a la mitad, pero desde ahora estoy seguro de que puede ver la luz al fondo del túnel. Las envolturas (wrappers) y las vistas son ciertamente las claves para hacer su código independiente del software de soporte. Mantener estos conceptos en mente en todo momento le ayudará a hacer aplicaciones cliente/servidor flexibles y escalables. El siguiente mes, cubriré seis pasos más y cerraré con un formulario de ejemplo que puede accesar una base de datos VFP tan bien como una base de datos SQL Server. Luego, Usted seguirá por su cuenta. Nos vemos el mes siguiente, y hasta entonces, comience a envolver. Use claves primarias sustitutas para todos las tablas. Incluso antes de que VFP 3.0 nos diera la capacidad de agregar claves primarias a nuestros claves, el uso de un solo campo, o grupo de campos, para identificar de manera única una fila de la tabla ha sido sugerida por 13

14 muchos como una práctica sana. En aplicaciones con servidor de archivos, no obstante, en muchas situaciones en realidad no había necesidad de hacer esto; era solamente una buena idea. Sin embargo, con vistas, las reglas cambian. Para utilizar vistas (views) actualizables, debe existir un clave primaria en la tabla en la cual se basa la vista (generalmente no actualizo los datos de una vista multitabla). La razón es que debido a que la vista crea un resultado local establecido cuando se abre (USE <NombreVista>), usted necesita algún mecanismo para poder encontrar el registro subyacente en el servidor que está tratando de actualizar. Esto no siempre era necesario en un modelo de servidor de archivos, donde un registro compartido puede ser directamente editado. Para que las actualizaciones funcionen, las vistas requieren que usted establezca la propiedad KeyField en tiempo de diseño en el Diseñador de Vistas (View Designer) o con DBSETPROP("Viewname.KeyField1", "Field", "KeyField",.T.) o establezca la propiedad KeyFieldList en el cursor abierto en tiempo de ejecución usando CURSORSETPROP("KeyFieldList", <lista delimitada por comas de los campos de la clave primaria>). En cualquier, la vista utilizará los campos de clave (key fields) para encontrar el registro en el servidor en el que usted ha ejecutado SQL Update o SQL Delete. Las claves también serán utilizadas para detectar los conflictos de la actualización, reportar un error si alguien ha borrado el registro que usted está intentando actualizar o ha cambiado el clave. Aparte de ser una necesidad para las vistas actualizables, agregar claves primarias a sus tablas también hace que solicitar un registro en particular sea más simple. Usted descubrirá que en el mundo cliente/servidor necesitará a menudo esa capacidad. El argumento para los claves sustitutas. Si usted tiene campos múltiples que conforman sus claves primarias, sugiero utilizar además una clave substituta generada por el sistema. Al tener este campo, típicamente de tipo entero, le dará el lujo de una identificación única de la fila que le dará gusto tener. Además, para las tablas hijas Usted querrá agregar una campo entero adicional como clave externa (foreign). Usted lo llenaría con la clave primaria sustituta del padre (parent) antes de grabar al hijo (child). Las ventajas de las claves sustitutas incluyen uniones (joins) más rápidas, actualizaciones más rápidas, eliminaciones más rápidas y la recuperación simplificada de los hijos de un padre. La única desventaja está en generarlas. Yo utilizo una tabla de sistema de números consecutivos, contiene una fila por la tabla en la aplicación, pero esto puede causar problemas de conflicto multiusuario si no tiene cuidado. Debido a que estas claves realmente no tienen significado (por eso también se llaman claves abstractas), usted no debe tratar de obtener el siguiente número secuencial del servidor mientras que está a mitad de una transacción. Esto puede crear demasiado conflicto en la tabla del sistema cuando usted necesita las claves primarias para una tabla muy activa. Es mejor conseguir la clave exterior de la transacción y arriesgarse a perderla si una actualización falla. Otra idea puede ser utilizar una de las técnicas para generar una identificación única localmente, eliminando el viaje al servidor y cualquier conflicto multiusuario posible. Igual como cuando nunca he dejado que se vaya ningún contratista de mi casa sin haberme recomendado a un buen reparador de techos, nunca dejo que una conversación con un desarrollador termine sin preguntar por su técnica para la generación de identificaciones únicas. Dos interesantes que he escuchado que usan la generación del lado del cliente son: 1. Utilice un GUID. Son de 26 caracteres de largo, (supuestamente) únicas en todo el mundo y rápidas para generarse. No son hermosas, pero valen la pena. 2. Consiga una identificación única de una tabla del sistema del lado del servidor al iniciar la aplicación y después utilice una propiedad local de la aplicación como un contador. Concatene los dos para generar una cadena alfanumérica única. Aunque estoy simplificando un poco, creo que esta 14

15 técnica es utilizada en Code Book. Agregue una columna de tiempo a cada tabla. Las aplicaciones cliente servidor utilizan casi exclusivamente un bloqueo optimista (optimistic locking). Debido a eso, la verificación de conflictos multiusuario se convierte en más que un desafío de implementar. Debe recordarse continuamente mientras codifica: "quizás no tengo la última versión de estos registros". Aunque la clave primaria se utiliza para detectar conflictos de actualización, su capacidad se limita a detectar si otro usuario ha suprimido el registro que usted está intentando actualizar o si ha cambiado la clave. La clave primaria no le ayudará a determinar si otro usuario a hecho los cambios a los campos que no son parte de la clave antes de hacer efectivos sus cambios. Típicamente, las aplicaciones cliente/servidor utilizan una cierta forma de columna con una marca de tiempo (timestamp), una que se modifica como parte de cada actualización, para indicar la última versión de un registro. (Digo "una cierta forma de marca de tiempo" porque el tipo de dato puede ser casi cualquier cosa). Esta columna entonces es revisada en el servidor durante cada actualización para determinar si está en conflicto con la versión local de la estación de trabajo. Por ejemplo, una vista de VFP pudo generar el siguiente estatuto SQL después de actualizar la vista del cliente: Replace state With 'NY' For city = 'New York' In vcustomers TableUpdate(.T.,.F., "vcustomers"): * This is what is auto generated by the view * and passed to the server. * There would be one of these per updated record. Update customers Set state = 'NY' ; Where cust_pkey =?vcustomers.cust_pkey and ; timestamp =?vcustomers.timestamp Si este estatuto de actualización SQL falla con un error de conflicto de actualización (Update Conflict), usted puede reportar a su usuario que alguien modificó este registro mientras lo editaba. Lo que haga después depende de que tan amable sea. En última instancia, o debe hacer una solicitud (query) de nuevo o puede intentar enviar un TableUpdate otra vez con el parámetro Force activado (que no se recomienda a menos que proporcione al usuario una comparación campo por campo de los cambios). La propiedad de la vista, WhereType, es responsable de la verificación de conflictos multiusuarios. Usted tiene cuatro opciones para determinar qué campos son comparados cuando se genera la porción de la verificación de conflictos del estatuto SQL. Key and Modified Fields (clave y campos modificados) y Key and Updatable Fields (clave y campos actualizables) suenan como funciones poderosas, pero siento que en la mayoría de los casos estas opciones son demasiado peligrosas como para implementarse. (No me gustaría que el usuario 1 y el usuario 2 actualizaran dos columnas diferentes del mismo registro sin que cada uno conociera primero los cambios del otro). Esto nos deja Key Fields Only (campos de clave) y Key and Timestamp (clave y marca de tiempo). Key and Timestamp solamente es soportada si su base de datos soporta una columna de tipo marca de tiempo 15

16 (timestamp). Esta columna es modificada automáticamente por el servidor en cada actualización. La aplicación cliente no mantiene este campo, la vista solamente incluirá la columna en la verificación de conflictos. El SQL Server tiene soporte para una columna de marca de tiempo. De hecho, el asistente SQL Server Upsizing Wizard tiene una opción para crear una columna de marca de tiempo para cada tabla. La columna no es realmente de tipo de dato datetime, sino más bien una cadena única generada por el sistema. La belleza de ella es que el servidor la maneja automáticamente y que es mucho más exacta que el tipo de dato datetime (nunca tendrá que preocuparse por dos usuarios actualizando a la misma hora exacta). Algunos comportamientos de los que hay que estar enterados al usar la columna de marca de tiempo del SQL Server: Si usted vuelve a hacer la petición (query) después grabar, la columna de marca de tiempo en el cursor de su vista local estará actualizada con el valor actual en el servidor. Así, los intentos subsecuentes de grabar el mismo registro fallarán con un error de conflicto de actualización (Update Conflict) cuando se comparen las dos marcas de tiempo. Soluciones para las limitaciones del asistente Upsizing Wizard: El asistente de SQL Server Upsizing Wizard tiene muchos problemas que lo hacen, en mi opinión, casi inutilizable. La mayoría de la gente que conozco ha tenido que escribir sus propias herramientas para resolver las limitaciones. Una virtud que lo salva es que el código fuente de todos los asistentes y generadores ahora viene con la versión 6.0 de VFP. No es realmente tan difícil modificar el código para superar sus limitaciones. El código fuente está situado en \<localización de VFP 6.0>\Tools\Xsource\Xsource.zip. Así que la clave y la marca de tiempo suenan excelentes para el SQL Server, pero qué hay sobre los otros sistemas de soporte (back ends) que no soportan una columna de marca de tiempo? Y cómo puede mi prototipo con vistas locales de una base de datos de VFP funcionar con el mismo conjunto del código? Mi solución es agregar mi propia columna de marca de tiempo y mantenerla del lado desde el cliente o desde un disparador de actualización del lado del servidor. Entonces convierte el campo en un KeyField (campo de clave) (véase el paso 7) y utiliza Key Fields Only WhereType. Así que su KeyFieldList podría ser cust_pkey y timestamp. (Note que los campos en la propiedad de KeyField o KeyFieldList de una vista no tienen que ser claves primarias o candidatas). Usted puede utilizar una columna de tipo datetime para este propósito. Sin embargo, la columna datetime de VFP tiene precisión de un segundo solamente, así que es posible que dos usuarios puedan actualizar el mismo registro dentro del mismo segundo. Si usted siente que esto es un problema potencial para su aplicación, utilice otra técnica para generar un número o cadena única. Yo utilizaba esta solución hasta que empecé a usar SQL Server e incluí su columna de marca de tiempo. (Dado que usted no tiene ningún control sobre este nombre de campo, puede llamar su columna de marca de tiempo en VFP algo diferente para que no haya conflicto cuando cambie a SQL Server). Entonces puede simplemente cambiar el WhereType a Key and Timestamp (clave y marca de tiempo) y ya está listo. Vida sin fechas. Era un poco inquietante, bueno, quizá era más como una sacudida repentina, descubrir que el SQL Server, como la mayoría de las bases de datos del grandes, no soporta un tipo de dato para fechas (date). Debe utilizar un campo de tipo datetime. Si usted está convirtiendo una aplicación existente de VFP, que utiliza campos de fecha (date), los problemas podrían ser muy extensos. Realmente depende de cómo utiliza las fechas su aplicación y de cuánto le importa ver 12:00:00 al final de sus campos de la fecha. He resumido los problemas a los que me he enfrentado así como sus posibles soluciones. 16

17 Los controles limitan hasta los campos de la fecha. En los casos donde es simplemente inapropiado mostrar la porción de la hora de un campo del datetime, obviamente usted tiene que realizar alguna clase de truco para perder la hora predeterminada de 12:00:00 AM. Tiene varias opciones. Usted podría utilizar DBSetProp para cambiar el datatype de la definición de la vista de datetime a date. (Como se mencionaba en la parte 1, teniendo un DBC local de vistas elimina cualquier problema de conflicto multiusuarios). Create SQL View vorder Remote Connection ; Remote1 As Select * from orders DBSetProp("vOrders.orderdate", ; "Field", "DataType", "D(8)") Use vorders Hacerlo así truncará no sólo la porción del tiempo, sino que también le proporciona un campo de tipo fecha (date) de VFP en su vista, permitiendo a su código específico de fechas funcionar sin cambiarlo. Y afortunadamente, cuando usted ejecuta una TableUpdate en una vista con un campo del tipo fecha en él, se le anexa una hora predeterminada de 12:00:00:00 AM automáticamente en el SQL Server... sin error. Si usted tiene controles que no estén enlazados a una vista sino a un cursor de solo lectura SQL Pass through (SPT), puede utilizar la función de conversión de tipos de datos del software de soporte (back end) para hacer el truncamiento. Aquí está un estatuto SQL que se podría pasarse al SQL Server que haría exactamente eso: SELECT orderid, ; customerid, ; CONVERT(char(10), orderdate, 101) as orderdate ; from orders Observe que 101 refiere al argumento opcional de estilo de la función del CONVERT. 1 indica formato americano, mm/dd/yy. Luego le suma 100 si desea el siglo incluido. Para hacer que la función CONVERT funcione para datos locales también, usted puede crear un procedimiento almacenado (stored procedure) llamado "Convert" en la base de datos de vistas. Haga que acepte los tres argumentos de la función de CONVERT del SQL Server y, si se le pasa un datetime, que regrese SubStr(TToC(pDateTimeField), 1, 10). Usted también necesitará escribir un procedimiento almacenado Char para manejar el tipo de dato de la función del SQL Server, char(10). Los campos datetime no pueden estar "vacíos". Como si perder los campos de fecha no fuera ya bastante malo, usted también debe enfrentarse con el hecho de que los campos datetime no pueden estar vacíos en la mayoría de las bases de datos. (Hay un mundo completo de funcionalidad limitada más allá de FoxPro, verdad?) Las columnas datetime deben ser llenadas por una fecha y hora válidas o ser nulas (Null). Si usted permite que sus campos datetime acepten Null, solucionará rápidamente el problema de la interfase de usuario pero probablemente generará otros. Podría experimentar resultados inesperados al introducir ciegamente Nulls. (Por ejemplo, la comparación de dos fechas donde una es nula devuelve Null, Empty (FechaNula) devuelve.f., etcétera). Pero si usted está preparado para enfrentar estos problemas, Null realmente es práctico al presentar datos a los usuarios gracias al comando de ambiente Set NullDisplay to de VFP y a la propiedad NullDisplay de los controles como la caja de texto (text box). 17

18 Si usted no desea utilizar Nulls, VFP y el SQL Server son en realidad buenos con usted. El enviar una fecha vacía al servidor del SQL no causa ningún error. Sin embargo, el SQL Server creará un datetime predeterminado de 01/01/ :00:000 AM. Ahora, cuando usted solicita esos datos, usted verá 01/01/1900 en el cursor local, suponiendo que usted ha utilizado alguna de las técnicas discutidas anteriormente para truncar la hora. No creo que sea algo tan horrible como para que un usuario no deba verlo, pero si usted ha elegido establecer Set Century Off, 01/01/00 parecerá como el 1 de enero del (Como si los problemas con el año 2000 no fueran suficientes, al cambiar a SQL Server se crearán problemas del año 1900!) He creado tres posibles soluciones. La primera es agregar un valor predeterminado a todos los campos datetime, uno que ponga en claro que esta es una fecha falsa, como 01/01/9999. (Observe que el tipo de dato datetime tiene un rango de fecha del 1 de enero de 1753 al 31 de diciembre del 9999). Una vez más usted necesitaría establecer Set Century On para distinguirlo del Una opción similar es agregar un valor predeterminado de la columna a todos los campos datetime que sigan alguna regla de negocios. Por ejemplo, todas las fechas de envío (Ship Date) pueden estar predeterminadamente a ocho semanas después de la fecha de la orden (Order Date), que es un campo requerido. La tercera opción implica más malabarismos. No sería fantástico si hubiera alguna manera de borrar cada fecha igual a {01/01/1900} en el cursor de la vista abierta, no enviar ninguna actualización al servidor y no dejar ningún cambio pendiente? Bien, puede hacerse y es algo como esto: Procedure OpenView LParameters pcview * Retrieve data form server Use (pcview) in 0 * Prevent update statements from going to server CursorSetProp('SendUpdates',.F., pcview) * Strip 01/01/1900 out of this cursor RemoveDefaultDates(pcView) * Remove pending changes/clear the change buffer TableUpdate(.T.,.T., pcview) * Restore update capability to view CursorSetProp('SendUpdates',.T., pcview) Por brevedad, no proporcionaré el código para la función RemoveDefaultDates. Pero todo lo que lo hace es un ciclo por todas las columnas con campos del tipo fecha (date) y los substituye por {} si son iguales a {01/01/1900}. Ahora todas las pantallas de entrada de datos se verán y funcionarán como lo hacían cuando el software de soporte (back end) era solo VFP. Bien, esto funciona para las vistas, pero qué hay sobre los cursores del SPT? Solo necesita ejecutar la función RemoveDefaultDates sobre cualquier cursor que será presentado eventualmente al usuario. 18

19 Diferencias entre los cursores SPT remotos y cursores SPT locales: Los cursores del SQL Passthrough son de solo lectura cuando están creados de fuentes de datos de un servidor de archivos, pero de son de lectura/escritura cuando están creados de una fuente de datos cliente/servidor. Así pues, si usted está haciendo prototipos localmente, por supuesto necesitará cambiar el cursor a lectura/escritura antes de modificarlo. Matemáticas de fecha. Usted necesita estar atento de cualquier matemática de fechas que pudiera tener en su aplicación. Dado que tiene campos datetime en el servidor (y puede tenerlos en un cursor local también) donde tenía originalmente campos date, pueden ocurrir errores en los cálculos. Por ejemplo:?date() + 20 && 03/08/ = 03/28/99?Datetime() + 20 && 03/08/99 10:35:15 PM + 20 = ; && 03/08/99 10:35:35 PM! * against SQL Server: * ExpectedDate is 14 DAYS after order date Select orderdate, ; Orderdate + 14 as ExpectedDate ; From Orders * against VFP: * ExpectedDate is 14 SECONDS after order date Select orderdate, ; Orderdate + 14 as ExpectedDate ; From Orders Puede ver que el agregar un número a un campo datetime puede tener resultados diferentes basados en el software de soporte (back end). Es difícil decir si se agregarán segundos o días. Una solución podría ser convertir el número incremental en una función. De ese modo, Usted tiene lo necesario para determinar cual es el software de soporte y proporcionar los cálculos apropiados. Evitar esa sensación de Empty() con los Nulls. Si usted es como yo, quizás usted ha aprovechado la flexibilidad que proporciona la función Empty() de VFP. Empty(eExpression) funciona para cualquier tipo de datos, excepto los objetos. Puede detectar cero, una cadena vacía, una fecha vacía o falso lógico con esta una función sin ni siquiera verificar el tipo de dato. Mala movida. 19

20 Los problemas pueden ocurrir porque después de cambiar a SQL Server, puede ser que encuentre algunos valores inesperados de funciones y de solicitudes (queries). Puede ser que incluso estén en un tipo de datos diferente al que usted esperaba. Cuando estos valores se evalúan con Empty(), o cualquier función en este caso, podría causar problemas importantes. Por ejemplo:?empty({}) && true?empty({01/01/1900}) && false?empty(null) && false Usted ha visto el problema con {01/01/1900} en el paso 9, la vida sin fechas, así que sabe lo que puede ocurrir. Borrarlos localmente parecen ser la solución más fácil. Pero qué hay sobre el problema de Null? La mayoría sabe que nulo no es vacío, pero sabía que incluso si usted no tiene ninguna columna en su base de datos que acepte Null, puede ser obtenga valores Null del servidor? Intente esto en el SQL Server: Function GetMaxOrderQty lcsql = "SELECT MAX(Quantity) AS nmaxqty" +; " FROM [Order Details] " +; " WHERE ProductID = 99 " SQLExec(lcSQL, "cbigorder") If Reccount("cBigOrder") > 0 lnretval = 0 Else lnretval = cbigorder.nmaxqty Endif Return lnretval Cuál es el tipo de dato del valor de retorno? Depende. Si se encontraron registros para ProductdID = 99, la respuesta es numérica. Si no hay registros encontrados para ProductdID = 99, la respuesta es Null, a pesar de que la columna de cantidad (Quantity) no soporta valores Null. La razón es que en solicitudes SPT para el SQL Server, usted no obtendrá un cursor resultante sin registros para solicitudes de agregación como esta. Usted obtendrá un registro sin importar si se encontraron coincidencias, a menos que usted tenga una cláusula Group By una columna que no sea de agregación. Y en las columnas de agregación tendrán un valor Null. Eso podría causarle problemas en muchos lugares si no tiene cuidado de evitarlo. En el ejemplo precedente, lnretval sería nulo porque no hay ningún ProductID = 99. Para evitar obtener valores nulos, usted tiene varias opciones. Por supuesto, encontrar todas las funciones de agregación en su código y hacer un IsNull() el chequeo es una manera. Podría también escribir una envoltura (wrapper) para Empty, quizás IsEmpty, que detecte Null y 01/01/1900 también. Esto se puede utilizar para verificar los 20

TUTORIAL CONEXIÓN SQL SERVER 2005 CON VISUAL STUDIO 2005(TECNOLOGIA RAD)

TUTORIAL CONEXIÓN SQL SERVER 2005 CON VISUAL STUDIO 2005(TECNOLOGIA RAD) TUTORIAL CONEXIÓN SQL SERVER 2005 CON VISUAL STUDIO 2005(TECNOLOGIA RAD) Resumen:En este tutorial, aprenderá a sacar el máximo partido a las capacidades de diseño integradas en Visual Studio 2005 para

Más detalles

Manual del programador, Parte 6: Crear soluciones cliente-servidor

Manual del programador, Parte 6: Crear soluciones cliente-servidor Manual del programador, Parte 6: Crear soluciones cliente-servidor Página 1 de 80 Manual del programador, Parte 6: Crear soluciones cliente-servidor Las aplicaciones cliente-servidor combinan la funcionalidad

Más detalles

Cómo abrir la base de datos de Aspel-SAE 5.0?

Cómo abrir la base de datos de Aspel-SAE 5.0? Cómo abrir la base de datos de Aspel-SAE 5.0? 1 Herramientas de administración nativas de Firebird. Firebird cuenta con una herramienta llamada ISQL la cual es una consola de línea de comandos desde la

Más detalles

AcuSQL Pre-compilador de SQL Embebido

AcuSQL Pre-compilador de SQL Embebido AcuSQL Pre-compilador de SQL Embebido RESUMEN EJECUTIVO AcuSQL es una sencilla y rentable solución para aquellos que utilizan sentencias SQL embebidas en sus programas COBOL para acceder fuentes de datos

Más detalles

3 Consultas y subconsultas

3 Consultas y subconsultas 3 Consultas y subconsultas En SQL, la sentencia SELECT permite escribir una consulta o requerimiento de acceso a datos almacenados en una base de datos relacional. Dichas consultas SQL van desde una operación

Más detalles

Cómo abrir las bases de datos en Aspel-COI 6.0?

Cómo abrir las bases de datos en Aspel-COI 6.0? Cómo abrir las bases de datos en Aspel-COI 6.0? 1. Herramientas de administración nativas de Firebird. Firebird cuenta con una herramienta llamada ISQL la cual es una consola de línea de comandos desde

Más detalles

CURSO DE PROGRAMACIÓN PHP MySQL

CURSO DE PROGRAMACIÓN PHP MySQL CURSO DE PROGRAMACIÓN PHP MySQL MASTER EN PHP MÓDULO NIVEL BASICO PRIMER MES Aprende a crear Sitios Web Dinámicos con PHP y MySQL 1. Introducción Qué es PHP? Historia Por qué PHP? Temas de instalación

Más detalles

Cómo abrir las bases de datos de Aspel-NOI 5.0?

Cómo abrir las bases de datos de Aspel-NOI 5.0? Cómo abrir las bases de datos de Aspel-NOI 5.0? 1. Herramientas de administración nativas de Firebird. Firebird cuenta con una herramienta llamada ISQL la cual es una consola de línea de comandos desde

Más detalles

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus Iniciando con Oracle Índice de contenido Ingresando a Oracle...1 Cambiando Su Contraseña...1 Ingresando un Comando SQL en SQL*Plus...2 Saliendo de SQL*Plus...2 Consiguiendo Ayuda...2 Creación de una Tabla...3

Más detalles

Enlaces relacionados: http://otn.oracle.com/tech/pl_sql/index.html

Enlaces relacionados: http://otn.oracle.com/tech/pl_sql/index.html 1.INTRODUCCION PL/SQL (Procedural Language ó Programming Language, según distintas fuentes, aunque la oficial es la primera) es el lenguaje utilizado por Oracle como extensión al SQL, y que nos va a permitir

Más detalles

SENTENCIAS Y CONSULTAS EN SQL SERVER

SENTENCIAS Y CONSULTAS EN SQL SERVER SENTENCIAS Y CONSULTAS EN SQL SERVER En esta sección nos preocuparemos por conocer, las consultas en SQL que describiremos aquí. Para eso haremos un pequeño de las palabras claves que se utilizan en SQL,

Más detalles

6 El catálogo del sistema

6 El catálogo del sistema 6 El catálogo del sistema Un sistema de gestión de base de datos debe llevar la cuenta de gran cantidad de información referente a la estructura de una base de datos con el fin de efectuar sus funciones

Más detalles

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle: PL/SQL (Procedural Language/Structured Query Language) PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones y elementos propios de los

Más detalles

Línea de Productos Acu4GL

Línea de Productos Acu4GL Línea de Productos Acu4GL D A T O S D E T E C N O L O G Í A V E R S I Ó N 6 La línea de productos Acu4GL provee a los usuarios de aplicaciones ACUCOBOL-GT acceso al almacenamiento de información en los

Más detalles

Bases de datos. 1. Introducción

Bases de datos. 1. Introducción Bases de datos 1. Introducción Habitualmente, los programas trabajan con información que está en un fichero. Por ejemplo, nuestro simulador de tráfico aéreo trabaja con una lista de planes de vuelo que

Más detalles

Planos de ejecución en Velneo V7

Planos de ejecución en Velneo V7 Planos de ejecución en Velneo V7 Por Jesús Arboleya Introducción 3 Arquitectura Cliente/Servidor 4 1. Objetos que siempre se ejecutan en el servidor 5 2. Objetos que siempre se ejecutan en el cliente 6

Más detalles

APLICACIÓN COMPRAS EN SQLSERVER 2000

APLICACIÓN COMPRAS EN SQLSERVER 2000 APLICACIÓN COMPRAS EN SQLSERVER 2000 (Libro de apoyo: Iniciación a las bases de datos con Access 2002. Eduardo Mora, Marta Zorrilla, Joaquín Díaz de Entresotos. Díaz de Santos, 2003) A continuación se

Más detalles

8283: Administración y programación en Microsoft SQL Server 2012

8283: Administración y programación en Microsoft SQL Server 2012 8283: Administración y programación en Microsoft SQL Server 2012 Este curso es orientado a los profesionales en desarrollo que desean maximizar la participación de SQL Server 2012 en beneficio del desempeño

Más detalles

VISIÓN GENERAL HERRAMIENTAS COMERCIALES

VISIÓN GENERAL HERRAMIENTAS COMERCIALES VISIÓN GENERAL El servidor de MS SQL se ha convertido en un estándar en muchas partes de la América corporativa. Puede manejar volúmenes de datos grandes y se integra bien con otros productos de Microsoft.

Más detalles

1.264 Tema 8. SQL (cont.) ODBC

1.264 Tema 8. SQL (cont.) ODBC 1.264 Tema 8 SQL (cont.) ODBC Subconsultas Las subconsultas de SQL nos permiten utilizar los resultados de una consulta como parte de otra. Subconsultas: A menudo, constituyen un modo natural de escribir

Más detalles

Bases de datos: Sistemas de bases de datos:

Bases de datos: Sistemas de bases de datos: Bases de datos: Sistemas de bases de datos: Un sistema de bases de datos es básicamente un sistema para archivar en computador, es decir, es un sistema computarizado cuyo propósito general es mantener

Más detalles

SQL básico. SQL básico http://idesweb.es/ 1. Contenido

SQL básico. SQL básico http://idesweb.es/ 1. Contenido SQL básico http://idesweb.es/ 1 SQL básico El presente documento no tiene más aspiraciones que servir de recordatorio mínimo para las órdenes más básicas y en su mínima expresión. No es un manual de SQL

Más detalles

Índice. iii. Objetivos... 24

Índice. iii. Objetivos... 24 Índice Objetivos... 2 1: Modelación de base de datos... 2 2: Ejemplo de un caso de negocios... 3 2.1: Requerimientos de la aplicación... 4 2.2: Características de flujo de información... 4 2.3: Diagrama

Más detalles

Sub consultas avanzadas

Sub consultas avanzadas Sub consultas avanzadas Objetivo Después de completar este capítulo conocerá lo siguiente: Escribir una consulta de múltiples columnas Describir y explicar el comportamiento de las sub consultas cuando

Más detalles

BASES DE DATOS I. Manual de Informix. Informix Personal Edition 7.22 1

BASES DE DATOS I. Manual de Informix. Informix Personal Edition 7.22 1 Informix Personal Edition 7.22 1 El objetivo de este documento consiste en ofrecer una visión general de las herramientas y funcionalidades que incorpora el software Informix Personal 7.22, una vez hayáis

Más detalles

Entrarás a formar parte de nuestra bolsa de empleo a la que acuden las empresas en busca de nuestros alumnos.

Entrarás a formar parte de nuestra bolsa de empleo a la que acuden las empresas en busca de nuestros alumnos. CURSO PROFESIONAL DE TRANSACT-SQL MÁSTER EN DESARROLLO DE APLICACIONES WEB CON JAVA ENTERPRISE EDITION Precio: 450 Euros y Matrícula Gratis. Modalidad: Presencial en nuestras aulas. Valores añadidos: Nuestro

Más detalles

Manual De Instalación. Pasos para la Instalación de Informix

Manual De Instalación. Pasos para la Instalación de Informix Informix es uno de los cuatro grandes manejadores de bases de datos junto con DB2 de IBM, SQL Server de Microsoft y Oracle. Aunque en muchos aspectos es mejor que Oracle, no se ha sabido mover en el terreno

Más detalles

Uso de las herramientas de consulta de Transact-SQL

Uso de las herramientas de consulta de Transact-SQL Uso de las herramientas de consulta de Transact-SQL Contenido Introducción 1 Analizador de consultas SQL 2 Uso de la herramienta Examinador de objetos en el Analizador de consultas SQL 3 Uso de plantillas

Más detalles

Tema: Procedimientos almacenados y cursores. Facultad : Ingeniería Escuela : Computación Asignatura: SQL SERVER. GUÍA 2 Pág. 1

Tema: Procedimientos almacenados y cursores. Facultad : Ingeniería Escuela : Computación Asignatura: SQL SERVER. GUÍA 2 Pág. 1 Tema: Procedimientos almacenados y cursores. Facultad : Ingeniería Escuela : Computación Asignatura: SQL SERVER GUÍA 2 Pág. 1 I. OBJETIVOS Utilizar procedimientos almacenados Conocer el uso de los cursores

Más detalles

serra Access y SQL Server Qué es mejor en cada caso? Valentín Playá, Serra GTS 22 de enero de 2009 Bases de datos 1

serra Access y SQL Server Qué es mejor en cada caso? Valentín Playá, Serra GTS 22 de enero de 2009 Bases de datos 1 Access y SQL Server Qué es mejor en cada caso? Valentín Playá, Serra GTS 22 de enero de 2009 Bases de datos 1 Bases de datos en una organización Distintas necesidades según el tipo de solución Ninguna

Más detalles

INDICE Primera Parte. Panorámica general de SQL 2. Rápido repaso de SQL 3. SQL en Perspectiva

INDICE Primera Parte. Panorámica general de SQL 2. Rápido repaso de SQL 3. SQL en Perspectiva INDICE Prólogo XXIII Por qué este libro es para usted XXVII Primera Parte. Panorámica general de SQL 1 1. Introducción 3 El lenguaje SQL 3 El papel de SQL 6 Características y beneficios de SQL 7 Independencia

Más detalles

Manual del programador, Parte 2: Trabajar con datos

Manual del programador, Parte 2: Trabajar con datos Manual del programador, Parte 2: Trabajar con datos Página 1 de 133 Manual del programador, Parte 2: Trabajar con datos Para crear aplicaciones efectivas, debe comprender sus requisitos de datos y después

Más detalles

Clase 1: Estructuras, Procesos y Diccionario de Datos

Clase 1: Estructuras, Procesos y Diccionario de Datos Clase 1: Estructuras, Procesos y Diccionario de Datos Estructura de la memoria System Global Area Buffer Cache Redo Log Buffer Share Pool Dictionary Cache Large Pool Process Global Area Private SQL Area

Más detalles

myappgen Usted Construye la aplicación mientras la ejecuta http://www.myappgen.com info@myappgen.com

myappgen Usted Construye la aplicación mientras la ejecuta http://www.myappgen.com info@myappgen.com myappgen Usted Construye la aplicación mientras la ejecuta http://www.myappgen.com info@myappgen.com Tutorial 1 Conexión con la Base de Datos Establecer la conexión con la base de datos no suele ser muy

Más detalles

MS_20461 Querying Microsoft SQL Server

MS_20461 Querying Microsoft SQL Server Gold Learning Gold Business Intelligence Silver Data Plataform www.ked.com.mx Por favor no imprimas este documento si no es necesario. Introducción. Este curso proporciona a los estudiantes las habilidades

Más detalles

Laboratorio de Sistemas Departamento de Ingeniería en Sistemas de Información Universidad Tecnológica Nacional Facultad Regional Córdoba. Porque PHP?

Laboratorio de Sistemas Departamento de Ingeniería en Sistemas de Información Universidad Tecnológica Nacional Facultad Regional Córdoba. Porque PHP? Porque PHP? PHP es un lenguaje de programación usado generalmente para la creación de contenido para sitios web. PHP es el (acrónimo recursivo de "PHP: Hypertext Preprocessor", inicialmente PHP Tools,

Más detalles

Acu4GL Interfaces COBOL - RDBMS

Acu4GL Interfaces COBOL - RDBMS Acu4GL Interfaces COBOL - RDBMS RESUMEN EJECUTIVO Acu4GL es una tecnología de interfaces, patentada, diseñada como puente entre los mundos de la tercera generación COBOL y la cuarta generación SQL. Hay

Más detalles

Unidad II. Entorno de Desarrollo de Visual FoxPro

Unidad II. Entorno de Desarrollo de Visual FoxPro Unidad II. Entorno de Desarrollo de Entorno de es uno de los gestores de Bases de Datos relacionales más rápido y flexible del mercado, dispone de un complejo entorno de desarrollo totalmente orientado

Más detalles

Comencemos a programar con. Entrega 10. Estructuras de Control II

Comencemos a programar con. Entrega 10. Estructuras de Control II Comencemos a programar con VBA - Access Entrega 10 Estructuras de Control II Eduardo Olaz 10-2 Estructuras de Control, segunda parte Las Instrucciones While - - - Wend La estructura de bucle For Contador

Más detalles

Los paquetes tienen dos partes: una especificación y un cuerpo que están almacenados por separado en la base de datos.

Los paquetes tienen dos partes: una especificación y un cuerpo que están almacenados por separado en la base de datos. 8. PAQUETES DE BASE DE DATOS Los paquetes nos van a permitir agrupar conceptos PL/SQL como pueden ser tipos, procedimientos y funciones. Por ejemplo: una paquete de Contabilidad podrá contener procedimientos

Más detalles

Cifrado de datos transparente (TDE)

Cifrado de datos transparente (TDE) Cifrado de datos transparente (TDE) Dirigido a: Administradores de Bases de Datos Área: Bases de Datos Autor: Pablo F. Dueñas Servicios Profesionales Danysoft Introducción Una de las principales preocupaciones

Más detalles

MANUAL DE AYUDA INFORMATIVAS MAC/OSX

MANUAL DE AYUDA INFORMATIVAS MAC/OSX MANUAL DE AYUDA INFORMATIVAS MAC/OSX Agencia Tributaria Centro de Atención Telefónica Departamento de INFORMÁTICA TRIBUTARIA ÍNDICE PLATAFORMA DE INFORMATIVAS INTRODUCCIÓN... 4 Requisitos mínimos... 4

Más detalles

Ministerio de Educación. Base de datos en la Enseñanza. Open Office. Módulo 3: Controles de formulario

Ministerio de Educación. Base de datos en la Enseñanza. Open Office. Módulo 3: Controles de formulario Ministerio de Educación Base de datos en la Enseñanza. Open Office Módulo 3: Controles de formulario Instituto de Tecnologías Educativas 2011 Controles de formulario El control más habitual de un formulario

Más detalles

ÍNDICE INTRODUCCIÓN...13

ÍNDICE INTRODUCCIÓN...13 ÍNDICE INTRODUCCIÓN...13 CAPÍTULO 1. EL MODELO RELACIONAL. LENGUAJE SQL...17 1.1 INTRODUCCIÓN AL MODELO RELACIONAL...17 1.2 RELACIONES...19 1.2.1 Definición formal de relación...21 1.2.2 Propiedades y

Más detalles

DICCIONARIO DE DATOS

DICCIONARIO DE DATOS DICCIONARIO DE DATOS Diccionario de datos El diccionario de datos es la fuente de información centralizada de todo el sistema SAP, allí se encuentra (y almacena) todos los datos que se procesan en el sistema;

Más detalles

" ##$ % & '( % & )*+),$ -##$ -!- $! "-./ - 0WebClass1-2

 ##$ % & '( % & )*+),$ -##$ -!- $! -./ - 0WebClass1-2 ! " ##$ % & '( % & )*+),$ -##$ -!- $! "-./ - 0WebClass1-2!" # 345 637 6$5!!!89 & 5 :8-7 & & ;(< 8 $ + - 8 : #= ' 7= : 0 & 0 &- =.> = ;(("9 &? WebClass - 1@#$% &'A1 ;(< 8- ( ) * *+ " $ % B9 5 5 # :!- WebClass

Más detalles

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS LABORATORIO DE BASES DE DATOS 1

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS LABORATORIO DE BASES DE DATOS 1 UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEM LABORATORIO DE BES DE DATOS 1 Prof. Marco Aedo Práctica de Laboratorio Nº 6 I. OBJETIVOS

Más detalles

VBA Excel 2013 Programación en Excel: Macros y Lenguaje VBA

VBA Excel 2013 Programación en Excel: Macros y Lenguaje VBA Ediciones ENI VBA Excel 2013 Programación en Excel: Macros y Lenguaje VBA Colección Recursos Informáticos Contenido Contenido 1 Podrá descargar algunos elementos de este libro en la página web de Ediciones

Más detalles

INTRODUCCIÓN AL SQL. TRANSACT-SQL SQL SERVER 2005. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

INTRODUCCIÓN AL SQL. TRANSACT-SQL SQL SERVER 2005. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE INTRODUCCIÓN AL SQL. TRANSACT-SQL SQL SERVER 2005 Manual de Referencia para usuarios Salomón Ccance CCANCE WEBSITE INTRODUCCIÓN AL SQL. TRANSACT SQL CONCEPTOS BÁSICO DE SQL SQL (Structured Query Language),

Más detalles

Práctica 5.1. Proyectos Access y SQL Server

Práctica 5.1. Proyectos Access y SQL Server Práctica 5.1. Proyectos Access y SQL Server 5.1.1. Introducción Desde la aparición de Microsoft Access 2000 es posible crear proyectos de Access. Los proyectos de Access ofrecen a los usuarios y programadores

Más detalles

CURSO DE SQL SERVER 2005

CURSO DE SQL SERVER 2005 CURSO DE SQL SERVER 2005 Una vez finalizado el curso, el alumno estará preparado para: Instalar y configurar SQL Server 2005. Comprender los conceptos más importantes del diseño de bases de datos. Crear

Más detalles

%& %)& '$!%*+ $, %%%&$ %%

%& %)& '$!%*+ $, %%%&$ %% OBJETIVO!!"#$$ %& '(%"#% (% %& %)& '$!%*+ $, %%%&$ %% REQUERIMIENTOS SOFTWARE VERSIÓN LINK Java Development Kit (JDK) 6 http://java.sun.com NetBeans 6.1 http://www.netbeans.org MySQL 5.0 http://dev.mysql.com/

Más detalles

FileMaker 11. Guía ODBC y JDBC

FileMaker 11. Guía ODBC y JDBC FileMaker 11 Guía ODBC y JDBC 2004-2010 FileMaker, Inc. Reservados todos los derechos. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker es una marca comercial de FileMaker,

Más detalles

MANUAL DE AYUDA INFORMATIVAS MAC/OSX

MANUAL DE AYUDA INFORMATIVAS MAC/OSX MANUAL DE AYUDA INFORMATIVAS MAC/OSX Agencia Tributaria CENTRO DE ATENCIÓN TELEFÓNICA DEPARTAMENTO DE INFORMÁTICA TRIBUTARIA ÍNDICE PLATAFORMA DE INFORMATIVAS INTRODUCCIÓN... 4 Requisitos mínimos... 4

Más detalles

ÍNDICE. Introducción... Capítulo 1. Novedades de Access 2013... 1

ÍNDICE. Introducción... Capítulo 1. Novedades de Access 2013... 1 Introducción... XIII Capítulo 1. Novedades de Access 2013... 1 Nuevas posibilidades de cifrado, compactación y reparación de archivos... 1 Trabajo en la nube... 2 Compartir la información... 3 Guardar

Más detalles

Introducción... 4 Conceptos básicos... 4 Qué es una base de datos?... 4 Partes de una base de datos... 4. Tablas... 4. Formularios... 5. Informes...

Introducción... 4 Conceptos básicos... 4 Qué es una base de datos?... 4 Partes de una base de datos... 4. Tablas... 4. Formularios... 5. Informes... Contenido Introducción... 4 Conceptos básicos... 4 Qué es una base de datos?... 4 Partes de una base de datos... 4 Tablas... 4 Formularios... 5 Informes... 5 Consultas... 5 Macros... 5 Módulos... 5 Partes

Más detalles

Clientes y agentes de Veritas NetBackup 6.5

Clientes y agentes de Veritas NetBackup 6.5 Clientes y agentes de Veritas NetBackup 6.5 Plataforma Veritas NetBackup: la protección de datos de última generación Visión general Veritas NetBackup ofrece una selección simple y a la vez completa de

Más detalles

TEMA 2. INTRODUCCIÓN A MYSQL

TEMA 2. INTRODUCCIÓN A MYSQL 1 TEMA 2. INTRODUCCIÓN A MYSQL 1. Introducción 2. Características principales de MySQL 3. MySQL y el código abierto 4. Instalación de MySQL 5. Conexión y desconexión al servidor 6. Entrada de comandos

Más detalles

Grupo Kybele, http://www.kybele.es/ Pág. 1

Grupo Kybele, http://www.kybele.es/ Pág. 1 Bases de Datos APUNTES PARA EL MANEJO DE SQL*Plus Para cualquier consulta a la sintaxis de las órdenes SQL o SQL*PLUS puede consultarse cualquier libro de ORACLE, o los manuales gratuitos en pdf o en línea

Más detalles

Guía de Diccionarios de Datos

Guía de Diccionarios de Datos Soluciones abiertas para un mundo cambiante Guía de Diccionarios de Datos www.moose-software.com www.visualdataflex.es Soluciones abiertas para un mundo cambiante Versiones documento Versión Revisado por

Más detalles

Curso de introducción a Oracle Application Express. Disertante: A.S. Ezequiel Portela

Curso de introducción a Oracle Application Express. Disertante: A.S. Ezequiel Portela Curso de introducción a Oracle Disertante: A.S. Contenidos Sobre el Curso... 4 Qué es APEX?... 4 Introducción al Curso... 4 Requisitos... 5 Modalidad... 5 Módulo 1: Fundamentos de Oracle SQL y PLSQL...

Más detalles

CARACTERISTICAS BASICAS DE LOS SMBD ORACLE

CARACTERISTICAS BASICAS DE LOS SMBD ORACLE Qué es una base de datos? Una base de datos es una herramienta para recopilar y organizar información. En las bases de datos, se puede almacenar información sobre personas, productos, pedidos, o cualquier

Más detalles

Plan de mantenimiento. NetSupport DNA. para un funcionamiento óptimo

Plan de mantenimiento. NetSupport DNA. para un funcionamiento óptimo Plan de mantenimiento NetSupport DNA para un funcionamiento óptimo Totemguard.com 1 902 360 645 Índice INTRODUCCION...3 PLAN DE MANTENIMIENTO...4 1. Copia de seguridad (automática)...4 2. Programación

Más detalles

Esta es un área donde se ha provisto una gran cantidad de funcionalidades extras en la versión de 2010 vea el apartado 22.6.

Esta es un área donde se ha provisto una gran cantidad de funcionalidades extras en la versión de 2010 vea el apartado 22.6. Unidad 22: Tablas Dinámicas* material 2010* 22.0 Introducción: Esta unidad podría haberse llamado resumir los datos con rapidez. Excel ofrece una herramienta poderosa para crear resúmenes tabulares de

Más detalles

Manual del programador, Parte 7: Crear archivos de Ayuda

Manual del programador, Parte 7: Crear archivos de Ayuda Manual del programador, Parte 7: Crear archivos de Ayuda Página 1 de 24 Manual del programador, Parte 7: Crear archivos de Ayuda Los archivos de Ayuda son un origen de información valiosa para los usuarios

Más detalles

Tema: PROCEDIMIENTOS ALMACENADOS.

Tema: PROCEDIMIENTOS ALMACENADOS. Base de datos I. Guía 9 1 Facultad: Ingeniería Escuela: Computación Asignatura: Base de datos I Tema: PROCEDIMIENTOS ALMACENADOS. Objetivo Específico Conocer la sintaxis de un procedimiento almacenado

Más detalles

MANUAL BÁSICO DEL LENGUAJE SQL

MANUAL BÁSICO DEL LENGUAJE SQL MANUAL BÁSICO DEL LENGUAJE SQL ESCUELA COLOMBIANA DE INGENIERÍA JULIO GARAVITO LABORATORIO DE INFORMÁTICA BOGOTÁ D. C. 2007-2 TABLA DE CONTENIDO INTRODUCCIÓN... 3 1. COMANDOS... 4 1.1 Comandos DLL... 4

Más detalles

UNIVERSIDAD AUTONOMA DE LOS ANDES UNIANDES LENGUAJE SQL. SQL es un estándar un lenguaje estructurado para consultas

UNIVERSIDAD AUTONOMA DE LOS ANDES UNIANDES LENGUAJE SQL. SQL es un estándar un lenguaje estructurado para consultas LENGUAJE SQL Que es SQL? SQL es un estándar un lenguaje estructurado para consultas SQL te permite acceder y manejar bases de datos SQL es un Estándar (ANSI American National Standards Institute) Que puede

Más detalles

Bases de Datos SEGURIDAD E INTEGRIDAD EN BASES DE DATOS. Ejemplo del Lado del servidor

Bases de Datos SEGURIDAD E INTEGRIDAD EN BASES DE DATOS. Ejemplo del Lado del servidor Bases de Datos SEGURIDAD E INTEGRIDAD EN BASES DE DATOS Ejemplo del Lado del servidor Aplicación de conceptos: Se hizo referencia a los elementos que poseen los Sistemas de Gestión de Bases de Datos (SGBD)

Más detalles

CONSULTAS BASICAS EN SQL SERVER

CONSULTAS BASICAS EN SQL SERVER CONSULTAS BASICAS EN SQL SERVER CONSULTAS DE SELECCION Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta

Más detalles

ORACLE DEVELOPER 10g

ORACLE DEVELOPER 10g Diplomado ORACLE DEVELOPER 10g INTRODUCCION En la era de los sistemas y la información es cada vez más imperioso presentar soluciones ajustadas a requerimientos determinados por los usuarios, con interfaces

Más detalles

Qué es Access? Bases de datos relacionales en Access. Cuando abre Access

Qué es Access? Bases de datos relacionales en Access. Cuando abre Access Qué es Access? Access 2010 es una herramienta de diseño e implementación de aplicaciones de base de datos que se puede usar para realizar un seguimiento de la información importante. Puede conservar los

Más detalles

FileMaker 12. Guía ODBC y JDBC

FileMaker 12. Guía ODBC y JDBC FileMaker 12 Guía ODBC y JDBC 2004-2012 FileMaker, Inc. Reservados todos los derechos. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker y Bento son marcas comerciales de

Más detalles

FileMaker 14. Guía ODBC y JDBC

FileMaker 14. Guía ODBC y JDBC FileMaker 14 Guía ODBC y JDBC 2004-2015 FileMaker, Inc. Reservados todos los derechos. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker y FileMaker Go son marcas comerciales

Más detalles

Ernesto Gamaliel Acosta Gabriela Castillo Granados Antonio de Jesús Pérez Maldonado

Ernesto Gamaliel Acosta Gabriela Castillo Granados Antonio de Jesús Pérez Maldonado Ernesto Gamaliel Acosta Gabriela Castillo Granados Antonio de Jesús Pérez Maldonado QUÉ ES INFORMIX? ES UN GESTOR DE BASE DE DATOS CREADO POR INFORMIX SOFTWARE INC. INCLUYE UN RDBMS (SISTEMA ADMINISTRADOR

Más detalles

Lenguaje de Programación I I. OBJETIVOS II. INTRODUCCION TEORICA

Lenguaje de Programación I I. OBJETIVOS II. INTRODUCCION TEORICA CICLO 03/ 2015 UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS Escuela de Computacion Nombre de la Practica: Lugar de Ejecución: Tiempo Estimado: Materia: GUIA DE LABORATORIO #12 Creación de Reportes

Más detalles

Acceso a bases de datos MySQL con PHP

Acceso a bases de datos MySQL con PHP GESTIÓN Y ADMINISTRACIÓN WEB Acceso a bases de datos MySQL con PHP Ing. CIP Fabián Silva Alvarado fsilvasys@hotmail.com DEFINICIÓN DE BASE DE DATOS Base de Datos es un conjunto de datos relacionados entre

Más detalles

A.1. Definiciones de datos en SQL

A.1. Definiciones de datos en SQL A.1. Definiciones de datos en SQL Las Sentencias del lenguaje de definición de datos (DDL) que posee SQL operan en base a tablas. Las Principales sentencias DDL son las siguientes: CREATE TABLE DROP TABLE

Más detalles

Instalando y Activando Smaart v7

Instalando y Activando Smaart v7 Instalando y Activando Smaart v7 La instalación de Smaart v7 de Rational Acoustics en un proceso de dos partes. La primera es la instalación del software en sí y la segunda es el registro y activación

Más detalles

Bases de Datos / Elementos de Bases de Datos 2011. Que es un Stored Procedure? Stored Procedures: Ventajas

Bases de Datos / Elementos de Bases de Datos 2011. Que es un Stored Procedure? Stored Procedures: Ventajas Bases de Datos / Elementos de Bases de Datos 2011 Stored Procedures, Triggers y Transacciones en MySQL Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur 1 Que es un Stored

Más detalles

Errores comunes en Microsoft Visual FoxPro

Errores comunes en Microsoft Visual FoxPro Errores comunes en Microsoft Visual FoxPro Espartaco Palma Martínez SysOp PortalFox.com esparta@portalfox.com Microsoft Visual Foxpro ha sido a través de los años una herramienta de desarrollo de aplicaciones

Más detalles

SOLUCIÓN CASO CÁLCULO DE GASTOS DE VIAJE

SOLUCIÓN CASO CÁLCULO DE GASTOS DE VIAJE SOLUCIÓN CASO CÁLCULO DE GASTOS DE VIAJE La cumplimentación del parte de dietas requerirá de la introducción de algunos datos como: el nombre del empleado, la fecha de inicio del viaje, la fecha de finalización,

Más detalles

8 SQL SERVER 2008 RA-MA

8 SQL SERVER 2008 RA-MA ÍNDICE Capítulo 1. Características, novedades y entorno de trabajo... 17 1.1 Novedades en SQL Server 2008... 17 1.2 Instalación de Microsoft SQL Server 2008... 19 1.3 Versiones de Microsoft SQL Server

Más detalles

Como manejador de base de datos elegimos utilizar Absolute Database, que es un

Como manejador de base de datos elegimos utilizar Absolute Database, que es un APÉNDICE E Manejador de base de datos ABSOLUTE DATABASE Como manejador de base de datos elegimos utilizar Absolute Database, que es un componente de Delphi para manejar base de datos, muy poderoso y fácil

Más detalles

- length(str) retorna el largo de un string en bytes. Ejemplo: "SELECT LENGTH('ITFreek')", nos devuelve 7.

- length(str) retorna el largo de un string en bytes. Ejemplo: SELECT LENGTH('ITFreek'), nos devuelve 7. 1 Inyecciones SQL V 1.0 Sentencias a necesitar: - database() devuelve el nombre de la base de datos actualmente seleccionada, o NULL si no hay ninguna seleccionada. Ejemplo: "SELECT DATABASE()" en el código

Más detalles

C.F.G.S. DESARROLLO DE APLICACIONES INFORMÁTICAS. MÓDULO: Diseño y realización de servicios de presentación en entornos gráficos.

C.F.G.S. DESARROLLO DE APLICACIONES INFORMÁTICAS. MÓDULO: Diseño y realización de servicios de presentación en entornos gráficos. C.F.G.S. DESARROLLO DE APLICACIONES INFORMÁTICAS MÓDULO: Diseño y realización de servicios de presentación en entornos gráficos Unidad 1 Introducción Visual Basic.NET El objetivo de la unidad es conocer

Más detalles

Versión Versión del documento: 1.4 SP5-2014-03-20. Manual del usuario: SAP BusinessObjects Analysis, edición para Microsoft Office

Versión Versión del documento: 1.4 SP5-2014-03-20. Manual del usuario: SAP BusinessObjects Analysis, edición para Microsoft Office Versión Versión del documento: 1.4 SP5-2014-03-20 Manual del usuario: SAP BusinessObjects Analysis, edición para Microsoft Office Tabla de contenido 1 Acerca de este manual.... 6 1.1 Destinatarios de este

Más detalles

Manual del Usuario. BPSueldo. Página 1 de 42 Versión 3.2

Manual del Usuario. BPSueldo. Página 1 de 42 Versión 3.2 Manual del Usuario BPSueldo Página 1 de 42 Versión 3.2 1) INTRODUCCIÓN...4 2) ESPECIFICACIONES DEL SISTEMA...4 3) INSTALACIÓN DEL SISTEMA...5 Proceso de instalación:...5 4) CIRCUITO DE REALIZACIÓN PAGOS

Más detalles

1.264 Tema 7. Introducción a SQL

1.264 Tema 7. Introducción a SQL 1.264 Tema 7 Introducción a SQL Lenguaje de consulta estructurado (SQL) Tema 7: SELECT, INSERT, DELETE y UPDATE. Relaciones. Tema 8: Subconsultas. Vistas (tablas virtuales). Indexados. Transacciones. Seguridad.

Más detalles

Utilidades de la base de datos

Utilidades de la base de datos Utilidades de la base de datos Desde esta opcion del menú de Access, podemos realizar las siguientes operaciones: Convertir Base de datos Compactar y reparar base de datos Administrador de tablas vinculadas

Más detalles

Modulo osc2psdc. 1. English Documentation (Ingles) 2. Documentación en Español (Spanish) 1. English Documentation (Ingles) Introduction.

Modulo osc2psdc. 1. English Documentation (Ingles) 2. Documentación en Español (Spanish) 1. English Documentation (Ingles) Introduction. Modulo osc2psdc Version 1.3 Carlos Perez Fernandez Soporte 1. English Documentation (Ingles) 2. Documentación en Español (Spanish) 1. English Documentation

Más detalles

Principios de diseño de bases de datos. Introducción

Principios de diseño de bases de datos. Introducción Principios de diseño de bases de datos Introducción Uno de los pasos cruciales en la construcción de una aplicación que maneje una base de datos, es sin duda, el diseño de la base de datos. Si las tablas

Más detalles

Guía de Diccionarios de Datos

Guía de Diccionarios de Datos Soluciones abiertas para un mundo cambiante Guía de Diccionarios de Datos www.moose-software.com www.visualdataflex.es Soluciones abiertas para un mundo cambiante Versiones documento Versión Revisado por

Más detalles

Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos:

Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos: CONTENIDO. 1. INTRODUCCIÓN 2. TIPOS DE SENTENCIAS SQL 3. TIPOS DE DATOS 4. SQL PLUS 5. CONSULTAS DE DATOS 6. RESTRICCIÓN Y CLASIFICACIÓN DE LOS DATOS 7. FUNCIONES A NIVEL DE FILA 8. VISUALIZACIÓN DE DATOS

Más detalles

MySQL 5 (versiones 5.1 a 5.6) Guía de referencia del desarrollador

MySQL 5 (versiones 5.1 a 5.6) Guía de referencia del desarrollador Prefacio 1. Objetivos de este libro 13 2. Principales temas tratados en este libro 13 3. A quién va dirigido este libro? 14 4. Requisitos 14 Introducción a MySQL 1. Introducción a las bases de datos relacionales

Más detalles

UNIDAD DE TRABAJO 3: PROGRAMACIÓN DE BASES DE DATOS TEMA 8: INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN

UNIDAD DE TRABAJO 3: PROGRAMACIÓN DE BASES DE DATOS TEMA 8: INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN UNIDAD DE TRABAJO 3: PROGRAMACIÓN DE BASES DE DATOS TEMA 8: INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN 8.1. INTRODUCCIÓN AL SQL PROCEDIMENTAL Casi todos los grandes Sistemas Gestores de Datos incorporan

Más detalles

Programación SQL. Lucio Salgado Diciembre 2008

Programación SQL. Lucio Salgado Diciembre 2008 Programación SQL Lucio Salgado Diciembre 2008 1 Gestionadores de Bases de Datos (DBMS) Es el software que permite administrar bases de datos, a través de ella el usuario puede usar los datos con mucha

Más detalles

Objetos de la Base de Datos

Objetos de la Base de Datos Objetos de la Base de Datos Todos los datos de una base de datos de Microsoft SQL Server 2005/8 están contenidos en objetos llamados tablas. Cada tabla representa algún tipo de objeto con significado para

Más detalles

Unidad V: Programación del lado del servidor

Unidad V: Programación del lado del servidor Unidad V: Programación del lado del servidor 5.1 Introducción al lenguaje La Programación del lado del servidor es una tecnología que consiste en el procesamiento de una petición de un usuario mediante

Más detalles

A- CREAR COPIA FÍSICA Y HEREDAR REGISTRO DE CONFIGURACIÓN

A- CREAR COPIA FÍSICA Y HEREDAR REGISTRO DE CONFIGURACIÓN Pag - 1 Guía de Elaboración de Reportes Herramienta de Administración 2.0 A- CREAR COPIA FÍSICA Y HEREDAR REGISTRO DE CONFIGURACIÓN NOTA: Los pasos de esta sección deben ser ejecutados si identifica realizar

Más detalles