1 de Septiembre de 1998

SQL

Después del programa Truco Juegos, aun me quedan algunos detalles sobre las bases de datos locales en Delphi. Una de ellas es SQL. El SQL es un lenguaje ideado para realizar consultas a las tablas, de una manera intuitiva. No es un invento, o una aplicación de la BDE o del mismo Delphi, sino que es un lenguaje aparte el cual lo soporta Delphi. Su principal aplicación es que la consulta siempre es independiente del servidor de bases de datos (en el caso de bases de datos en red) siempre y cuando este soporte el lenguaje SQL, lo que le da cierta versatilidad a los programas que lo usa.

Para explicar SQL, voy a recurrir al ejemplo que viene en todos los libros o documentación. Para poder realizar consultas Delphi pone a nuestra disposición un control llamado Query, que sustiye a nuestro viejo conocido Table. Para hacer este ejemplo coloca sobre un formulario un componente Query, que el componente siguiente a Table en la paleta Data Access. Coloca un Panel alineado a la parte inferior del formulario y borrar el contenido de su propiedad Caption, sobre el coloca un botón y ponle como texto (propiedad caption) Consulta. Ahora coloca un TMemo alineado en a la parte de arriba del formulario, y un TDBGrid alineado al Cliente, osea ocupando el espacio restante. Al componente Query pon es su propiedad DataBaseName el alias Demos. El componente DBGrid debe apuntar su propiedad DataSet a un componente DataSource, al cual tambien apunta el Query. Un poco de lio no?, bueno mira el código fuente de este capítulo. Ahora en manejador OnClick del botón escribe esto:

procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL := Memo1.Lines;
Query1.Open;
end;

Ahora ya puedes ejecutar el programa, y verás que no aparece nada en la regilla DbGrid, eso es porque el componente Query controla la regilla y este no ha realizado ninguna consulta. Vamos a hacer la primera, escribe en el Memo: where * from biolife y pulsa el botón consulta. Si todo ha ido bien verás aparecer en el DbGrid el contenido de la tabla BioLife. Pero esto no es todo, si quieres ver solo el contenido de un campo escribe:

Select Category from biolife ah! borra antes el contenido del Tmemo. Si decides ver solo el contenido de un campo cuyo nombre esta compuesto por más de una palabra debes escribirlo de otra manera, asi: select biolife."Species Name" from biolife observa la diferencia entre una sentencia y la otra. Para mostrar más de un campo: select biolife."Species Name", Biolife."common_name" from biolife. Si tienes algún problema con alguna consulta, prueba a colocar los campos entre comillas. Pero ojo que son comillas dobles, no la clásica comilla simple del Pascal, sino que es la comilla doble que usaba el Cobol y el Basic.

Vamos a liarlo un poco más, así que escribe: select * from customer where country<>"America" and Company like "%SCUBA%" lo que hace esta sentencia es mostrar todos lo registros de una tabla llamada customer que cumplan la condición que el campo country sea diferente a America (ojo con las mayusculas y la minusculas en las condiciones porque las distingue) y que campo Company contenga la palabra SCUBA. Si deseas obtener datos de dos tablas solo tienes que indicar los campos de ambas tablas (o de todas las que quieras) poniendo el nombre de la tablas punto el campo, por ejemplo: NombreTabla1.Campo1, NombreTabla2.Campo2, etc. Después de la palabra From, debes colocar el nombre de las tablas involucradas, y después de Where pones las relaciones, por ejemplo: NombreTabla1.Campo2 = NombreTabla2.Campo2. Recuerda que se puede usar And y Or como operadores lógicos. Un ejemplo general sería: select Tabla1.Campo1, Tabla1.Campo2, Tabla1.Campo3, Tabla2.Campo1 from Tabla1, Tabla2 where Tabla1.Campo1 = Tabla2.Campo1 And Tabla1.Campo2 like "%Vigo%"

Esta vez no he hablado de propiedades, aunque si existe una importante y se llama RequestLive, la cual indica si la BDE se preocupa de actualizar los datos. Osea si se hace una consulta y esta propiedad esta en verdadero, cuando se produzca un cambio en la base de datos BDE actualizará la consulta.