![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
![]() Hola Estimados.
Esta pregunta la hice hace un a±o atras y no logre resolver el problema. Por eso vuelvo a platear la inquietud. Estoy migrando mis aplicaciones desde Paradox a SQL. Tengo un reporte muy sencillo, con cuatro bandas de detalle. Una banda para los titulos, una banda para agrupar por una expresion, una banda para el detalle de productos, y una banda para los totales. Este reporte muestra los detalles de venta de un cliente, y subTotaliza por mes. Este reporte funciona perfecto con delphi y paradox. Pero ahora al trabajar con SQL-Firebird, al poner un valor en la "propiedad Expresion" (Expresion = Mes) de la segunda banda (Banda tipo: TQRGroup), me aparece un mensaje que dice: "Operation not allowed on a unidirectional dataset". Si quito el valor en la propiedad "expresion", este funciona correctamente, pero obiamente no subtotaliza. Con tablas paradox, el reporte funciona perfectamente. Pero la realizar el mismo con SQL-Firebird no funciona. El archivo que estoy tratando de imprimir esta ordenado por el campo: Mes. Esta es la consulta SQL. Funciona perfectamente. Lo que no funciona es el reporte subTotalizado.
Estoy usando componentes DbExpres. Alguna idea de que pasa? , y como solucionar esto? Gracias de antemano. Saludos. Jose Miguel B. |
#2
|
|||
|
|||
![]() Este es la estructura del reporte.
Gracias de antemano. Saludos. Jose Miguel B. |
#3
|
||||
|
||||
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
|||
|
|||
Hola Casimiro.
Agradesco tu respuesta. Pero estoy usando Componentes DbExpres, y el DataSet no tiene esa propiedad que me indicas. Saludos. Jose Miguel. |
#5
|
||||
|
||||
¿Y cuál estás usando exactamente?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#6
|
|||
|
|||
DBExpress no tiene esa propiedad, por eso te da el error, yo lo solucioné pasando el SQL resultante del DBExpress a un TClientDataSet y este es el que enlazo con el reporte.
Un saludo. |
#7
|
||||
|
||||
Es algo extraño, yo uso esos componentes (DbExpres) para informes con report manager y no tengo ese problema.
Es que además no tiene lógica, un informe no tiene que ir "hacia atrás y hacia adelante" en ningún momento.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#8
|
|||
|
|||
A mi me pasa solo con QuickReport, con Fastreport y otros no.
|
#9
|
|||
|
|||
![]() Hola Chenech.
Como pasas el SQL resultante del DBExpress a un TClientDataSet?.. me podrias indicar?.. Yo estoy usando este formato en mi programa.
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:
La consulta la hago de la siguiente forma:
y, luego el reporte. Que tiene un titulo, y solo 3 bandas para el detalle. Esta es la estructura basica de mi reporte:
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".
El Reporte lo simplifique para que se entienda mejor. Agradeceria si me pudieran ayudar. Gracias. Saludos. Jose Miguel B. |
#10
|
|||
|
|||
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. |
#11
|
|||
|
|||
![]() 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. |
#12
|
|||
|
|||
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 |
#13
|
|||
|
|||
![]() 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. |
#14
|
|||
|
|||
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; |
#15
|
|||
|
|||
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. |
![]() |
|
|
![]() |
||||
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 |
![]() |
|