Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-11-2008
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Question Seleccionar datos para imprimir

Hola a todos amigos:
Bueno, me explicaré para que entiendan mi pregunta. Yo tengo un formulario en el que hay un DBGrid que me muestra los resultados de una consulta, un boton en este formulario indica imprimir y me da un reporte que contiene el resultado de la consulta. Ahora bien:
Yo quiero que cuando el usuario de clic en el boton Imprimir se muestre otro formulario con 2 listbox, en el 1ro estarán todos los numeros de identificación(son unicos) y el 2do en blanco, que quiero con esto, que el usuario escoja los registros que el quiera imprimir, los pase al 2 listbox(por medio de otro boton) y luego de en otro boton que diga "Reporte" y se muestren los reportes de los registros que el seleccionó.
Como puedo realizar esto? Espero que me ayuden en esto.
Muhcas gracias y suerte.
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
  #2  
Antiguo 17-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, puedes recorrer las lineas seleccionadas del dbgrid, añadir en un listbox temporal el campo identificador y lo que necesites, y luego filtrar tu tabla o query segun estos campos en el listbox. Para recorrer el multiselect:

Código Delphi [-]
ListBox1.Clear;
for i := 0 to DBGrid1.SelectedRows - 1 do
begin   
DBGrid1.datasource.dataset.GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
ListBox1.Add(DBGrid1.DataSource.DataSet.FieldByName('id').Asstring);
end;
Responder Con Cita
  #3  
Antiguo 17-11-2008
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Question

Gracias por contestar coso, ya he resuelto lo del multiselect como me digiste, aunque tienes algunos errores. Ahora bien, ya selecionados los que quiero imprimir comp puedo hacer un filtrado a mi tabla? Es paradox7.
Gracias otra vez
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
  #4  
Antiguo 17-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cita:
Gracias por contestar coso, ya he resuelto lo del multiselect como me digiste, aunque tienes algunos errores.
vaya, pues dimelos, pq esto lo saque de un componente dbgrid que uso mucho...mmm ya se, listbox1.items

Si usas alguna query, por ejemplo haciendo 'select * from tabla where id in (' y aqui los ids que previamente has grabado en el listbox, por ejemplo. Si usas filtros tipo bde, entonces, tabla.filter := 'id = ' + listbox1.Items[0] + ' and id = ' + ListBox1.Items[1] + etc... o bien haciendolo de manera automatica dentro de un bucle for. saludos.

Última edición por coso fecha: 17-11-2008 a las 21:48:51.
Responder Con Cita
  #5  
Antiguo 17-11-2008
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Question

Hola de nuevo coso:
veras he decidido hacerlo de manera automatica con un bucle For lo ago así:
Código Delphi [-]
  for I:=0 to LBox_DatosImprimir.Count-1 do
    begin
       FrmPrincipal.TProveedores.Filter:='No = '+LBox_DatosImprimir.Items[i];
    end;
FrmProveedorInforme.Reporte1.DataSet:=FrmPrincipal.TProveedores;
FrmProveedorInforme.Reporte1.Preview;
Sucede que cuando hago el preview me muetra el ultimo registro varias veces aunque yo no lo haya selecionado para imprimir. Este error a que se debe?
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
  #6  
Antiguo 18-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por Alexandro Ver Mensaje
Sucede que cuando hago el preview me muetra el ultimo registro varias veces aunque yo no lo haya selecionado para imprimir. Este error a que se debe?
Supongo porque no estas haciendo Filtered := True, ademas aunque lo hicieras solo te va ha filtrar por el ultimo que has seleccionado, ya que no concatenas lo que tienes.

Código Delphi [-]
for I:=0 to LBox_DatosImprimir.Count-1 do
 begin
   if i=0 then
    Filtro := '(No = '+LBox_DatosImprimir.Items[i]+')'
  else
    Filtro :=Filtro + ' AND (No = '+LBox_DatosImprimir.Items[i]+')'; 
end;
 FrmPrincipal.TProveedores.Filter := Filtro;
 FrmPrincipal.TProveedores.Filtered := True;
 FrmProveedorInforme.Reporte1.DataSet:=FrmPrincipal.TProveedores;
FrmProveedorInforme.Reporte1.Preview;

Aunque lo podías haber hecho con una consulta como te dice coso Select...Where nro in (.....)

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 18-11-2008 a las 02:20:48.
Responder Con Cita
  #7  
Antiguo 19-11-2008
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Question

Hola de nuevo:
MIren, creo que prefiero hacerlo con con Query pero como le digo a la consulta que me devuelva los valores que quiero? Digamos:
Código SQL [-]
SELECT * FROM Proveedores.DB WHERE No IN(:valor1,AND :valor2)
Como le paso los parametros si yo no se la cantidad de parametros que voy a necesitar?
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
  #8  
Antiguo 19-11-2008
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Miren este es el codigo que he puesto:
Código Delphi [-]
For i:=0 to LBox_DatosImprimir.Count-1 do
 if i=0 then
          begin
           Filtro:=LBox_DatosImprimir.Items.Strings[i];
          end
        else
          begin
            Filtro:=Filtro+' AND '+LBox_DatosImprimir.Items.Strings[i];
          end;
QConsulta.Close;
QConsulta.SQL.Text:='SELECT * FROM Proveedores.db WHERE Proveedor IN(:valor)';
QConsulta.Params[0].AsString:=Filtro;
QConsulta.Open;
FrmProveedorInforme.Reporte1.DataSet:=QConsulta;
FrmProveedorInforme.Reporte1.Preview;
El reporte se muestra pero solo con el ultimo registro que introduje en la tabla, ni siquiera toma los valores de la consulta. Que pasa aki? Les ruego me respondan, lo estoy necesitando.
Suerte
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
  #9  
Antiguo 19-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola de nuevo, si no sabes la cantidad de parametros entonces no te conviene utilizar parametros, es mejor que armes la cadena.

Código Delphi [-]
 
Consulta := 'SELECT * FROM Proveedores.DB WHERE No IN(';
 
Valores := '';
for i:=0 to LBox_DatosImprimir.Count-1 do
 begin
  if i=LBox_DatosImprimir.Count-1 then
    Valores := Valores+LBox_DatosImprimir.Items[i]
 else
    Valores := Valores+LBox_DatosImprimir.Items[i]+','; 
end;

Consulta := Consulta+Valores+')';
 
Query.Active := False;
Query.Sql.Text := Consulta;
Query.Active := True;

Mas o menos así sería.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #10  
Antiguo 19-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por Alexandro Ver Mensaje
El reporte se muestra pero solo con el ultimo registro que introduje en la tabla, ni siquiera toma los valores de la consulta. Que pasa aki? Les ruego me respondan, lo estoy necesitando.
Suerte
Has la prueba con lo ultimo que te pase, el In no necesita And, se debe separar cada valor con una coma "," , ahora también sería bueno que hagas un showmessage de la consulta que se esta armando y pones aquí el resultado que te da ese Showmessage.

Código Delphi [-]
Query.Sql.Text := Consulta;
showmessage(Query.Sql.Text);

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #11  
Antiguo 19-11-2008
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Unhappy

Hola Caro: He hecho cada cosa de la que me digiste y ahora resulta que me da un error que dice:
Invalid use of keyword TOKEN ALE
Ale es un proveedor, no se que puede ser ese error, el parametro text del Query esta bien, lo comprobé con el showmessage.
Sabes que sucede?
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
  #12  
Antiguo 20-11-2008
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Question

Caro:
Ya he dado con el problema anterior y era la falta de las comillas dobles("") al yo pasarle el valor a la consulta, ya no me da el error solo que ahora cuando muestra el reporte sale el ultimo registro aunque yo no lo haya seleccionado. Solo se muestra ese registro y los otros no. Porque?
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
  #13  
Antiguo 20-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola de nuevo, ¿como esta estructurado tu reporte?, lo que también quiero que veas es, si el resultado de tu consulta es correcto, puedes enlazarlo a parte del reporte a un DBGrid y ves si son los registros que has seleccionado, son los que deben salir.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #14  
Antiguo 20-11-2008
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Question

Hola Caro:
Bien, ya he puesto un DbGrid y la consulta me la devuelve nula o sea vacia. No se por que hace esto ya que me da los nombres existentes en la tabla.
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
  #15  
Antiguo 21-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por Alexandro Ver Mensaje
Hola Caro:
Bien, ya he puesto un DbGrid y la consulta me la devuelve nula o sea vacia. No se por que hace esto ya que me da los nombres existentes en la tabla.
Es porque no esta enconttrando esos registros, revisa bien tu consulta y que los registros con el campo que estas haciendo la busqueda existan en tu tabla.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #16  
Antiguo 21-11-2008
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Smile

Hola Caro!!!!
Ya he resuelto el problema!!!
El Probema estaba en que cuando esto pasa
Código Delphi [-]
Consulta:='SELECT * FROM Proveedores.Db WHERE Proveedor IN("';
ahí que ponerle comillas dobles a cada valor y separarlos por comas, entonces quedó así y funciona.
Código Delphi [-]
i:integer;
Consulta, Filtro: String;
begin
Consulta:='SELECT * FROM Proveedores.Db WHERE Proveedor IN("';
Filtro:='';
For i:=0 to LBox_DatosImprimir.Count-1 do
 if i=LBox_DatosImprimir.Count-1 then
          begin
           Filtro:=Filtro+LBox_DatosImprimir.Items.Strings[i];
          end
        else
          begin
            Filtro:=Filtro+LBox_DatosImprimir.Items.Strings[i]+'","';
          end;
Consulta:=Consulta+Filtro+'")';
QConsulta.Close;
QConsulta.SQL.Clear;
QConsulta.SQL.Text:=Consulta;
QConsulta.Open;
FrmProveedorInforme.QuickRep1.DataSet:=QConsulta;
FrmProveedorInforme.QuickRep1.Preview;
Gracias por contestar, me han sido de muchisima ayuda
Suerte y continuen así.
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
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
Como seleccionar datos entre fechas ?? Jackpg C++ Builder 4 15-10-2008 17:06:12
Como extraer datos para imprimir factura Petolansa Impresión 3 07-11-2007 23:43:48
Componente para seleccionar HORA Greco Varios 7 27-09-2007 03:36:46
cmo hacer un formulario para seleccionar datos ercrizeporta Varios 4 14-07-2005 14:11:47
Seleccionar una linea de un dbgrid y mostrar todos los datos... hook Varios 1 15-04-2005 13:38:49


La franja horaria es GMT +2. Ahora son las 15:11:47.


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