Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Dudas con el sql (https://www.clubdelphi.com/foros/showthread.php?t=4212)

acrophet 06-10-2003 12:22:36

Dudas con el sql
 
Hola, soy nuevo en estoy y estoy peleandome con el sql pero no logro sacar nada en claro.
Me gustaria que si alguien sabe de alguna pagina con ejemplos practicos y tal me lo dijera. Porque estoy intentando hacer unas busquedas, filtrar tablas, etc. y no me sale nada de nada.
Buscando por el google solo encuentro informacion del sql a nivel general, y no se como aplicarlo en delphi para que funcione.
Argggs, que jodia es la vida del que no sabe...
Un saludo y gracias.

__cadetill 06-10-2003 12:46:13

Cita:

Posteado originalmente por acrophet
Argggs, que jodia es la vida del que no sabe...
Por eso pasamos todos cada día (siempre se aprende algo nuevo ;))

Para lanzar un SQL desde DElphi, sólo necesitas un componente que te lo permita
-BDE : TQuery
-IBX: TIBQuery
-ADO: TADOQuery
-DBX: TSQLQuery
-....

Estos componentes tienen la propiedad SQL donde se le asignará la sentencia que quieres lanzar. A parte, los tienes que configurar como un TTable fuera es decir,
-BDE: TQuery.DatabaseName := lo que sea
-IBX: TIBQuery.TDataBase := lo que sea y TIBQuery.Transaction := lo que sea
-ADO: TADOQuery.Connection := lo que sea
-DBX: TSQLQuery.SQLConnection := lo que sea

Por supuesto, lo puedes hacer en diseño

Hay 2 tipos de SQL, los que devuelven valores (sentencia SELECT) y los que no (sentencias INSERT, UPDATE, DELETE,.....). Para las primeras, los querys se llaman con un OPEN (TQuery.OPEN) y las segundas con un EXECSQL (TQuer.EXECSQL)

Las selects (que supongo que son las que te interesan en este caso) tienen la siguiente estructura

Código:

select *
from NombreTabla

Esta sería la sentencia SQL más básica. Con el * indicas que te devuelva todos los campos de la tabla. Si sólo quieres determinados campos, sólo tienes que quitar el * y poner el nombre de estos

Código:

select campo1, campo2, ...., campoN
from NombreTabla

tambien puedes filtrar el resultado de la sentencia con la cláusula WHERE

Código:

select *
from NombreTabla
where condicion1 and/or condicion2 and/or.... and/or condicionN

donde condicion es una sentencia que devuelve un valor booleano

Código:

select *
from clientes
where codico <= 1253

y, por supuesto ordenar el resultado por la columna que quieras (siempre y cuando esté en la sentencia SELECT)

Código:

select codigo, nombre, direccion, pais
from clientes
where codico <= 1253
order by nombre

Por supuesto, se puede complicar la cosa, con JOINs con varias tablas, agrupados,.....

Espero te sirva

acrophet 06-10-2003 12:58:16

Ante todo gracias por la velocidad de respuesta, asi da gusto:p

Mas o menos las instrucciones y eso, lo voy pillando, pero con lo que me lio es a la hora de meterlas en el codigo; te voy a plantear varias dudas que me asaltan:

Si uso un Ibquery (uso interbase), ya no tengo que usar un ibtable?
Cuantos necesito? con uno basta?
A la hora de introducir las sentencias sql, donde las meto? en el command text editor del ibquery? en el codigo fuente? que diferencia hay de uno a otro?
Las tengo que meter primero en el editor y luego llamarlas desde codigo?
Dios mio!!!! estoy hecho un lio!!

Y duda practica, que es lo que quiero conseguir:

tengo una bd con varias tablas, entre ellas una con nombre y otra con apellidos. Uso un campo calculado para mostrar ambos en un dblookuplistbox.
Quiero poder hacer busquedas por apellido, y que me muestre el resultado, pero en el formato del campo calculado. Es decir apellidos+nombre, pero buscando por el apellido. Todo esto al pulsar un boton de buscar o algo similar.
Mil gracias.

__cadetill 06-10-2003 13:27:50

Cita:

Posteado originalmente por acrophet
Si uso un Ibquery (uso interbase), ya no tengo que usar un ibtable?
trabajando con IBX, lo que se aconseja para la actualización de datos es el uso del TIBDataset. Una explicación en el foro de su utilización

http://www.clubdelphi.com/foros/show...&threadid=2490


Cita:

Posteado originalmente por acrophet
Cuantos necesito? con uno basta?
depende de la manera de programar que tengas. Yo, personalmente, no tengo ninguno y, cuando necesito lanzar un SQL, lo que hago es crear el objeto dinámicamente y luego destruirlo (por ejemplo para los campos calculados,....)

Cita:

Posteado originalmente por acrophet
A la hora de introducir las sentencias sql, donde las meto? en el command text editor del ibquery? en el codigo fuente? que diferencia hay de uno a otro?
Las sentencias SQL las tienes que poner en la propiedad SQL (de tipo TStrings) del TIBQuery. Da lo mismo que lo hagas por código o en diseño, el resultado es el mismo. Dependerá también del tipo de programación que hagas.

Cita:

Posteado originalmente por acrophet
tengo una bd con varias tablas, entre ellas una con nombre y otra con apellidos. Uso un campo calculado para mostrar ambos en un dblookuplistbox.
Quiero poder hacer busquedas por apellido, y que me muestre el resultado, pero en el formato del campo calculado. Es decir apellidos+nombre, pero buscando por el apellido. Todo esto al pulsar un boton de buscar o algo similar.
puedes hacer algo así

Código:

procedure LoQueSea; // por ejemplo el OnClacFields
var
  Q : TIBQuery;
begin
  Q := TIBQuery.Create(Self);
  Q.TDataBase := IBDataBase1;
  try
    Q.SQL.Add('select a.nombre || b.apellido');
    Q.SQL.Add('from nombre a left outer join apellidos b on');
    Q.SQL.Add('        (condiciones de unión de las 2 tablas)');
    Q.SQL.Add('where a.nombre like ''%' + MiNombre + '%'' ');
    Q.Open;
  finally
    FreeAndNil(Q);
  end;
end;

Más o menos sería algo así

Espero te sirva

kwan 06-10-2003 17:23:24

Hola cadetill, enhora buena pero + k una respuesta a sido un manual, k X cierto nunca viene mal, asin de camino aprendemos un poco chao.

Saludos

__cadetill 06-10-2003 18:05:59

Cita:

Posteado originalmente por kwan
.... pero + k una respuesta a sido un manual, ....
Es que estaba inspirado y tenía ganas de escribir :D

acrophet 07-10-2003 16:29:54

Gracias por la ayuda catedill, ha sido de gran utilidad.
Sigue asi!!!


La franja horaria es GMT +2. Ahora son las 05:24:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi