FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Migrar de Delphi 3 a Delphi 5
Tengo una aplicación programada en Delphi 3 la cual utiliza Paradox y archivos del tipo .dat, el problema se presenta con estos últimos archivos ya que al compilar el programa y ejecutarlo me indica el error "Read beyond en of file". Realmente me desconcierta porque razón en delphi 3 el programa funciona bien y en delphi 5 no, evidentemente existe una incompatibilidad entre estas versiones, que espero pueda solucionarse.
Si alguien tuvo un inconveniente similar, les agradezco me hagan saber como lo solucionaron. Última edición por inetplus fecha: 14-02-2004 a las 21:55:55. |
#2
|
||||
|
||||
Hola inetplus.
Te recomiendo leer la guía de estilo de los foros antes de plantear tus preguntas. En esta ocasión no has incluido ni un solo trozo de código, ni la explicación de como accedes a estos archivos .dat (que podrian ser archivos de registros, streams, etc, etc)... quizas archivos de una base de datos o que manejas con componentes de un tercero??? realmente así es imposible ayudarte. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
|||
|
|||
Disculpas .... aqui tienes el codigo donde se genera el problema
Function VerificarFecha:Boolean; {Verifica que la fecha no sea anterior a la fecha de la ultima factura cargada} var Fechave:string[10]; Begin With FVenta do Begin AssignFile(ArV,Caminodatos + '\' + UltimoArchivo(TipoFactura(LTipo.Caption[1]))); {$I-} Reset(ArV); --> Aqui reconoce que el archivo tiene datos {$I+} If IoResult <> 0 Then FechaVe:=DateTostr(Date) Else If Filesize(ArV) > 0 Then Begin --> lee el registro seek(ArV,Filesize(ArV)-1); {Se posiciona al final del archivo de ventas} Read(ArV,RV); --> No carga ningún dato fechaVe:=RV.Fecha; end Else FechaVe:=DateTostr(Date); --> El error se produce cuando valida esta fecha, ya que la varieble no contiene ningún tipo de dato. A continuación tienes la estructura del registro: Unit TVenta; interface Const N=20; SerieFactura=10000; Type RArt=Record Codigo:String[20]; Cantidad:Real; Medida:string[4]; Descripcion:String[80]; Bonifica:real; Precio:Real; end; ADatos = Array[1..N] of RArt; Rven=REcord Numero:Longint; PuntoVenta:word; CUIT:STRING[15]; Datos:ADatos; Fecha:String[10]; Vendedor:Word; {Datos del cliente} NumCli:Word; Cliente:String[40]; Domicilio:String[100]; ConIva:Byte; {1 Resp Insc ... ,6 Monotributo} Bonificacion:Real; ImpuestoInt:real; {Impuesto interno} ConVenta:Byte; {1 Ctdo , 2 CtaCte} DescIva:real; Stock:Boolean; {Indica si modifico el stock} TotalVen:real; end; ArVenta=File Of RVen; implementation end. |
#4
|
||||
|
||||
Creo que ahora te has mandado!
Te refiero de nuevo a la guia de estilo, y también el uso de la etiqueta code para evitar que se pierda la indentación del código. No hay nada anormal en él.. por lo que puedo ver... lo único que se me ocurre es preguntarte si has revisado el archivo y estas seguro que el último registro no está en blanco? Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
|||
|
|||
Estimado Juan, tal vez no me supe explicar, según lo que yo pude observar con las herramientas de depuración y control de ejecución del lenguaje, note lo siguiente:
1. El registro y el archivo de datos fue creado, y por ende contiene datos, con el programa generado en la versión 3. 2. Al pasar este archivo de datos, con la misma estructura del registro y sus respectivos archivos de datos al programa compilado con la versión 5, pude ver que no lo lee de de la misma forma que en la versión 3 (registro de datos), ya que sólo contiene basura. 3. Me parece que el problema esta dado con la lectura en memoria de los tipos de datos que contiene el registro. ¿ Sabes si la gente de Borland introdujo algún cambio en los tipos de datos en la versión 5 ? |
#6
|
|||
|
|||
Estuve investigando y pude comprobar que el tipo Real de Delphi 3 es distinto al de Delphi 5, es decir en el primer caso ocupa 6 bytes y en el segundo 8.
Esto se soluciona declarando las variables con Real48. ¿ Conocen alguna otra incompatibilidad ? Última edición por inetplus fecha: 16-02-2004 a las 23:30:24. |
|
|
|