Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Selección de una tabla (https://www.clubdelphi.com/foros/showthread.php?t=31244)

chipsoni 03-05-2006 12:46:32

Selección de una tabla
 
A ver, tengo las típicas ventanitas, donde selecciono de una y se añaden en la otra (como la selaccion de correos electronicos en el outlook).

Tengo una tabla temporal, donde voy añadiendo los codigos que voy seleccionando de la tabla original, donde estan todos los datos.

Ahora, para verlo en el dbgrid, le asocio una query y hago la siguiente consulta:

with Query do
begin
with SQL do
begin
datamodule.tabla_original.close;
clear;
datamodule.tabla_original.open;
Add(Select * from tabla_original);
Add(where (codigo = :codigo));
ParamByName ('codigo').AsInteger :=datamodule.tabla_temporal.codigo;
Open;
end;
end;
DbGrid.DataSource := DataSource;

¿Que está mal?.

De antemano, muchas gracias por ayudarme.

Lepe 03-05-2006 13:50:47

Como no sé el error que te da, pues no puedo ayudar mucho. Además has supuesto u omitido muchos detalles, así que menos aún.

Código Delphi [-]

with Query do
begin
  with SQL do
  begin
    datamodule.tabla_original.close;
    clear;
    datamodule.tabla_original.open; // no hace falta.... pero bueno.
    Add('Select * from NombreTabla');
    Add('where (codigo = :codigo)');
    ParamByName ('codigo').AsInteger :=datamodule.tabla_temporal.codigo;
    Open;
  end;
end;
DbGrid.DataSource := DataSource; // este señor ¿quien es  y a donde apunta?
NombreTabla no es "tabla_original" porque ese es el nombre de delphi, es decir del componente TTable. Tienes que especificar el nombre real de la tabla

Tampoco puedo decir mucho más porque no has dicho que clase de Base de datos usas, paradox, firebird, etc.

Saludos

chipsoni 03-05-2006 14:08:39

He puesto ese nombre para que se entienda, pero en mi consulta he puesto el nombre real de la tabla (que es el mismo en la base de datos y en el datamodule, para no liarme).

Mi base de datos es MySQL, pero no sabia que eso tuviera mucho que ver con las consultas SQL, mi problema es exclusivamente la consulta.

Tengo 2 tablas, una solo con unos pocos codigos y otra con un monton de datos donde el codigo es la primary key.
Ahora quiero seleccionar de la tabla donde estan todos los datos, solo las entradas que tengo seleccionadas en la tabla donde solo estan los codigos.

¿Esta bien esta consulta?

Add(Select * from tabla_original);
Add(where (codigo = :codigo));
ParamByName ('codigo').AsInteger :=datamodule.tabla_temporal.codigo;

Esta funciona:

Add(Select * from tabla_original);
Add(where (codigo = :codigo));
ParamByName ('codigo').AsInteger := StrToInt(Edit.text);

Me selecciona solo la entrada cuyo codigo coincide con el que introduzco en el edit, pero es que yo quiero que seleccione todas las entradas de la tabla temporal (que solo tiene un campo 'codigo' que es el campo codigo 'primary key' de la tabla grande).

Lepe 03-05-2006 16:18:38

Gracias por aclarar más tu consulta.

La forma que menciones es correcta y debe funcionar, siempre y cuando la tabla_temporal esté abierta. Faltaría un detalle más o menos así:

datamodule.tabla_temporal.Fieldbyname('codigo').AsInteger o bien
datamodule.tabla_temporalCodigo.AsInteger si tienes los campos persistentes.

Si en la tabla temporal tienes 4 registros con códigos 5, 7, 7, 32, puedes usar este otro método:

Código SQL [-]
Select * from tabla_original
where codigo  in ( select distinct codigo from tabla_temporal)

que se traduce en seleccionar en la tabla_original, los códigos que haya en la tabla_temporal (es más lioso decirlo que ponerlo en práctica ;)):
Código SQL [-]
Select * from tabla_original
where codigo  in ( 5, 7, 32)

Espero te sirva.

Saludos


La franja horaria es GMT +2. Ahora son las 09:28:54.

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