Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-10-2011
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
ReportManager, cambiar consulta en ejecución

Que tal foro,
no pienso en que tan posible sea pero si de lo importante que pudiera conocer al respecto.
La idea de cambiar la consulta que creamos en el reporte me surgió al tener la opción de generar un listado desde dos posibles parámetros, ambos accediendo a la misma tabla y obteniendo los mismos resultados, lo que varia es el like del query.

¿Hasta dónde es posible esto?



Saludos!
__________________
Web
Responder Con Cita
  #2  
Antiguo 14-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo tengo algunos informes al que les paso el sql que voy a necesitar porque los campos que se muestran es igual.

Esto es un ejemplo rescatado de algún sitio:

Código Delphi [-]
sql := 'Select field1, field2 from tableA where fieldX = 1 order by cli.NOMECLIENTE, rec.CODCLIENTE, rec.DATAVENCIMENTO, rec.EMISSAO';
VCLReport.FileName := directorioinformes + 'RelContasReceber.rep';
VCLReport.Report.DatabaseInfo.Items[0].SQLConnection := dm.sqlsisAdimin;  
VCLReport.Report.DataInfo.Items[0].SQL:= sql;     //  <<<------------- aquí se le asigna un select
VCLReport.Execute;

Y esto es de mi código:
Código Delphi [-]
// cParametro lleva el nombre del dataset (conjunto de datos) del reportmanager al que le vamos a asignar el select.
// cValor lleva el SQL
RMvcl1.Report.DataInfo.ItemByName(cParametro).SQL := cValor;

Como ves en los ejemplos, puedes indicarlo por su posición o por su nombre: items[0].sql o itembyname('conjuntodedatos').sql


Creo que es lo que estás buscando.

Última edición por Casimiro Notevi fecha: 14-10-2011 a las 17:35:57.
Responder Con Cita
  #3  
Antiguo 14-10-2011
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Hola Casimiro, gracias por responder.
Había estado consultando en internet y encontré las "cadenas de sustitución", que son un tipo de parámetro que permiten alterar pequeñas partes de la consulta dentro del reporte, más información aquí: http://reportman.sourceforge.net/doc/repparams.html

No sé si sea lo mismo que me propones, puesto que los ejemplos no muestran como debería ir la consulta dentro del reporte, de todas formas voy a revisar bien el ejemplo. Gracias


Saludos!
__________________
Web
Responder Con Cita
  #4  
Antiguo 14-10-2011
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Hola, para entender mejor lo que quiero lograr estas serían las consultas:

Código SQL [-]
SELECT * FROM CLIENTE WHERE NOMBRE LIKE PARAMETRO

y

Código SQL [-]
SELECT * FROM CLIENTE WHERE ID LIKE PARAMETRO



Saludos!
__________________
Web
Responder Con Cita
  #5  
Antiguo 14-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues lo que te he contestado es lo que necesitas
Responder Con Cita
  #6  
Antiguo 14-10-2011
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pues lo que te he contestado es lo que necesitas
Asi es Casimiro, es válido, lo único que no había mencionado es que llamo al reporte usando las funciones de la dll reportman.ocx, algo como decir:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var rept: OleVariant;
begin
   rept := CreateOleObject('ReportMan.ReportManX');
   rept.Preview := true;
   rept.ShowProgress := false;
   rept.ShowPrintDialog:= false;
   rept.Title := 'Informe de Prueba';
   rept.Filename := 'C:\Archivos de programa\Report Manager\sample4.rep';
   rept.execute;
end;

Y de esta forma no puedo llamar las propiedades que mencionas.


Saludos!
__________________
Web
Responder Con Cita
  #7  
Antiguo 14-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues ahí no tengo ni idea, nunca lo he usado de esa manera.
Responder Con Cita
  #8  
Antiguo 15-10-2011
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Hola Casimiro, he logrado solucionarlo con el parámetro de sustitución, la verdad estaba confundido al principio de como usarlo, pero fué simple.
Ejemplo, yo tengo la siguiente consulta: SELECT * FROM CLIENTE WHERE NOMBRE LIKE :PARAMETRO, el parámetro de este tipo solo reemplaza la cadena o frase que le indique, en este caso solo le indique cambiar "NOMBRE" por "ID" y en Delphi sería algo así:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var rept: OleVariant;
begin
  rept := CreateOleObject('ReportMan.ReportManX');
  rept.Preview := true;
  rept.ShowProgress := false;
  rept.ShowPrintDialog:= false;
  rept.Title := 'Informe de Prueba';
  rept.Filename := 'C:\MiReporte.rep';
  rept.Report.Params.Items[0].Value := 'ID';
  rept.SetParamValue('PARAMETRO',123); // 123 seria el ID del cliente
  rept.execute;
end;

Y funciona perfecto... ahora solo me surgió un pequeño detalle que me dejó volando , yo declaré el parámetro para el caso de buscar por nombre como cadena, pero no sé cómo pasarle el valor, ya que si hago algo como:

rept.SetParamValue('PARAMETRO','Fulanito');

no me retorna los datos, ¿cómo debo pasarle ese valor al like de la consulta?



Saludos!
__________________
Web
Responder Con Cita
  #9  
Antiguo 15-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues entonces hazlo como te he indicado antes, en lugar de cambiar parámetros, pásale la consulta completa.
Código Delphi [-]
rept.Report.DataInfo.Items[0].SQL:= 'select loquesea from latabla where campotal like %pepe';

y en el otro caso
Código Delphi [-]
rept.Report.DataInfo.Items[0].SQL:= 'select loquesea from latabla where campotal=123';

El datainfo.items[0] es el conjunto de datos, si tienes más de uno, pues el número que le corresponda, aunque también puedes hacerlo por su nombre:

Código Delphi [-]
rept.Report.DataInfo.Itembyname('CLIENTES').SQL:= 'select loquesea from latabla where campotal=123';
Responder Con Cita
  #10  
Antiguo 15-10-2011
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Solucionado Casimiro, solo creé otro campo de este tipo para reemplazar en la consulta el valor del like.
Gracias por tus consejos


Saludos!
__________________
Web
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
problema con reportmanager e indy10 gmontes Impresión 4 09-05-2011 18:38:44
2 subinformes en ReportManager dandia28 Impresión 3 23-06-2010 01:36:35
Abrir Maximizado el ReportManager farrop Impresión 0 01-02-2008 14:03:15
cambiar el gdb en red con tcp ip en ejecucion rmnart Firebird e Interbase 1 31-07-2003 11:12:48
Cambiar SelectSQL en ejecución Tomás Conexión con bases de datos 5 18-05-2003 01:04:45


La franja horaria es GMT +2. Ahora son las 12:06:31.


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