Vous êtes sur la page 1sur 5

Captulo 5.

Acceso a Bases de Datos en Delphi


http://www.hackerdude.com/courses/delphi/Cap005.html[15/04/2014 10:12:38 a.m.]
<-- Captulo
Copyright 1998
por David Martnez.
Todos los derechos reservados
Captulo -->
Captulo 5. Acceso a Bases de Datos en Delphi
En este captulo veremos como Delphi maneja el acceso a bases de datos, incluyendo las libreras requeridas y los componentes
que Delphi utiliza. Se asume que usted sabe lo que es una tabla y ha usado sistemas de base de datos bsicos, como dBase.
No se asume experiencia previa con SQL, pero ayudara :-) En este curso estar utilizando SQL local en general. Si hay algo
para lo cual necesito utilizar una base de datos grande (porque SQL local no soporte esa funcin o que no funcione como debe
ser para efectos de los ejemplos), utilizar formato generico SQL-92 exclusivamente (pero si deveras quiere saber exactamente
lo que uso, estoy utilizando InterBase, que viene con Delphi 3 Profesional y Cliente/Servidor).
Estructura de Acceso de Datos en Delphi
Desde los inicios de Delphi, Borland decidi crear una estructura de acceso de datos abierta. Una buena parte de la librera de
clases VCL esta dedicada a trabajar con acceso de datos de una manera abierta y flexible. Delphi y C++Builder tienen mtodos
de acceso a bases de datos nicos en la industria por su flexibilidad y facilidad de uso.
Nota: Si usted tiene C++Builder (BCB), la estructura de acceso de datos es idntica
a la de Delphi, gracias a que comparten la librera de clases VCL. La version 1 de
BCB tiene el VCL de Delphi 2, y la version 3 de BCB tiene el VCL de Delphi 3 (mas
unas cuantas cosas que estn en el nuevo C++y que Delphi seguramente tendr).
Gracias al hecho de que todo en Delphi es un objeto, los creadores de Delphi crearon, entre otros, un componente abstracto
llamado "TDataset". Como su nombre lo indica, un dataset es un "set de datos". Como podra ver, el set de datos abstracto no
especifica el origen de la base de datos, modo de conexin o marca del producto que est en el servidor. Ni siquiera especifica si
nuestro set de datos es una tabla fsica, un query de SQL o un archivo de texto! De esta manera se generaron los componentes
que heredan de TDataset bajo una base comn.
Los componentes TTable y TQuery son los componentes mas comnmente usados para acceso bsico a bases de datos (pero
no los nicos). Estos componentes representan una tabla y un query de SQL, respectivamente. Para mantener el acceso de
datos compatible con los diferentes productos de Borland, se desarroll una serie de libreras redistribuibles llamada "Borland
Database Engine" (BDE). Esta librera debe ser instalada en la mquina del cliente para que TTable y TQuery funcionen
correctamente.
El Borland Database Engine es primordialmente una librera para manejar cursores de SQL. Muchos lenguajes son capaces de
operar con un slo "rengln" de datos de la tabla a la vez, por lo cual el manejo de los cursores de SQL no es muy satisfactorio.
Pero Delphi utiliza el Database Engine como una "traduccin" de cursores de SQL en el formato de Queries y Tablas interno de
Delphi. Ademas, el Database Engine nos permite accesar el origen de los datos (la base de datos para la cual estamos
escribiendo) a travs de "drivers" intercambiables de acceso directo, o si asi deseamos, utilizar ODBC para accesar estos datos.
Un cursor es un concepto de SQL que se refiere a un set de renglones, un orden
en que se encuentran esos renglones, y un "renglon actual" dentro de ese orden.
Por ejemplo, cualquier "set de resultados" de un enunciado SELECT de SQL, si no
devuelve un error, devolvera un cursor (vaco o con informacin).
Para soportar las muchas maneras en que Delphi puede accesar datos, y para facilitar enormemente al programador
preocupaciones acerca de cambios en la base de datos que utilizan tus programas (por ejemplo: "Chin, soy programador de
Sybase y ahora la compaa cambio a Oracle... Oracle y Sybase utilizan DLL's de acceso muy diferentes... AAAARRRRGHHH!"),
Borland ha creado un muy elaborado set de BDE (Borland Database Engine), drivers para BDE y componentes en el VCL. Como
resultado, usted puede programar de una manera muy parecida (casi idntica!), ya sea que usted utilice tablas de dBase (a
traves de una parte del BDE conocido como Local SQL) o bases de datos grandes como Oracle, Sybase o Interbase.
El siguiente diagrama muestra las maneras en que Delphi y la base de datos pueden conectarse (est un poco simplificado, ya
Sistema ERP
epicor.com
Solucin ERP para manufactura & servicios. Vea el Tour ahora!
Captulo 5. Acceso a Bases de Datos en Delphi
http://www.hackerdude.com/courses/delphi/Cap005.html[15/04/2014 10:12:38 a.m.]
que hay algunos componentes intermedios - para mayor informacin consulte la documentacin de Delphi):
Complicado? No se preocupe, esta imagen cubre todas las posibilidades de acceso de datos, incluyendo la nueva tecnologa
MIDAS, asi que no lo tiene que entender en su totalidad. Usualmente usted solo seleccionar uno de los mtodos de acceso a
bases de datos (dependiendo en su software existente y necesidades de conexin), y se olvidar de todos los dems. Cuando
siga las secciones prcticas en los siguientes captulos, refirase a este diagrama para "descubrir" qu modo de acceso de datos
estamos utilizando en cada sesin prctica. Esta estructura pone todo el poder de acceso a bases de datos de muy diferentes
tipos en sus manos, en forma de simples componentes que usted puede poner en sus formas. Al mismo tiempo, le proporciona
suficiente poder para escribir su propia estructura de base de datos si eso es lo que usted quiere, sin cambiar los componentes
en el lado del cliente.
Porqu SQL?
Muchos programadores de Clipper, dBase y FoxBase me preguntan "qu onda con
SQL, y por qu es tan importante aprenderlo?". La respuesta es sencilla:
COMPATIBILIDAD. Si bien es cierto que muchas compaas tienen su propio
"tipo" de SQL, la especificacin SQL-92 es soportada por todos y cada uno de los
lenguajes de bases de datos grandes. Ademas, Microsoft y Borland han aadido
soporte SQL para todos sus lenguajes. El resultado de esto es que, si usted
aprende SQL-92, usted puede programar bsicamente para cualquier base de
datos sin importar su tamao y complejidad. Claro est, despues de aprender SQL,
se puede especializar en cualquier "sabor" de SQL en particular. Pero recuerde,
cualquier cosa que programe en Delphi para un especfico "tipo" de SQL
funcionar, pero le hara mas dificil moverse a otro tipo de servidor en el futuro.
Depender de usted hacer este tipo de decisiones.
Un buen libro de SQL es "SQL for Dummies", por Allen G. Taylor. Ademas de ser
un libro de SQL en general muy facil de entender, el autor utiliza las herramientas
de Delphi! El libro explica SQL en general sin especificar una versin de base de
datos en particular (Yo sospecho que, ya que esta usando las herramientas de
Delphi, esta programando en Interbase). Si usted cree que le pueda interesar
migrar a una base de datos SQL en el futuro y utiliza Delphi o C++Builder,
programe en Delphi como si ya tuviera una, utilizando los drivers de SQL local de
Paradox, dBase o MSAccess. Despues le ser mas facil migrar su base de datos.
Configuracin del BDE - Aliases
Un Driver de BDE es un componente de software que actua como intermediario entre la librera de cursores del BDE y los datos
Fsicos. Delphi viene con drivers para dBase, Paradox e Interbase, adems de un driver para ODBC, que le permite accesar
cualquiera de las bases de datos que ODBC soporta. En ediciones cliente/servidor, Delphi cuenta con drivers "nativos" de
SyBase, Oracle y MS-SQL Server.
Captulo 5. Acceso a Bases de Datos en Delphi
http://www.hackerdude.com/courses/delphi/Cap005.html[15/04/2014 10:12:38 a.m.]
ODBC es un producto de Microsoft que es utilizado para accesar datos con Office,
Visual Basic y otras aplicaciones de Microsoft y de terceros. Es analogo al BDE en
el sentido de que tiene drivers que actuan como intermediarios entre los datos y
conexiones fsicas y el software de acceso, pero es diferente porque ODBC se
limita a traducir llamadas SQL a la conexion fisica, sin libreria de cursores que
traduzca los resultados.
Esta estructura requiere de un concepto llamado "Alias". Un alias de BDE es un conjunto de especificaciones que describen el
metodo que el BDE utilizar para accesar el servidor, incluyendo driver fsico, mapa de caracteres internacionales, etc.
Los Aliases le permiten especificar todos aquellos parmetros que hacen a su aplicacin depender de un servidor en particular
afuera de su ejecutable, en un archivo de configuracin en la maquina del cliente. El programa de instalacion InstallShield que
viene con Delphi Professional y Client Server (no estoy seguro si viene con Delphi Standard) le permite instalar el BDE con su
aplicacin y especificar los aliases necesarios, respetando las configuraciones ya existentes.
Componentes No Visuales de Acceso a Datos
Del lado del cliente en Delphi, la paleta de componentes llamada "Data Access" contiene todos los componentes no visuales que
usted puede poner en su aplicacin para conectarse a una base de datos. Los componentes ms importantes incluyen:
TSession
Un alias se conecta a una "sesin", representada por el componente TSession. Esta sesin es una conexin Fsica a la base de
datos. Los programas de Borland pueden compartir sesiones globalmente, y cada programa puede tener cualquier nmero de
sesiones simultneas. De este modo, usted puede compartir una sola conexin (sesin) a la base de datos para economizar
licencias, sin importar cuantos ejecutables este utilizando para accesar los datos, o si las licencias por conexion no son limitadas
en su base de datos, puede utilizar varias sesiones en una sola aplicacion para programar sus queries con multitarea.
Incluso si usted no pone un componente TSession en su aplicacin, Delphi define uno por cada aplicacin, representado por la
variable de objeto global "Session".
TDatabase
TDatabase es la representacin de una base de datos. Tal como en su servidor de SQL usted puede crear ms de un
"contenedor de base de datos", Delphi puede compartir una conexin (TSession) entre varios contenedores de bases de datos
(TDatabase). Tal como en la sesin, si usted no pone un TDatabase en su aplicacin Delphi especifica uno en la variable de
objeto global "Database".
Programadores de dBase/Clipper: Una base de datos, en el sentido de SQL, es
una coleccin de tablas, vistas, procedimientos SQL y tipos de datos. En los viejos
tiempos de dBase, muchos programadores "entendan" que una base de datos era
un archivo DBF, y el concepto de Tablas no exista. Ahora, si usted utiliza DBF o
Paradox, Delphi entender por base de datos el directorio donde se encuentran
los DBFs en cuestin, y las Tablas sern cada uno de los DBFs. Esto quiere decir
que si usted est acostumbrado a poner sus DBFs en diferentes subdirectorios
(que es algo que yo acostumbraba a hacer en Clipper/dBase), cada directorio
representar un TDatabase diferente. En Delphi un TDatabase para tablas locales
no especifica el tipo de tabla, as que usted puede mezclar tablas Paradox y dBase
en el mismo directorio sin problemas.
TTable
TTable es la representacin de una tabla, y es a lo que estn acostumbrados los programadores en Clipper. TTable representa
una tabla entera en Delphi. TTable contiene informacin acerca del tipo de tabla (que solo se usa en tablas locales - paradox,
dbase, etc) y del nombre del ndice, as como filtros. TTable tiene entre sus mtodos, First, Next, Last, etc.
Programadores dBase/Clipper/Paradox: Es MUY IMPORTANTE aprender que,
mientras ustedes estarn ms inclinados en un principio a usar TTable que su
"primo" TQuery, TTable representa la tabla COMPLETA. Esto puede parecer trivial
para los usuarios de bases de datos locales, pero en SQL es muy importante. El
Captulo 5. Acceso a Bases de Datos en Delphi
http://www.hackerdude.com/courses/delphi/Cap005.html[15/04/2014 10:12:38 a.m.]
abrir un TTable por s mismo (sin filtro) contra un servidor SQL hara que Delphi
ejecute un SELECT * FROM LATABLAQUESEA, lo cual, en un ambiente de
produccin, puede querer decir traerse dos o tres millones de renglones por el
cable! En general TTable no es muy usado en un ambiente Cliente/Servidor
(aunque tiene sus usos). Tenga cuidado!
TQuery
TQuery es la representacin de cualquier comando de SQL que regresa un cursor de SQL (ya sea de tipo SELECT o un "Stored
Procedure" - vea TStoredProc). Este cursor de SQL se comporta como una tabla. Los programadores con experiencia en SQL
encontrarn a TQuery muy til, ya que se comporta como un TTable (en el sentido de que tiene First, Next, Last, etc), pero al
mismo tiempo es un comando de SQL. El programador de SQL no tiene que hacer "Fetch". Adems, cuando el usuario edita
campos asociados a un TQuery, Delphi se encarga de generar los comandos "UPDATE" y "DELETE" si el resultado del Query es
Read/Write (vea TUpdateSQL).
Programadores dBase/Clipper/Paradox: Probablemente una de las mejores
cosas que Delphi tiene para los usuarios de tablas locales es que Delphi tiene un
pequeo SQL a traves de los drivers de tablas locales. Esto quiere decir que usted
puede programar TQuery como si su tabla DBF tuviera un "servidor SQL". De esta
manera, usted puede mantener (si programa con atencin a los detalles
particulares de cada version de SQL) una sola base de cdigo para tablas locales y
bases de datos gigantescas.
TDataSource
El Datasource es, como su nombre lo indica, una representacin del "origen de los datos". DataSource no requiere el BDE, pero
es el componente que "mapea" los componentes visuales de base de datos con los no visuales. El hacer un componente
intermedio es importante porque de este modo podemos tener varias representaciones de los mismos datos sin tener que "atar"
la representacin de los datos en pantalla a la representacin "fsica" de los datos. Un DataSource se conecta a su vez a
cualquier componente tipo Dataset, como TQuery, TTable, TClientDataset, o el que usted haya creado! DataSource nos permite
ser consistentes en la representacin de nuestros datos en pantalla sin preocuparnos de donde vengan los mismos (Tablas,
queries, o nuestros propios metodos).
TUpdateSQL
En SQL-92, existe una limitacin en cuanto a los enunciados "Select". Existen muchas circunstancias en las cuales SQL
regresar un cursor de solo lectura, en vez de el cursor de Lectura/Escritura que nos gustara obtener. Por ejemplo, si el
enunciado SQL especifica una unin de tablas, SQL nos devolver un cursor que podemos representar como el resultado de un
Query en Delphi, pero no podremos editar el resultado. Obviamente esta limitacin es muy severa si queremos hacer ciertas
"maravillas" con nuestra aplicacin (queries editables con referencias en texto es una de estas cosas).
Aqui es donde UpdateSQL hace su magia. Todos los queries tienen un Edit, Insert y Delete. UpdateSQL puede ser encadenado a
un query cuyo resultado ser de lectura unicamente para decirle a Delphi qu vamos a hacer cuando el usuario edite, inserte y
borre un registro. En el Edit, podemos poner un SQL UPDATE, en Insert podemos poner un SQL INSERT, etctera. De este
modo nos "brincamos" la limitacin de SQL utilizando sentencias especficas, pero lo mantenemos automatizado gracias a
Delphi.
TStoredProc
Aunque TQuery puede ejecutar un stored procedure que devuelva un valor (y tenemos que usar un TQuery si queremos
recuperar ese valor), a veces el stored procedure no devuelve nada. TQuery espera un valor de regreso, y nos devolvera un
error si el servidor no devuelve un valor. Por este motivo, para esos procedimientos necesitamos un objeto que nos permita
ejecutar un comando SQL sin esperar ninguna respuesta. TStoredProc es ese comando.
En SQL, un "Stored Procedure" es un procedimiento escrito en lenguaje SQL.
Puede ser tan sencillo como un Select con variables y un "join" de tablas, o tan
complicado como un procedimiento Batch que calcula los salarios de todos los
empleados y los pone en la tabla de nmina.
Existen ms componentes no visuales de acceso a datos, pero estos son suficientes para hacer muchas aplicaciones cliente
servidor sin problemas. Cuando veamos "Multi-Tier" y Objetos de Negocios (Business Objects), que es una nueva capacidad de
Captulo 5. Acceso a Bases de Datos en Delphi
http://www.hackerdude.com/courses/delphi/Cap005.html[15/04/2014 10:12:38 a.m.]
Delphi Cliente/Servidor, veremos otros modos de acceso de bases de datos un poco ms "indirectos".
Componentes Visuales de Acceso a Datos
Los componentes visuales de base de datos son los que ponemos directamente en la forma para desplegar informacin y permitir
al usuario editarla. Todos los componentes de este tipo son llamados "Data-aware", y tienen el prefijo "DB". De este modo, un
componente de edicin "Edit" en su versin "Data Aware" es llamado "DBEdit". ComboBox se convierte en "DBComboBox".
Muchos de los componentes visuales (Incluyendo el Grid) tienen una versin "Data Aware". Adems, usted puede crear sus
propios componentes data aware.
Ademas, existe un componente llamado "DBNavigator", que es una serie de botones "mapeados" a los comandos Next, Prior,
Last, Edit, Delete, etc., de cualquier DataSource.
Todo esto le permite a usted poner unos cuantos componentes data aware en su forma (junto con un DBNavigator), conectarlos a
un DataSource (que se encontraria conectado a un Dataset abierto), y correr su programa, y asi de fcil tendria usted una
aplicacion bsica con acceso a base de datos, sin tener que escribir una sola lnea de codigo! Lo cual nos lleva a nuestro
prximo capitulo, donde haremos una aplicacin de base de datos casi sin tener que usar cdigo!
Capitulo -->
Debes ms de $35,000
resuelvetudeuda.com
Te ayudamos a liquidar tus deudas pagando entre 30% y 70% menos

Vous aimerez peut-être aussi