Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-05-2006
chipsoni chipsoni is offline
Miembro
 
Registrado: nov 2005
Posts: 75
Poder: 19
chipsoni Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 03-05-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 03-05-2006
chipsoni chipsoni is offline
Miembro
 
Registrado: nov 2005
Posts: 75
Poder: 19
chipsoni Va por buen camino
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).
Responder Con Cita
  #4  
Antiguo 03-05-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Imprimir por seleccion? danytorres Impresión 4 27-11-2006 19:15:59
Filtrar una tabla a partir de una seleccion hecha en una rejilla zerelho OOP 3 19-12-2005 12:59:30
Selección en Excel Jordy Servers 1 06-12-2005 08:55:00
Seleccion en DBLookUpComboBox NuncaMas Varios 1 22-12-2003 18:41:21
una seleccion YolandaM Impresión 2 04-10-2003 20:11:59


La franja horaria es GMT +2. Ahora son las 04:46:46.


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
Copyright 1996-2007 Club Delphi