Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   erster Datensatz aus record lesen (https://www.delphipraxis.net/42560-erster-datensatz-aus-record-lesen.html)

TheMiller 20. Mär 2005 23:13


erster Datensatz aus record lesen
 
Hi,

eine gaanz dumme Frage: Wie kann ich den ersten Datensatz eines Records auslesen?

Es ist folgendermaßen aufgebaut:

Delphi-Quellcode:
  type TRechnung = record
   RDatum:String[20];
   Name1,Name2,Name3,Str,Ort:String[200];
  end;
Ich habe immer mit seek geuscht. Und zwar so:

Delphi-Quellcode:
seek(rdatei, filesize(rdatei));
seek(rdatei, filesize(rdatei)-1);
seek(rdatei, 0);
seek(rdatei, 1);
Doch immer kommt eine Fehlermeldung. Meistens "Versuch hinter dem Dateiende zu lesen". Ist ja auch klar. Doch wie mache ich das richtig? Habe ich keine ID...

Binärbaum 20. Mär 2005 23:20

Re: erster Datensatz aus record lesen
 
Probiers mal so:
Delphi-Quellcode:
seek(rdatei, filesize(rdatei)-SizeOf(TRechnung));
und dann einfach einen datensatz lesen.

PS: Hat es einen Grund, dass für das Datum RDatum ein String verwendet wird und nicht TDate bzw. TDateTime? (Ich gehe mal davon aus, dass in RDatum sowas wie 21.03.2005 (und evtl. noch die Uhrzeit) gespeichert werden soll)

MfG
Binärbaum

TheMiller 20. Mär 2005 23:26

Re: erster Datensatz aus record lesen
 
HI,

ja es hat einen Grund. Ich war zu faul eine TDateTime-Komponente auf die Form zu legen und beim Speichern immer DateToStr einzugeben...

ICh werde es mal testen.. mom...

TheMiller 20. Mär 2005 23:26

Re: erster Datensatz aus record lesen
 
Delphi-Quellcode:
E/A-Fehler 131. Prozess wurde angehalten
sry..

Binärbaum 20. Mär 2005 23:31

Re: erster Datensatz aus record lesen
 
Ach nee, das wird wohl nichts, es sollte so heißen:
Delphi-Quellcode:
seek(rdatei, 0);
(Und dann einen Datensatz lesen)
Der andere Code war für das Lesen des letzten Datensatzes, da hab ich wohl was verwechselt. Das kommt halt davon, wenn man spät abends noch vorm PC sitzt :stupid:

MfG
Binärbaum

TheMiller 20. Mär 2005 23:32

Re: erster Datensatz aus record lesen
 
Hm.

Hatte ich schonmal probiert. Stimmt aber auch nicht. ABer mal eine Frage der Logik... Wenn nur ein Datensatz vorhanden ist, ist dann nicht der erste auch der letzte und umgekehrt??

Binärbaum 20. Mär 2005 23:38

Re: erster Datensatz aus record lesen
 
Zitat:

Zitat von DJ-SPM
Hm.

Hatte ich schonmal probiert. Stimmt aber auch nicht. ABer mal eine Frage der Logik... Wenn nur ein Datensatz vorhanden ist, ist dann nicht der erste auch der letzte und umgekehrt??

Ja klar, weil es ja sonst keine weitern Datensätze gibt. Man könnte höchstens Probleme bekommen, wenn die Datei leer ist.

Mal eine andere Frage: wie speicherst bzw. liest du eigentlich den Record in der Datei? Vielleicht liegt ja da der Fehler. :gruebel:
Ansonsten schau mal in der OH nach, was
Code:
E/A-Fehler 131
bedeutet.

TheMiller 20. Mär 2005 23:44

Re: erster Datensatz aus record lesen
 
Ich lese folgendermaßen aus:

Delphi-Quellcode:
  seek(rdatei, 0);
  read(rdatei, rdata);

  Label11.Caption:=rdata.Name1;
  Label12.Caption:=rdata.Name2;
  Label13.Caption:=rdata.Name3;
  Label14.Caption:=rdata.Str;
  Label15.Caption:=rdata.Ort;
Habe die Datei vorher natuürlich assigned...

Binärbaum 21. Mär 2005 00:03

Re: erster Datensatz aus record lesen
 
Verwende zum Lesen lieber ReadLn statt Read (Read war schon zu TP-Zeiten manchmal etwas problematisch):
Delphi-Quellcode:
var rdata: TRechnung;
    rdatei: text; //oder TextFile
...
AssignFile(rdatei, 'C:\daten.dat');
Reset(rdatei);//entspricht quasi Seek(rdatei, 0);
if Eof(rdatei) then rdata.RDatum:= ''
 else ReadLn(rdatei, rdata.RDatum);
if Eof(rdatei) then rdata.Name1:= ''
 else ReadLn(rdatei, rdata.Name1);
if Eof(rdatei) then rdata.Name2:= ''
 else ReadLn(rdatei, rdata.Name2);
if Eof(rdatei) then rdata.Name3:= ''
 else ReadLn(rdatei, rdata.Name3);
if Eof(rdatei) then rdata.Str:= ''
 else ReadLn(rdatei, rdata.Str);
if Eof(rdatei) then rdata.Ort:= ''
 else ReadLn(rdatei, rdata.Ort);
CloseFile(rdatei);
Das sollte so auch funktionieren, wenn die Datei leer ist.
Die Funktion Eof überprüft, ob das Dateiende der angegebenen Datei erreicht ist, und falls das der Fall ist, wird True zurückgegeben, sonst False.

MfG
Binärbaum

TheMiller 21. Mär 2005 00:13

Re: erster Datensatz aus record lesen
 
Naja,

diese Dateien, die ich in dieser Funktion auslese sind niemals leer und haben auch immer nur einen Datensatz...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz