PDA

Ver la Versión Completa : Como formar esta consulta?


danytorres
08-10-2003, 00:03:06
Hola a todos los del foro? como empesar es un poco complicado, estoy trabajando en Sql, en el cual realizo una consulta estandar que es la siguiente:

Code:
____________________________________________________
SELECT Guia.Codigo, Paquete.CodigoPaquete, Paquete.EstadoPaquete, Paquete.FechaHora,Direccion.Direccion, Ciudad.NombreCiudad

FROM Ciudad INNER JOIN
Direccion ON Ciudad.IdCiudad = Direccion.IdCiudad INNER JOIN
DireccionConsignatario ON Direccion.IdDireccion = DireccionConsignatario.IdDireccion INNER JOIN
Guia INNER JOIN
Paquete ON Guia.Codigo = Paquete.CodigoGuia INNER JOIN
Consignatario ON Guia.IdDestinatario = Consignatario.IdConsignatario INNER JOIN
Ente ON Consignatario.IdConsignatario = Ente. IdEnte ON DireccionConsignatario.IdConsignatario = Consignatario.IdConsignatario

WHERE (Paquete.CodigoPaquete IN ('72', '73', '74'))
____________________________________________________

cuando digo estandar es que no existe seleccion o parametro, para la seleccion utilizo el componente RxCheckListBox1 el cual le paso los datos que posee una tabla, esos datos son el 72, 73, 74 hasta el ultimo registro de la tabla, yo quiero que el usuario seleccione o marque con un check en RxCheckListBox1 el 72 o 73 o 74 el que el desea, la pregunta es como armo el WHERE (Paquete.CodigoPaquete IN ('72', '73', '74')) ?

el codigo que utilizo es el siguiente :

Code:
____________________________________________________

RxCheckListBox1.Items.Strings[RxCheckListBox1.Items.ValueFromIndex];
___________________________________________________

pero como hago para poner el parentesis el asento y luego la como, haa y el hultimo parametro no lleva como? agradesco la ayuda que me puedan dar? Gracias


____________________________
Un saludo a todos...

Viet
08-10-2003, 15:23:52
Hola

Se me ocurre que puedes hacer




Var

aux: String;

begin

Aux :=' SELECT Guia.Codigo, Paquete.CodigoPaquete, Paquete.EstadoPaquete, Paquete.FechaHora,Direccion.Direccion, Ciudad.NombreCiudad
FROM Ciudad INNER JOIN
Direccion ON Ciudad.IdCiudad = Direccion.IdCiudad INNER JOIN
DireccionConsignatario ON Direccion.IdDireccion = DireccionConsignatario.IdDireccion INNER JOIN
Guia INNER JOIN
Paquete ON Guia.Codigo = Paquete.CodigoGuia INNER JOIN
Consignatario ON Guia.IdDestinatario = Consignatario.IdConsignatario INNER JOIN
Ente ON Consignatario.IdConsignatario = Ente. IdEnte ON DireccionConsignatario.IdConsignatario = Consignatario.IdConsignatario
WHERE (Paquete.CodigoPaquete IN (';

i:= 0;
While i< RxCheckListBox1.Items.Count do
begin
if RxCheckListBox1.checked[i] then
aux:= aux +'"'+ RxCheckListBox1.Items.String[i]+'",' ;
inc(i);
end;

aux := Copy(aux,1,length(aux) -1); // saco el ultimo "
aux:= aux +'))';



End;



Suerte ;)

danytorres
08-10-2003, 19:28:22
Gracias por responder Viet. Funciona bien pero tengo un sierto detalle cuando le paso este string al query lo hace bien la primera vez pero en la segunda no hace nada nose como resetear el query o actualizarlo el codigo que uso es el siguiente:

Code
___________________________________________________
procedure TEtiqueta.BitBtn5Click(Sender: TObject);
var
aux: String;
I: integer;
begin
Datamodule2.QSeleccionEtiqueta.


Datamodule2.QSeleccionEtiqueta.Close;

Datamodule2.QSeleccionEtiqueta.SQL.Add('SELECT Guia.Codigo, Paquete.CodigoPaquete, Paquete.EstadoPaquete, Paquete.CodigoGuia,Paquete.FechaHora, Paquete.NumeroRelacion,Paquete.UbicacionPaquete, Guia.TotalPeso, Guia.OficinaOrigen, Guia.CiudadOrigen,');
Datamodule2.QSeleccionEtiqueta.SQL.Add('Guia.CiudadDestino, Guia.OficinaDestino, Ente.NombreEnte,Ente.Celular, Ente.Email, Direccion.Direccion, Ciudad.NombreCiudad');
Datamodule2.QSeleccionEtiqueta.SQL.Add('FROM Ciudad INNER JOIN Direccion ON Ciudad.IdCiudad = Direccion.IdCiudad INNER JOIN DireccionConsignatario ON Direccion.IdDireccion = DireccionConsignatario.IdDireccion INNER JOIN');
Datamodule2.QSeleccionEtiqueta.SQL.Add('Guia INNER JOIN Paquete ON Guia.Codigo = Paquete.CodigoGuia INNER JOIN');
Datamodule2.QSeleccionEtiqueta.SQL.Add('Consignatario ON Guia.IdDestinatario = Consignatario.IdConsignatario INNER JOIN');
Datamodule2.QSeleccionEtiqueta.SQL.Add('Ente ON Consignatario.IdConsignatario = Ente.IdEnte ON');
Datamodule2.QSeleccionEtiqueta.SQL.Add('DireccionConsignatario.IdConsignatario = Consignatario.IdConsignatario');
Datamodule2.QSeleccionEtiqueta.SQL.Add('WHERE (Paquete.CodigoPaquete IN( ');

i:= 0;
While i< RxCheckListBox1.Items.Count do
begin
if RxCheckListBox1.checked[i] then
begin
aux:= aux +' '+ RxCheckListBox1.Items.Strings[i] + ' ,' ;
end;
inc(i);
end;

aux := Copy(aux,1,length(aux) -1); // saco el ultimo
aux:= aux + '))';

Datamodule2.QSeleccionEtiqueta.SQL.Add(aux);
Datamodule2.QSeleccionEtiqueta.Open;
Datamodule2.QSeleccionEtiqueta.Refresh;

end;
________________________________________________

la primera si lo hace pero cuando hago nuevamente Click en el boton no hace nada que puede estar pasando. agradesco su ayuda?. Gracias.


___________________________________
Un saludo para todos....

Viet
08-10-2003, 19:36:59
Dany

Para asignarle el SQL a la Query hace asi:


Query1.Close;
Query1.Sql.Text := 'select .........';
Query1.Sql.add(aux);
Query1.Open;



Suerte ;)