Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Conectar Crystal Report (TCrpe) con un Ttable o TQuery (https://www.clubdelphi.com/foros/showthread.php?t=2162)

Jose_Pérez 11-07-2003 14:36:26

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;
¿Alguien podría mostrarme un ejemplo de como se hace esto?.

Saludos y gracias.

andres1569 11-07-2003 15:48:52

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;

Jose_Pérez 14-07-2003 10:55:04

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.

andres1569 14-07-2003 14:00:23

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;


Jose_Pérez 14-07-2003 15:08:37

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]

Jose_Pérez 14-07-2003 15:14:16

...¡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.

andres1569 14-07-2003 16:31:02

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;


Jose_Pérez 15-07-2003 09:37:40

Ok. Gracias.

dmagui 10-11-2005 16:39:44

Es posible que esto sea una solucion a la peticion inicial, ofrecida por la ayuda de delphi, cortesia de un gran forista (Neftali)

Código Delphi [-]
 Crpe1.ReportName := 'c:\company.rpt'; 
 
CrpeDS1.DataSet := Table1; {the field types must be in the correct order}
 
Crpe1.Tables[0].DataPointer := CrpeDS1.DataPointer;
 
Crpe1.Show;

Larra 07-09-2006 01:35:58

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


La franja horaria es GMT +2. Ahora son las 22:44:20.

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