Announcement

Collapse
No announcement yet.

Unterschiedliche Datentypen Delphi 4 & 2007?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Unterschiedliche Datentypen Delphi 4 & 2007?

    Hi,
    ich bin hier langsam am Verzweifeln.

    Folgendes Problem:
    Es existiert ein Delphi 4 Programm, das mehrere Records in einer Datei abspeichert (ganz einfach mit write(datei,record)).
    Der Record besteht aus mehreren Strings, integer, word, bool, currency und DateTime.

    Will ich nun in Delphi 2007 diesen Record über read(datei,person) mit exakt derselben Record-Typendefinition auslesen, so werden haufenweise falsche Dateien zurückgegeben.

    Zwei Ursachen konnte ich bereits ausmachen:
    Zum einen ist in Delphi 4 ein Integer nur 2 Byte lang, was in Delphi 2007 einem smallint entspricht.
    Zum anderen speichert Delphi 4 einen bool in 4 Bytes ab, was in Delphi 2007 einem longbool entspricht.

    Aber nach Abänderung der Record-Typdefinition klappt das Auslesen immernoch nicht richtig.

    Also habe ich exakt denselben Recordset einmal in Delphi 4 und einmal in Delphi 2007 abgespeichert (in Delphi 2007 allerdings mit den oben genannten Änderungen).
    Und wie erwartet, sind die Dateien nicht exakt dieselben (betrachtet mit einem Hex-Editor).

    Mir kommt es so vor, als ob die beiden Version unterschiedlich und relativ willkürlich an bestimmten Stellen 0-Byte-Folgen einfügen, woraus die Ausleseprobleme resultieren.

    Im Anhang finden sich die beiden Dateien im Hexformat sowie die Typendefinitionen des Records.

    Meine Frage ist nun: Wieso sind die Datentypen(?) bzw. die Abspeicherung eines Records in den beiden Version nicht gleich? Und wie kann ich dieses Problem beseitigen?

    Mir ist klar, dass ich die Datei byteweise auslesen könnte, aber das ist nicht Sinn der Sache und nur als letzte Möglichkeit in Betracht zu ziehen.


    Vielen Dank bereits im Voraus!



    mfg
    Freeze24
    Attached Files

  • #2
    > Zum einen ist in Delphi 4 ein Integer nur 2 Byte lang, was in Delphi 2007 einem smallint entspricht.

    Mit Sicherheit ist in D4 ein Integer auch 4 Byte lang.


    Dein Hauptproblem ist das solange du keine packed Records verwendest jede Delphi entsprechend den Compilereinstellungen die Records optimal auf Zugriffsperformance ausrichtet.

    Comment


    • #3
      Danke für den Beitrag.

      > Mit Sicherheit ist in D4 ein Integer auch 4 Byte lang.

      Ich hab hier ein Buch namens "Borland Delphi 4 Grundlagen und Profiwissen" von Walter Doberenz und Thomas Kowalski, in dem sich eine Tabelle mit Datentypen befindet. Und dort steht, dass ein Integer nur 2 Byte lang ist. Ein LongInt ist 4 Byte lang.


      Danke für den Tip mit den Packed Records!
      Dadurch habe ich es nun tatsächlich geschafft, die Datei korrekt auszulesen.
      Ich musste nur nach jedem smallint und nach jedem word noch einen zusätzlichen smallint einfügen, der die zwei 0-Byte-Folgen abdeckt.
      Nun klappt es einwandfrei.

      Comment

      Working...
      X