Announcement

Collapse
No announcement yet.

Schreiben in eine typisierte Datei

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

  • Schreiben in eine typisierte Datei

    Hallo zusammen,

    ich habe einen Record Typ definiert:</br>
    Type</br>
    TMyRecord = record</br>
    RecordID : String[20];</br>
    RecordDescr : String[255];</br>
    end;</br>
    In der Anwendung sollen nun Datensätze in die Datei geschrieben werden:</br>
    begin</br>
    AssignFile(RecordFile, DataFile);</br>
    Reset(RecordFile);</br>
    Write(RecordFile, pRecordObject);</br>
    CloseFile(RecordFile);</br>
    end;</br>

    Soweit so gut, das Problem ist, dass nach jedem Speichervorgang trotzdem nur ein Datensatz</br>
    in der Datei ist, und zwar der, den man zuletzt eingefügt hat. Die Datei selbst wurde mit der folgenden
    Routine erzeugt:</br>

    if vSaveDialog.Execute then</br>
    begin</br>
    AssignFile(vFile, vSaveDialog.FileName); { vFile : File of TMyRecord }</br>
    Rewrite(vFile);</br>
    CloseFile(vFile);</br>
    end;</br>

    Hat jemand eine Idee was ich da falsch mache?

    Thanks
    tom

  • #2
    Hallo,<br>
    mit reset öffnest Du die Datei und stellst die Dateiposition auf den Anfang der Datei. Dadurch überschreibst Du jedesmal wieder Deinen Datensatz.<br>
    versuch es mal mit appen

    Comment


    • #3
      Hallo,

      wenn mehrere Datensätze in dieser Art und Weise in die Datei geschrieben werden sollen, muss für jeden Datensatz ein eigener Record-Slot in einem <b>Array</b> vorgesehen werden. Die folgende Unit stammt aus einem Beispielprojekt aus meinem Buch <i>Delphi Win32 Lösungen</i> und demonstriert die Vorgehensweise:
      <pre>
      unit RecFile;

      interface

      type
      GZRec = record
      lDateCode : TDateTime; { Auswertund des Monats / Jahrs }
      sDay : String[6]; { Zeilenbeschriftung für EditGrid }
      sVormonat : String[6]; { Vormonatkontostand }
      sK1 : String[6]; { Kommen 1 }
      sG1 : String[6]; { Gehen 1 }
      sK2 : String[6]; { Kommen 2 }
      sG2 : String[6]; { Gehen 2 }
      sSoll : String[6] { Soll }
      end;

      const
      imaxDay = 42; // max. Arraygröße = 6 Seiten mal 7 Spalten

      var
      { globale Variable enthält Dateinamen der GZ-Datei }
      sGZFile : String;
      { Array zur Datenspeicherung }
      GZDays : array[1..imaxDay] of GZRec;

      procedure LoadGZValues; { Daten aus der Datei laden }
      procedure SaveGZValues; { Daten in die Datei schreiben }

      implementation

      procedure LoadGZValues;
      var
      F : File of GZRec;
      iRec : Integer;
      begin
      Assign(F, sGZFile);
      try
      Reset(F);
      for iRec:= 1 to imaxDay do Read(F, GZDays[iRec]);
      finally
      CloseFile(F)
      end
      end;

      procedure SaveGZValues;
      var
      F : File of GZRec;
      iRec : Integer;
      begin
      Assign(F, sGZFile);
      try
      Rewrite(F);
      for iRec:= 1 to imaxDay do Write(F, GZDays[iRec]);
      finally
      CloseFile(F)
      end
      end;

      end.
      </pre&gt

      Comment


      • #4
        Hallo zusammen,

        an Append hab ich auch schon gedacht, aber ich dachte das funktioniert nur bei untypisierten Textfiles?

        Zu der Sache von Hr. Kosch: Bedeutet das, daß ich jedesmal wenn ein Datensatz gespeichert werden soll erst mal die komplette Datei einlesen muss? Es wird immer nur <b>ein</b> Datensatz hinzugefügt, also keine Liste von Werten.</br>
        Ach ja Hr. Kosch wenn ich Sie gerade an der Strippe hab, ist schon eine Neuauflage für das Client/Server - Buch in Sicht?

        Thanks a lot
        t

        Comment


        • #5
          Hi Tom,

          bevor Du in die Datei schreibst, mußt Du die Schreibposition auf das Dateiende stellen, da sonst die alten Daten überschrieben werden:

          while not EOF(RecordFile) do

          Seek(RecordFile, FilePos(RecordFile) + 1);

          Viele Grüße,

          Thorste

          Comment


          • #6
            Hi Thorsten,

            danke das hat geholfen. ;-)

            t

            Comment

            Working...
            X