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 23-09-2024
delphi50jmb delphi50jmb is offline
Miembro
 
Registrado: jul 2007
Posts: 39
Poder: 0
delphi50jmb Va por buen camino
Unhappy

Hola Chenech.

Como pasas el SQL resultante del DBExpress a un TClientDataSet?.. me podrias indicar?..

Yo estoy usando este formato en mi programa.

Código Delphi [-]
DataSource  --> ClienDataSet --> DataSetProvider --> SqlDataSet --> SqlConnecction

El DataSource en su propiedad: Dataset, apunta a: ClientDataSet.
El ClientDataSet en su propiedad: ProviderName, apunta a: DataSetProvider.
El DataSetProvider, en su propiedad: DataSet, apunta a: SQLDataSet.
El SQLDataSet, en su propiedad: SQLConnection, apunta a: SQLConnection.

SQL_String, es una variable global de tipo TSQLDataSet, que se inicializa de la siguiente manera:

Código Delphi [-]
   SQL_String := TSQLDataSet.Create(nil);
   SQL_String.SQLConnection := SQLConnection;

La consulta la hago de la siguiente forma:

Código Delphi [-]
procedure TFPreparaFile.TrasDetalleVentas;
begin
   sPar1Aux := Stuff(sFechaIni, SeparadorFecha, '.', 'A');

   Dt1.SQLDataSet.Close;

   SQL_Text := 'SELECT DetFact.Mes, DetFact.TipoDoc, DetFact.Rut, DetFact.CodAux, DetFact.Numero, ' +
                     'DetFact.FechaEmi, DetFact.Codigo, DetFact.Descrip, DetFact.Cantidad, ' +
                     'DetFact.TotalLinDe, DetFact.Vendedor, Vendedores.Nombre ' +
               'FROM DetFact '                                 +
               'LEFT JOIN Vendedores '                            +
               'ON Vendedores.Codigo=DetFact.Vendedor ' +
               'WHERE DetFact.FechaEmi>=' + QuotedStr( sPar1Aux ) + ' ' +
               'ORDER BY Mes ASC ' + ';';

   SQL_String := Dt1.SQLDataSet;
   SQL_String.Close;

   SQL_String.CommandText := SQL_Text;

   SQL_String.Open;
end;

y, luego el reporte. Que tiene un titulo, y solo 3 bandas para el detalle.

Esta es la estructura basica de mi reporte:

Código Delphi [-]
---------------------------------------------------------------------------------------
Fecha  TipoDoc Numero Codigo    Nombre                   Cantidad   Costo   Total
---------------------------------------------------------------------------------------
================================================
QRGDetMes - TQRGroup
Expression: Mes
FooterBand: QrSubTotalMes
LinkBand: QrBandDet
---------------------------------------------------------------------------------

=================================================================================
QrBandDet - TQrBand 
BandType: rbDetail
--------------------------------------------------------------------------------

================================================================================
QrSubTotalMes - TQrBand
BandType: rbGroupFooter
--------------------------------------------------------------------------------

Funciona bien hasta que tiene que hacer el corte para subtotalizar por mes, y se cae, con el mensaje: "Operation not allowed on a unidirectional dataset".

Código Delphi [-]
procedure TFQrDetDocVta.QRSubTotalMesBeforePrint(
  Sender: TQRCustomBand; var PrintBand: Boolean);          <------- Cuando entra aqui para subtotalizar por mes, se cae, y presenta el mensaje: "Operation not allowed on a unidirectional dataset".
begin
   QrTotal.Caption := FloatToStr(itTotal);
   itTotal := 0;
end;

El Reporte lo simplifique para que se entienda mejor.

Agradeceria si me pudieran ayudar.

Gracias.

Saludos.
Jose Miguel B.
Responder Con Cita
  #2  
Antiguo 23-09-2024
chenech chenech is offline
Miembro
 
Registrado: dic 2013
Posts: 107
Poder: 12
chenech Va por buen camino
Por la estructura que estas usando ya tienes enlazado el ClientDataSet al resultado del SQL_String.
Pon el ClientDataSet.Active = false antes de la llamada al SQL y ClientDataSet.Active = true después del open del SQL.
Ya tendrías los datos en el ClientDataSet que es el que tendrías que asociar a los campos del QuickReport.

Si quieres simplificar mucho, usa FastReport u otro ya que QuickReport no tiene soporte ni saldrán nuevas versiones y por otro lado usa FireDac que creo será mas el futuro de Embarcadero que DBExpress.
Responder Con Cita
  #3  
Antiguo 24-09-2024
delphi50jmb delphi50jmb is offline
Miembro
 
Registrado: jul 2007
Posts: 39
Poder: 0
delphi50jmb Va por buen camino
Red face

Hola Chenech.
Al cambiar el ClientDataSet.Active = true, me da el error: "Missing query, table or procedure name".

Creo que debe ser por la forma de enlazar los componentes. En Mi ClientDataSet, no tengo ninguna tabla ni parametros identificados. Solo conecto los componentes y cambio la siguientes propiedades:

El DataSource en su propiedad: Dataset, apunta a: ClientDataSet.
El ClientDataSet en su propiedad: ProviderName, apunta a: DataSetProvider.
El DataSetProvider, en su propiedad: DataSet, apunta a: SQLDataSet.
El SQLDataSet, en su propiedad: SQLConnection, apunta a: SQLConnection.

El resto tal como mencione mas arriba.

Alguna otra idea?

Saludos.
Jose Miguel B.
Responder Con Cita
  #4  
Antiguo 24-09-2024
chenech chenech is offline
Miembro
 
Registrado: dic 2013
Posts: 107
Poder: 12
chenech Va por buen camino
Yo tengo el SQLConnection mas un SQLDataSet, este a un Provider, luego un ClientDataSet al mismo Provider, y un DataSource al ClientDataSet.
Creo que es tal como lo defines que lo tienes tu, igual.
En esta página tienes algo de eso:
https://docwiki.embarcadero.com/RADS...me_Application
Responder Con Cita
  #5  
Antiguo 25-09-2024
delphi50jmb delphi50jmb is offline
Miembro
 
Registrado: jul 2007
Posts: 39
Poder: 0
delphi50jmb Va por buen camino
Unhappy

Mmm.. Entiendo.
Pero veo que el problema no esta en las conecciones de los datos. Sino que, existe al parecer, algun problema con el QuicReport..

Bueno. Seguire luchando para ver que consigo.

Gracias por todo.

Saludos.
Jose Miguel B.
Responder Con Cita
  #6  
Antiguo 26-09-2024
chenech chenech is offline
Miembro
 
Registrado: dic 2013
Posts: 107
Poder: 12
chenech Va por buen camino
Encontré este código que crea el clientdataset y lo enlaza con el query a través de un provider, luego enlazar a quickreport el clientdataset.
Prueba a ver si te sirve:
Código:
Var
  DtStPrvdr : TDataSetProvider;
  ClntDtSt : TClientDataSet;
Begin
  Try
    DtStPrvdr := TDataSetProvider.Create;
    DtStPrvdr.DataSet := SqlQuery1;
    ClntDtSt := TClientDataSet.Create;
    ClntDtSt.SetProvider(DtStPrvdr);
    // Ligue aqui o seu relatório ao ClntDtSt, ao ínves de ligar a SqlQuery1;
    // ExibirRelatorio; // 
  Finally
    FreeAndNil(DtStPrvdr);
    FreeAndNil(ClntDtst);
  End;
End;
Responder Con Cita
  #7  
Antiguo 27-09-2024
delphi50jmb delphi50jmb is offline
Miembro
 
Registrado: jul 2007
Posts: 39
Poder: 0
delphi50jmb Va por buen camino
Hola Chenech.

No habia visto tu respuesta, pero te comento que logre enlazar el "SQLDataset" con el "ClientDataset", y este ultimo al QReport.
Ahora el reporte funciona, y hace el corte por mes. Pero el problema que se esta dando es que solo presenta un solo registro, y lo replica en todo el informe. No presenta los demas productos corespondientes (Pero si avanza en la base de datos, porque si reconoce el cambio de mes, y produce el corte).

Tienes alguna idea de lo que esta pasando.


De todas maneras revisare tu codigo, y te comentare como me va.

Gracias por tu ayuda.
Saludos.
Jose Miguel B.
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
Reporte sin datos Nomad Impresión 3 25-09-2013 04:33:07
Reporte agrupando datos ingabraham Impresión 9 13-07-2011 15:20:35
reporte con varios datos ingabraham Impresión 0 14-10-2010 19:48:47
Mostrar datos en reporte natalinuyo Varios 3 22-03-2007 21:08:53
Actualizar datos de una base de datos en un reporte Marymania Impresión 4 27-11-2006 19:47:32


La franja horaria es GMT +2. Ahora son las 19:24:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi