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 04-05-2018
QuiqueSalamanca QuiqueSalamanca is offline
Miembro
 
Registrado: mar 2014
Posts: 35
Poder: 0
QuiqueSalamanca Va por buen camino
Migración QReport 3 a QReport 6

Buenos días a todos, hacía mucho que no pasaba por aquí.

Estoy migrando una aplicación desde Delphi 7 a Delphi 10.2.3 Tokyo.

Os pongo primero en antecendentes, conseguí migrar dicha aplicación a Delphi XE7, compilada perfectamente (con el QuickReport 5.05). Ahora la empresa para la que trabajo ha comprado la versión 10.2.3 y ando en la migración (que no debería dar ningún problema, excepto algunos componentes nuevos...).

Todos los componentes de terceros están instalados y migrados (los gratuitos y antiguos que vienen desde D7) correctamente (de hecho los he probado en aplicaciones independientes). El problema me surge a la hora de compilar, me lleva a la unit qrpcontrols y me da un error de incompatibilidad de tipos.

Lo raro es que la incompatibilidad de tipos que me da es "TField" y "TBlobField", aquí me descuadra todo porque un "TBlobField" hereda de "TField".

Este código me compila y entra en el IF correspondiente sin problemas:

Código Delphi [-]
var
   oField     : TField;
   oBlobField : TBlobField;
begin  
  oField     := TField.Create( Self );
  oBlobField := TBlobField.Create( Self );

  if oBlobField is TField then
     ShowMessage( 'Entra en TField' );

  if oField is TBlobField then
    ShowMessage( 'No debe entrar nunca.' );

  oField.Free;
  oBlobField.Free;
end;

Pues en la unit de qrpcontrols me da el error en esta parte:

Código Delphi [-]
procedure TQRPDBImage.LoadPicture;
var
  S: String;
begin
  if (DataField<>'') and (Dataset<>NIL) then
    begin
      try
        If Not (DataSet.FindField(DataField) is TBlobField) Then // --> En esta linea me da el error
          begin
            S:=ExpandFileName(Dataset.FindField(DataField).AsString);
            If ExtractFileExt(S)='' Then S:=ChangeFileExt(S,'.BMP');
            If FileExists(S) Then Picture.LoadFromFile(S);
          end
        Else
          Picture.Assign(Dataset.FindField(DataField));
      except
      end;
    end;
end;

Os pongo la clase TQRPDBImage:

Código Delphi [-]
TQRPDBImage = class(TQRDBImage)
  private
    FFixBottomPosition       : Boolean;
    FStretchHeightWithBand   : Boolean;
  protected
    procedure Print(OfsX, OfsY : integer); override;
  public
    procedure LoadPicture;
  published
    property FixBottomPosition: Boolean Read FFixBottomPosition
                                        Write FFixBottomPosition;
    property StretchHeightWithBand: Boolean Read FStretchHeightWithBand
                                            write FStretchHeightWithBand;
  end;

Hereda de esta que está en la unit QRCtrls:

Código Delphi [-]
  TQRDBImage = class(TQRPrintable)
  private
    FField : TField;
    FDataSet : TDataSet;
    FDataField : string;
    FPicture: TPicture;
    FStretch: boolean;
    FCenter: boolean;
    FPictureLoaded: boolean;
    procedure PictureChanged(Sender: TObject);
    procedure SetCenter(Value: Boolean);
    procedure SetDataField(const Value: string);
    procedure SetDataSet(Value: TDataSet);
    procedure SetPicture(Value: TPicture);
    procedure SetStretch(Value: Boolean);
  protected
    function GetPalette: HPALETTE; override;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure Paint; override;
    procedure Prepare; override;
    procedure Print(OfsX, OfsY : integer); override;
    procedure UnPrepare; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure GetExpandedHeight(var newheight : extended ); override;
    procedure GetFieldString( var DataStr : string); override;
    procedure LoadPicture;
    property Field: TField read FField;
    property Picture: TPicture read FPicture write SetPicture;
  published
    property Center: boolean read FCenter write SetCenter default True;
    property DataField: string read FDataField write SetDataField;
    property DataSet: TDataSet read FDataSet write SetDataSet;
    property Stretch: boolean read FStretch write SetStretch default False;
    property ActiveInPreview;
  end;

Estas funciones son idénticas y no han cambiado nada en QuickReport 5.05 y en XE7 funciona.

Me estoy volviendo un poco loco

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 04-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, ¿puedes copiar y pegar el mensaje del error?
¿Has mirado en la web de qreport por si tienen alguna información al respecto?
Saludos.
Responder Con Cita
  #3  
Antiguo 04-05-2018
QuiqueSalamanca QuiqueSalamanca is offline
Miembro
 
Registrado: mar 2014
Posts: 35
Poder: 0
QuiqueSalamanca Va por buen camino
Buenas Casimiro,

Por supuesto!

Código:
[dcc32 Error] qrpctrls.pas(555): E2010 Incompatible types: 'TField' and 'TBlobField'
Llevo días buscando en san google y en QuickReport y no encuentro nada.

Al final desinstalaré el IDE y volveré a instalar todo como siga así jeje.

Gracias!
Responder Con Cita
  #4  
Antiguo 04-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Será porque no encuentra datafield?
Al ser un string, lo mismo, al cambiar la versión de delphi, deberías usar ansistring, por el tema de unicode.
Responder Con Cita
  #5  
Antiguo 04-05-2018
QuiqueSalamanca QuiqueSalamanca is offline
Miembro
 
Registrado: mar 2014
Posts: 35
Poder: 0
QuiqueSalamanca Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Será porque no encuentra datafield?
Al ser un string, lo mismo, al cambiar la versión de delphi, deberías usar ansistring, por el tema de unicode.
Me debería dar el mismo problema en Delphi XE7 y con el QuickReport 5.05 (las funciones son idénticas) que fue donde migre la aplicación por primera vez y ahí funciona perfectamente.

Por eso decía que me está volviendo un poco loco.
Responder Con Cita
  #6  
Antiguo 04-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No recuerdo si el cambio de unicode fue en xe7, por eso lo comento.
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
qreport While . do shoulder Impresión 3 12-11-2012 01:11:07
Actualización QReport 3.5 a Qreport 4 o posteriores Jab Impresión 3 24-08-2010 12:33:20
QReport Iris04 Impresión 0 24-06-2005 14:27:01
QReport Letty Impresión 5 23-02-2004 22:43:27
QReport pablo Impresión 1 03-11-2003 05:07:19


La franja horaria es GMT +2. Ahora son las 08:24:42.


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