Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi aufrufen von Record (https://www.delphipraxis.net/125072-aufrufen-von-record.html)

foerster7892 30. Nov 2008 10:53


aufrufen von Record
 
Ich würde gerne nen record nach der Speicherung wieder aufrufen und die einzelnen Unterpunkte bearbeiten(Buchname...)


Delphi-Quellcode:
Type TBuch=Record
           Buchname: String[60];
           Autor: String[40];
           Verlag: String[40];
           ISBN: String[13];
           end;
Delphi-Quellcode:
AssignFile(Buchdatei, 'C:\Users\user\Documents\Bücher\' + Buch.Buchname + '.dat');
rewrite(Buchdatei);
write(Buchdatei, Buch);
closefile(Buchdatei);
showmessage('Buch wurde eingetragen');
so speicher ich den

und jetzt will ich ihn halt wieder aufrufen und alles nach belieben bearbeiten.

Danke im Vorraus für Hilfe

DeddyH 30. Nov 2008 10:55

Re: aufrufen von Record
 
In ganz kurzer Form ohne Fehlerbehandlungen:
Delphi-Quellcode:
AssignFile(Buchdatei, 'C:\Users\user\Documents\Bücher\' + Buch.Buchname + '.dat');
reset(Buchdatei);
read(Buchdatei, Buch);
closefile(Buchdatei);
showmessage('Buch wurde ausgelesen');

foerster7892 30. Nov 2008 11:00

Re: aufrufen von Record
 
und dann kann ich da einfach wieder auf TBuch zugreifen (is ja keine einfache Variable)?

DeddyH 30. Nov 2008 11:06

Re: aufrufen von Record
 
Versuch' s ;)

foerster7892 30. Nov 2008 12:34

Re: aufrufen von Record
 
Das Problem ist ja das ich mehrere Bücher anlege und die Buchnamen die gleichzeitig auch die Dateinamen sind (Harry Potter.dat)
Diese Speichere ich nochmal extra als .dat (in dieser werden die Dateinamen immer ergänzt) so kann ich Später die Bücher wieder aufrufen

aber wie kann ich dann noch auf Buchname und Verlag zugreifen und die ausgeben????

DeddyH 30. Nov 2008 12:43

Re: aufrufen von Record
 
Delphi-Quellcode:
AssignFile(Buchdatei, 'C:\Users\user\Documents\Bücher\' + Buch.Buchname + '.dat');
reset(Buchdatei);
read(Buchdatei, Buch);
closefile(Buchdatei);
showmessage(Buch.Autor);

foerster7892 30. Nov 2008 13:11

Re: aufrufen von Record
 
Delphi-Quellcode:
begin
  if (RadioGroup1.ItemIndex=0) then
  Suche := 'Buchname';
  if (RadioGroup1.ItemIndex=1) then
  Suche := 'Autor';
  if (RadioGroup1.ItemIndex=2) then
  Suche := 'Verlag';
  if (RadioGroup1.ItemIndex=3) then
  Suche := 'ISBN';

  if (FileExists('C:\Users\user\Documents\Bücher\111Buchtitel111.dat')) then
  begin
    AssignFile(Buecher, 'C:\Users\user\Documents\Bücher\111Buchtitel111.dat');
    reset(Buecher);
    Groesse:=filesize(Buecher);
    For AlleBuecher := 1 to Groesse do
    begin
      read(Buecher, x);
      AssignFile(Buchdatei, 'C:\Users\user\Documents\Bücher\' + x + '.dat');
      reset(Buchdatei);
      read(Buchdatei, Buch.Suche);//<---das Funzt nciht da suche kein Element von TBuch ist aber wenn ich zum Test einfach mal Buch.Autor hinpacke gehts auch nicht (Buch is angeblich nihct mit shortstring kompatibel)
      AttributSuche:=Inputbox('Suche','Suchbegriff eingeben','');
      if (AttributSuche=Buch.Suche) then
      Form3.RadioGroup3.Items.Add(x);//<--- und hier werden keine Items in der RadioGroup hinzugefügt die ich dann auswählen könnte(ka why)



      closefile(Buchdatei);



HELP :?: :?: :?:

DeddyH 30. Nov 2008 13:15

Re: aufrufen von Record
 
Ich finde Deine Logik ein wenig komisch. Wieso schreibst Du nicht alle Bücher in eine Datei? Dann könntest Du sie in ein dynamisches Array laden und damit dann hantieren. Und Du musst den Record schon im Ganzen einlesen und dann erst auf die Felder zugreifen.

foerster7892 30. Nov 2008 13:39

Re: aufrufen von Record
 
Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
begin
forcedirectories('C:\Users\user\Documents\Bücher');
AssignFile(Buecher, 'C:\Users\user\Documents\Bücher\111Buchtitel111.dat');
reset(Buecher);
Groesse:=filesize(Buecher);
for AlleBuecher := 1 to Groesse do
begin
  read(Buecher, x);
  Form3.RadioGroup2.Items.Add(x);//<---Was isn an dem Befehl falsch (eigl müsste ich doch da als wenn ich aufm Formular an der RadioGroup items dazugegeben hätte es haben müssen oder???)
end;
closefile(Buecher)
end;

procedure TForm3.Button2Click(Sender: TObject);
begin
  if (RadioGroup1.ItemIndex=0) then
  Suche := 'Buchname';
  if (RadioGroup1.ItemIndex=1) then
  Suche := 'Autor';
  if (RadioGroup1.ItemIndex=2) then
  Suche := 'Verlag';
  if (RadioGroup1.ItemIndex=3) then
  Suche := 'ISBN';

if (FileExists('C:\Users\user\Documents\Bücher\111Buchtitel111.dat')) then
  begin
    AssignFile(Buecher, 'C:\Users\user\Documents\Bücher\111Buchtitel111.dat');
    reset(Buecher);
    Groesse:=filesize(Buecher);
    AttributSuche:=Inputbox('Suche','Suchbegriff eingeben','');
    For AlleBuecher := 1 to Groesse do
    begin
      read(Buecher, x);
      AssignFile(Buchdatei, 'C:\Users\user\Documents\Bücher\' + x + '.dat');
      reset(Buchdatei);
      read(Buchdatei, Buch);
      if Suche='Buchname' then
      begin
        if (AttributSuche=Buch.Buchname) then
        Form3.RadioGroup3.Items.Add(x);
        closefile(Buchdatei);
        Funde:=Funde+1;
      end;
      if Suche='Autor' then
      begin
        if (AttributSuche=Buch.Autor) then
        Form3.RadioGroup3.Items.Add(x);
        closefile(Buchdatei);
        Funde:=Funde+1;
      end;
      if Suche='Verlag' then
      begin
        if (AttributSuche=Buch.Verlag) then
        Form3.RadioGroup3.Items.Add(x);
        closefile(Buchdatei);
        Funde:=Funde+1;
      end;
      if Suche='ISBN' then
      begin
        if (AttributSuche=Buch.ISBN) then
        Form3.RadioGroup3.Items.Add(x);
        closefile(Buchdatei);
        Funde:=Funde+1;
      end;
    end;
  end;
  showmessage('Es wurden ' +IntToStr(Funde)+ ' Bücher gefunden');
end;

end.
So dürfte es eigl funzen aber er Zeigt immer an das 0 Bücher gefunden wurden (Wenn ich Verlag wähle und Carlsen eingebe müsste er mindestens eins Finden)
Wissen sie/Weißt du was hier nicht stimmt????

DeddyH 30. Nov 2008 13:40

Re: aufrufen von Record
 
Verrätst Du mir mal, was x eigentlich ist?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 Uhr.
Seite 1 von 2  1 2      

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