PDA

Ver la Versión Completa : Selección de una tabla


chipsoni
03-05-2006, 12:46:32
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.



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:


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 ;)):

Select * from tabla_original
where codigo in ( 5, 7, 32)


Espero te sirva.

Saludos