FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Conectar Crystal Report (TCrpe) con un Ttable o TQuery
Hola:
El componente TCrpe (para conectar Delphi con Crystal Report) tiene la propiedad Table[x], que a su vez contiene la variable de DataPointer (de tipo Pointer) para conectar a una fuente de datos TTable o TQuery, o similar. Al intentar hacer la conección me da problemas. Por ejemplo: Código:
Crpe.Tables[0].DataPointer:=@Table1; Saludos y gracias. |
#2
|
|||
|
|||
Hola:
Aunque el componente TCrpe que tengo es de una versión anterior y no tiene ese propiedad que comentas (DataPointer), es posible que ahí debas pasar el Handle de la tabla o Query en cuestión, que actúa como un cursor del BDE, prueba esto: Crpe.Tables[0].DataPointer := Table1.Handle; ó Crpe.Tables[0].DataPointer := Table1.DBHandle;
__________________
Guía de Estilo |
#3
|
|||
|
|||
Hola Andrés:
La versión del componente es la 7 y estoy utilizando Delphi 5. Por cierto, tu solución no funciona. Gracias de todos modos. Un abrazo. |
#4
|
|||
|
|||
Hola:
La propiedad DataPointer no la conozco (tengo el componente TCrpe para Delphi 4), parece ser, por lo que comentas, que debe apuntar a un DataSet de tu aplicación para que Crystal Reports tome de ahí los datos. Si es así, es un avance importante en la filosofía de CR, al permitir tomar datos directamente desde Delphi. De todas formas, si la finalidad es esa, me extraña que se llamara DataPointer y no DataSource. ¿Es esto así? Si no es eso y lo que quieres es acceder a las tablas físicas, como venía haciendo Crystal Reports anteriormente (te hablo de la versión 6.0), la forma en que tengo esto implementado, para indicarle la ruta donde están las tablas es así: Código:
procedure TDATAIMP.InicializaInformeCrystal (NomInforme, NomClave: String; Preview: Boolean); var DirDatos : String; begin With CReport1 do begin ReportName := DirInformes + '\' + NomInforme; DirDatos := GetPathFromAlias(':DATOS_ESCUELA:'); Connect.Password := NomClave; DiscardSavedData := TRUE; SendDiscardSavedData; If Preview then Output := toWindow Else Output := toPrinter; Tables.Retrieve; Tables[0].Path := DirDatos; Tables.Path := DirDatos; Tables.Propagate := TRUE; With ParamFields do begin ShowDialog := FALSE; Retrieve; end; PrintOptions.Copies := 1; end; end;
__________________
Guía de Estilo |
#5
|
|||
|
|||
De nuevo gracias Andrés.
Lo cierto es que habíamos comprado el Crystal Report hace tiempo y lo tenía un poco aparcado. Estoy empezando a meterme con él y aún tengo algunas dudillas, aunque a base de mirar tutoriales y buscar en internet parece que me va a entrando. Mi intención no era otra que filtrar los datos, y por eso estaba intentando conectar el componente con el TQuery. Al final he decidido no complicarme la vida y voy a utilizar el lenguaje de fórmulas nativo del Crystal Report. No parece que sea muy complicado y, además, el propio Crystal trae una editor de fórmulas muy sencillo. Un ejemplo para quien pueda interesas: Código:
With Crpe Do Begin Selection.Formula.Clear; Selection.Formula.Add('{Cliente.Codigo}=2'); Selection.Replace:=True; Execute; End; GetPathFromAlias[list] |
#6
|
|||
|
|||
...¡uy, he colgado el mensaje antes de tiempo!.
Andrés, me faltaba preguntarte de donde has sacado la función GetPathFromAlias. He consultado la ayuda en línea de Delphi, pero no aparece. ¡Cuantas veces he hechado de menos una función como esa!. Gracias por todo. |
#7
|
|||
|
|||
Hola de nuevo:
Esa función, GetPathFromAlias, es un método del componente TCrpe. Esa información la puedes obtener también mediante esta función que hace uso del objeto Session: Código:
function GetAliasPath (Alias: string) : String; var AList : TStringList; begin AList := TStringList.Create; try try Session.GetAliasParams (Alias, AList); result := AList.Values['PATH']; except result := ''; raise; end; finally AList.Free; end; end;
__________________
Guía de Estilo |
#8
|
|||
|
|||
Ok. Gracias.
|
#9
|
||||
|
||||
Es posible que esto sea una solucion a la peticion inicial, ofrecida por la ayuda de delphi, cortesia de un gran forista (Neftali)
__________________
El espiritu humano no se acaba cuando es derrotado se termina cuando se rinde. |
#10
|
|||
|
|||
Hola:
he tenido el mismo problema con el crpeDS1, no me trabaja da un error de paso de parametros, la solucion la obtuvo un colega anteriormente aunque en su caso no le servia por usar otro componente que no es ADO. en fin, solucion a pasar una tabla o query para el reporte, ver que tengan las mismas columnas y el mismo orden. ADOQuery1.Open; crpe1.Tables[0].DataPointer := @(ADOQuery1.recordset); crpe1.Show; espero que te ayude |
|
|
|