Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-11-2016
giko giko is offline
Miembro
NULL
 
Registrado: dic 2013
Posts: 17
Poder: 0
giko Va por buen camino
Migrar Delphi 2007 a 10.1 Berlin

Hola a todos

No tengo mucha experiencia en Delphi, pero me han encargado migrar una aplicación que está en Delphi 2007 a la última versión 10.1 Berlin. ¿Alguien podría decirme si existe alguna utilidad o herramienta que facilite dicha migración? Por el momento he intentado realizarla de manera artesanal, pero me encuentro con un montón de errores, algunos de ellos no sé muy bien por qué se producen.

Muchas gracias por adelantado por vuestra ayuda.

Un saludo
Responder Con Cita
  #2  
Antiguo 07-11-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No debería dar ningún error, si tienes instalado los componentes que se utilizan.
Responder Con Cita
  #3  
Antiguo 07-11-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
No debería dar ningún error, si tienes instalado los componentes que se utilizan.
Coincido con Casimiro.
Lo primero es que instales todos los componentes externos que tienes en la versión 2007 en la nueva.

A partir de ahí es posible que sí salga algún error, pero hay que tratarlos de forma específica.
Por ejemplo, es posible que algún componente haya cambiado en sus propiedades o métodos (me refiero a los externos).
Es posible que alguna función de Delphi haya quedado obsoleta, deberás cambiarlas por las nuevas.

Cita:
Empezado por giko Ver Mensaje
¿Alguien podría decirme si existe alguna utilidad o herramienta que facilite dicha migración?
Por el momento he intentado realizarla de manera artesanal, pero me encuentro con un montón de errores, algunos de ellos no sé muy bien por qué se producen.
El propio delphi hace el trabajo que necesitas (o todo el que se puede hacer). No necesitas ninguna utilidad externa.
Deberías ir colocando el texto de los errores y te podemos indicar a qué se refieren o cómo solucionarlos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 07-11-2016
giko giko is offline
Miembro
NULL
 
Registrado: dic 2013
Posts: 17
Poder: 0
giko Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Coincido con Casimiro.
Lo primero es que instales todos los componentes externos que tienes en la versión 2007 en la nueva.

A partir de ahí es posible que sí salga algún error, pero hay que tratarlos de forma específica.
Por ejemplo, es posible que algún componente haya cambiado en sus propiedades o métodos (me refiero a los externos).
Es posible que alguna función de Delphi haya quedado obsoleta, deberás cambiarlas por las nuevas.



El propio delphi hace el trabajo que necesitas (o todo el que se puede hacer). No necesitas ninguna utilidad externa.
Deberías ir colocando el texto de los errores y te podemos indicar a qué se refieren o cómo solucionarlos.

Muchas gracias por vuestras respuestas.
En principio tengo instalado lo mismo que tenía en la aplicación de 2007, Delphi y Report Builder. De hecho, el proyecto que estoy tratando de compilar contiene unos componentes desarrollados internamente, que los utiliza la aplicación que tendré que migrar.

Adjunto un detalle de los errores que tengo:

c:\program files (x86)\embarcadero\studio\18.0\bin\dcc32.exe -$J+ -$D1 --no-config -M -Q -Z -TX.bpl -AGenerics.Collections=System.Generics.Collections;Generics.Defaults=System.Generics.Defaults;WinType s=Winapi.Windows;WinProcs=Winapi.Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE -I"c:\program files (x86)\embarcadero\studio\18.0\lib\Win32\release";C:\Users\Cibernos\Documents\Embarcadero\Studio\18.0 \Imports;"c:\program files (x86)\embarcadero\studio\18.0\Imports";C:\Users\Public\Documents\Embarcadero\Studio\18.0\Dcp;"c:\pro gram files (x86)\embarcadero\studio\18.0\include";"c:\program files (x86)\embarcadero\studio\18.0\RBuilder\Lib\Win32" -LEC:\Users\Public\Documents\Embarcadero\Studio\18.0\Bpl -LNC:\Users\Public\Documents\Embarcadero\Studio\18.0\Dcp -NSData.Win;Web.Win;Soap.Win;Xml.Win;Bde;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;D ata;Datasnap;Web;Soap;Winapi;Datasnap.Win;System.Win; -O"c:\program files (x86)\embarcadero\studio\18.0\lib\Win32\release";C:\Users\Cibernos\Documents\Embarcadero\Studio\18.0 \Imports;"c:\program files (x86)\embarcadero\studio\18.0\Imports";C:\Users\Public\Documents\Embarcadero\Studio\18.0\Dcp;"c:\pro gram files (x86)\embarcadero\studio\18.0\include";"c:\program files (x86)\embarcadero\studio\18.0\RBuilder\Lib\Win32" -R"c:\program files (x86)\embarcadero\studio\18.0\lib\Win32\release";C:\Users\Cibernos\Documents\Embarcadero\Studio\18.0 \Imports;"c:\program files (x86)\embarcadero\studio\18.0\Imports";C:\Users\Public\Documents\Embarcadero\Studio\18.0\Dcp;"c:\pro gram files (x86)\embarcadero\studio\18.0\include";"c:\program files (x86)\embarcadero\studio\18.0\RBuilder\Lib\Win32" -U"c:\program files (x86)\embarcadero\studio\18.0\lib\Win32\release";C:\Users\Cibernos\Documents\Embarcadero\Studio\18.0 \Imports;"c:\program files (x86)\embarcadero\studio\18.0\Imports";C:\Users\Public\Documents\Embarcadero\Studio\18.0\Dcp;"c:\pro gram files (x86)\embarcadero\studio\18.0\include";"c:\program files (x86)\embarcadero\studio\18.0\RBuilder\Lib\Win32" -K00400000 --description:"Citi Editors" -NBC:\Users\Public\Documents\Embarcadero\Studio\18.0\Dcp -NHC:\Users\Public\Documents\Embarcadero\Studio\18.0\hpp\Win32 CitiEditors.dpk
...\CitiEditors\CitiPatterns.pas(8,29): warning W1050: W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.
...\CitiEditors\CitiPatterns.pas(109,57): warning W1050: W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.
...\CitiEditors\CitiPatterns.pas(193,26): error E2010: E2010 Incompatible types: 'AnsiChar' and 'Char'
...\CitiEditors\CitiPatterns.pas(218,19): error E2003: E2003 Undeclared identifier: 'DateSeparator'
...\CitiEditors\CitiPatterns.pas(218,64): error E2010: E2010 Incompatible types: 'string' and 'Integer'
...\CitiEditors\CitiPatterns.pas(232,23): error E2003: E2003 Undeclared identifier: 'TimeSeparator'
...\CitiEditors\CitiPatterns.pas(232,37): warning W1058: W1058 Implicit string cast with potential data loss from 'string' to 'ShortString'
...\CitiEditors\CitiPatterns.pas(235,30): warning W1058: W1058 Implicit string cast with potential data loss from 'string' to 'ShortString'
...\CitiEditors\CitiPatterns.pas(238,36): warning W1058: W1058 Implicit string cast with potential data loss from 'string' to 'ShortString'
...\CitiEditors\CitiPatterns.pas(261,11): error E2003: E2003 Undeclared identifier: 'DecimalSeparator'
...\CitiEditors\CitiPatterns.pas(319,42): warning W1050: W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.
...\CitiEditors\CitiPatterns.pas(381,48): warning W1050: W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.
...\CitiEditors\CitiPatterns.pas(401,30): error E2010: E2010 Incompatible types: 'AnsiChar' and 'Char'
...\CitiEditors\CitiPatterns.pas(403,29): error E2010: E2010 Incompatible types: 'AnsiChar' and 'Char'
...\CitiEditors\CitiEdit.pas(7,35): error F2063: F2063 Could not compile used unit 'CitiPatterns.pas'
Responder Con Cita
  #5  
Antiguo 07-11-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Parece que la primera unit que te está dando problemas es esta: ...\CitiEditors\CitiPatterns.pas

¿A qué componente o paquete pertenece? No es estandard de Delphi.
¿Los has instalado correctamente?
¿Al instalarlos no te han dado problemas?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 07-11-2016
giko giko is offline
Miembro
NULL
 
Registrado: dic 2013
Posts: 17
Poder: 0
giko Va por buen camino
Hola

Efectivamente, no es un paquete standard. El módulo CitiPatterns.pas es el que estoy intentando compilar (el proyecto contiene otros módulos, pero parece que sólo éste genera errores y advertencias). Una vez compilado, debo proceder a instalarlo. Adjunto el código, por si aporta algo de información.

Muchas gracias.
Código Delphi [-]
unit CitiPatterns;

interface

uses Windows, SysUtils;

type
  TCitiCharSet = set of Char;
  TCitiValidateState = (vsOk, vsIncomplete, vsError);
  TCitiDateKind = (dkDate, dkDateTime, dkTime);

  EPatternException = class(Exception);

  TCitiPattern = class
  private
    FExpression: string;
    function GetCharSet: TCitiCharSet;
    procedure SetExpression(const Value: string);
  protected
    FPattern, FControl: string;
    FPatternPrefix, FControlPrefix: string;
    FCharSet, FCharSetPrefix: TCitiCharSet;
    procedure SetRegularExpr(RE: string);
  public
    // Construction
    constructor Create;
    // Pattern matching
    function Match(const Data: string; var Tail: string; var Jump: Boolean): TCitiValidateState;
    // Pattern configuration
    procedure SetDateTimePattern(AKind: TCitiDateKind; ATwoDigitYear, AReqSeconds: Boolean);
    procedure SetFloatPattern(ADigits, ADecimals: Integer; Neg, Dot: Boolean);
    procedure SetIntegerPattern(AMin, AMax: Integer);
    procedure SetPrefix(const PatPref, CtlPref: string; const CSet: TCitiCharSet);
  public
    property CharSet: TCitiCharSet read GetCharSet;
    property Expression: string read FExpression write SetExpression;
  end;

procedure PatternException(const Msg: string);

resourcestring
  SInvalidPattern = 'Invalid pattern';

implementation

var
  AlphaChars: TCitiCharSet = [];
  AlphaNums: TCitiCharSet = [];

// Exceptions

procedure PatternException(const Msg: string);
begin
  raise EPatternException.Create(Msg);
end;

// TCitiPattern: construction

constructor TCitiPattern.Create;
begin
  inherited Create;
  FCharSet := [#0..#255];
end;

// TCitiPattern: access methods for properties

function TCitiPattern.GetCharSet: TCitiCharSet;
begin
  Result := FCharSet + FCharSetPrefix;
end;

procedure TCitiPattern.SetExpression(const Value: string);
begin
  if Value <> FExpression then
  begin
    SetRegularExpr(Value);
    FExpression := Value;
  end;
end;

// TCitiPattern: parsing expressions into pattern programs

function ProcessGroups(const S: string): string;
var
  Stack: array [1..100] of string;
  Temp: string;
  Top: Integer;
  I, J, Times: Integer;
begin
  Top := 1;
  Stack[1] := '';
  I := 1;
  while I <= Length(S) do
    case S[i] of
      '[':
        begin
          Inc(Top);
          Stack[Top] := '[';
          Inc(I);
        end;
      ']':
        begin
          if Top = 1 then
            PatternException(SInvalidPattern);
          Temp := Stack[Top] + ']';
          Dec(Top);
          Inc(I);
          Times := 0;
          while (I <= Length(S)) and (S[i] in ['0'..'9']) do
          begin
            Times := Times * 10 + Ord(S[i]) - Ord('0');
            Inc(I);
          end;
          if Times = 0 then Times := 1;
          for J := 1 to Times do
            //AppendStr(Stack[Top], Temp);
            Stack[Top] := Stack[Top] + Temp
        end;
    else
      //AppendStr(Stack[Top], S[i]);
      Stack[Top] := Stack[Top] + S[i];
      Inc(I);
    end;
  if Top <> 1 then
    PatternException(SInvalidPattern);
  Result := Stack[1];
end;

procedure TCitiPattern.SetRegularExpr(RE: string);
var
  I, Top, J: Integer;
  P, C: string;
  Ch: Char;
  Stack, Patch: array [1..100] of Integer;
  CS: TCitiCharSet;
begin
  P := '';
  C := '';
  CS := [];
  if RE <> '' then
  begin
    if Pos('[', RE) <> 0 then
      RE := ProcessGroups(RE);
    Top := 0;
    I := 1;
    while I <= Length(RE) do
    begin
      Ch := RE[i];
      case Ch of
        '[':
          begin
            Inc(Top);
            Stack[Top] := Length(P) + 1;
            Patch[Top] := 0;
          end;
        '|':
          begin
            if Top = 0 then
              PatternException(SInvalidPattern);
            //AppendStr(P, #1);
            P := P + #1;
            //AppendStr(C, #0);
            C := C + #0;
            C[Stack[Top]] := Char(Length(P) + 1 - Stack[Top]);
            Stack[Top] := Length(P) + 1;
            C[Length(C)] := Chr(Patch[Top]);
            Patch[Top] := Length(C);
          end;
        ']':
          begin
            if Top = 0 then
              PatternException(SInvalidPattern);
            C[Stack[Top]] := Chr(Length(P) + 1 - Stack[Top]);
            while Patch[Top] <> 0 do
            begin
              J := Patch[Top];
              Patch[Top] := Ord(C[J]);
              C[J] := Chr(Length(C) + 1 - J);
            end;
            Dec(Top);
          end;
      else
        //AppendStr(P, Ch);
        P := P + Ch;
        //AppendStr(C, #0);
        C := C + #0;
        case Ch of
          '_': CS := [#0..#255];
          '#': CS := CS + ['0'..'9'];
          '@': CS := CS + AlphaChars;
          '%': CS := CS + AlphaNums;
        else
          Include(CS, Ch);
        end;
      end;
      Inc(I);
    end;
    //AppendStr(P, #0);
    P := P + #0;
    //AppendStr(C, #0);
    C := C + #0;
  end;
  FPattern := P;
  FControl := C;
  FCharSet := CS;
end;

// TCitiPattern: special patterns

procedure TCitiPattern.SetDateTimePattern(AKind: TCitiDateKind; ATwoDigitYear,
  AReqSeconds: Boolean);
var
  S: string;
begin
  S := '';
  if AKind <= dkDateTime then // AKind is dkDate, dkDateTime, dkTime
  begin
    S := '#[#]' + DateSeparator + '#[#]' + DateSeparator + '##';
    if ATwoDigitYear then
      //AppendStr(S, '[##]')
      S := S + '[##]'
    else
      //AppendStr(S, '##');
      S := S + '##';
  end;
  if AKind = dkDateTime then
    //AppendStr(S, ' [ ]');
    S := S + ' [ ]';
  if AKind >= dkDateTime then
  begin
    //AppendStr(S, '#[#]' + TimeSeparator + '#[#]');
    S := S + '#[#]' + TimeSeparator + '#[#]';
    if AReqSeconds then
      //AppendStr(S, TimeSeparator + '#[#]')
      S := S + TimeSeparator + '#[#]'
    else
      //AppendStr(S, '[' + TimeSeparator + '#[#]]');
      S := S + '[' + TimeSeparator + '#[#]]';
  end;
  SetRegularExpr(S);
end;

procedure TCitiPattern.SetFloatPattern(ADigits, ADecimals: Integer; Neg,
  Dot: Boolean);
var
  S, S1: string;
begin
  if Neg then
    S := '[-]#'
  else
    S := '#';
  if ADigits > 1 then
  begin
    //AppendStr(S, '[#]');
    S := S + '[#]';
    //AppendStr(S, IntToStr(ADigits - 1));
    S := S + IntToStr(ADigits - 1);
  end;
  if ADecimals > 0 then
  begin
    S1 := DecimalSeparator;
    repeat
      if Dot then
        //AppendStr(S1, '#')
        S1 := S1 + '#'
      else
        //AppendStr(S1, '[#]');
        S1 := S1 + '[#]';
      Dot := False;
      Dec(ADecimals);
    until ADecimals = 0;
    if Dot then
      //AppendStr(S, S1)
      S := S + S1
    else
      //AppendStr(S, '[' + S1 + ']');
      S := S + '[' + S1 + ']';
  end;
  SetRegularExpr(S);
end;

procedure TCitiPattern.SetIntegerPattern(AMin, AMax: Integer);
var
  S: string;
begin
  if AMin >= AMax then
    AMin := -MaxLongInt;
  if AMin < 0 then
    S := '[-]#'
  else
    S := '#';
  AMin := Abs(AMin);
  AMax := Abs(AMax);
  if AMin > AMax then AMax := AMin;
  while AMax >= 10 do
  begin
    AMax := AMax div 10;
    //AppendStr(S, '[#]');
    S := S + '[#]';
  end;
  SetRegularExpr(S);
end;

// TCitiPattern: prefixed expression for filter patterns

procedure TCitiPattern.SetPrefix(const PatPref, CtlPref: string;
  const CSet: TCitiCharSet);
begin
  FPatternPrefix := PatPref;
  FControlPrefix := CtlPref;
  FCharSetPrefix := CSet;
end;

// TCitiPattern: the match engine

function MatchChar(PatChar, DataChar: Char): Boolean;
begin
  case PatChar of
    '#': Result := DataChar in ['0'..'9'];
    '_': Result := True;
    '@': Result := IsCharAlpha(DataChar);
    '%': Result := IsCharAlphaNumeric(DataChar);
  else
    Result := (PatChar = DataChar);
  end;
end;

function TCitiPattern.Match(const Data: string; var Tail: string;
  var Jump: Boolean): TCitiValidateState;
var
  I, J: Integer;
  Pat, Con: string;
begin
  Jump := False;
  if FPattern = '' then
  begin
    Result := vsOk;
    Exit;
  end;
  Pat := FPatternPrefix + FPattern;
  Con := FControlPrefix + FControl;
  ASSERT(Length(Pat) = Length(Con));
  Tail := '';
  I := 1;
  J := 1;
  while J <= Length(Data) do  // For each character in Data
    if Pat[i] = #0 then       // Halt pattern matching
    begin
      Result := vsError;      // Data string is longer than pattern
      Exit;
    end
    else if MatchChar(Pat[i], Data[J]) then
    begin
      Inc(I);
      Inc(J);
    end
    else if Con[i] = #0 then
    begin                     // Data mismatch; no jump available
      Result := vsError;
      Exit;
    end
    else                      // Jump to alternative
      Inc(I, ShortInt(Con[i]));
  if Pat[i] = #1 then         // Skip vertical bar (|)
    Inc(I, ShortInt(Con[i]));
  J := I;
  while Con[i] <> #0 do       // Skip optional strings
    Inc(I, ShortInt(Con[i]));
  if Pat[i] = #0 then
  begin
    Result := vsOk;
    Jump := I = J;            // No optional strings at pattern's end
  end
  else
  begin
    Result := vsIncomplete;   // Data string is shorter than pattern
    repeat
      if Pat[J] = #1 then
        Inc(J, ShortInt(Con[J]))
      else if (Con[J] = #0) and
        not (Pat[J] in [#0, '#', '@', '%', '_']) then
      begin
        //AppendStr(Tail, Pat[J]);
        Tail := Tail + Pat[J];
        Inc(J);
      end
      else
        Break;
    until False;
  end;
end;

// Initialization & finalization

var
  Ch: Char;
initialization
  for Ch := #32 to #255 do
  begin
    if IsCharAlpha(Ch) then
      Include(AlphaChars, Ch);
    if IsCharAlphaNumeric(Ch) then
      Include(AlphaNums, Ch);
  end;
end.

Última edición por Casimiro Notevi fecha: 07-11-2016 a las 10:51:56.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Migrar delphi 7 a Code Gear 2007 alejobog Varios 6 03-10-2015 10:50:46
Porque deberia migrar desde Borland Delphi 7 a Codegear RAD Studio Dephi 2007 rmendoza83 Varios 19 11-03-2009 16:25:39
Migrar aplicación escritrio Delphi 2006 a RAD STUDIO 2007 SMTZ .NET 7 12-03-2008 16:11:36
Ayuda para migrar a Delphi 2007 rolandoj Varios 18 07-08-2007 05:52:19
Migrar de Delphi 7 a Delphi 2007 Arturo_ Varios 2 13-07-2007 10:36:12


La franja horaria es GMT +2. Ahora son las 14:33:22.


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