![]() |
Ausgabe eines geladenen Records in Memofeldern
Ich schon wieder ;),
Und zwar habe ich folgendes Problem. Ich möchte Daten aus Editfeldern in ein Record speichern: Record:
Delphi-Quellcode:
Einlesen in den Record:
Bilddaten = record
RTitel, RAutor, RThema, RAufnahmekontext, RBlende, RBZ1, RBZ2, RBG1, RBG2, RAuflösung, RSchlagworte, RBeschreibung, RDat1, RDat2, RDat3, RAFormat: string[100]; end;
Delphi-Quellcode:
Nun habe ich keine Ahnung wie man den Record speichert, hab das mal so probiert:
procedure Einlesen;
var Titel, Autor, Thema, Aufnahmekontext, Blende, BZ1, BZ2, BG1, BG2, Auflösung, Schlagworte, Beschreibung, Dat1, Dat2, Dat3, AFormat: Bilddaten; begin Titel.RTitel:= Form3.Edit13.Text; Autor.RAutor:= Form3.Edit2.Text; Thema.RThema:= Form3.Edit3.Text; Aufnahmekontext.RAufnahmekontext:= Form3.Edit4.Text; Blende.RBlende:= Form3.Edit1.Text; BZ1.RBZ1:= Form3.Edit8.Text; BZ2.RBZ2:= Form3.Edit9.Text; BG1.RBG1:= Form3.Edit5.Text; BG2.RBG2:= Form3.Edit6.Text; Auflösung.RAuflösung:= Form3.Edit10.Text; Schlagworte.RSchlagworte:= Form3.Edit7.Text; Beschreibung.RBeschreibung:= Form3.Memo1.Text; Dat1.RDat1:= Form3.ComboBox1.Text; Dat2.RDat2:= Form3.ComboBox2.Text; Dat3.RDat3:= Form3.ComboBox3.Text; AFormat.RAFormat:= Form3.ComboBox6.Text; end;
Delphi-Quellcode:
Datensatz habe ich vorher global als Datensatz: Bilddaten deklariert.
procedure Speichern;
var datei: file of Bilddaten; begin if Form1.Savedialog1.Execute then begin try assignfile(Datei,Form1.Savedialog1.FileName); rewrite(datei); write(datei, Datensatz); finally close(datei); end; end; end; Wie kann ich das Ganze(, wenn es überhaupt richtig gespeichert wurde) jetzt wieder durch Laden der Datei, in dem der record eigentlich gespeichert werden sollte, in den Editfeldern oder auch einem Memofeld ausgeben? Später will ich allerdings nicht nur ein Record speichern, sondern mehrere, bräuchte da also einen Array... Es handelt sich um ein Bilddatenverwaltungsprogramm, bei dem jeder User also "seine" Datei mit den gespeicherten Bilddaten wieder aufrufen, also mehrere Bilddaten verwalten können soll. Ich hoffe ihr könnt mir helfen :) Liebe Grüße Giertier |
Re: Ausgabe eines geladenen Records in Memofeldern
erstmal:
Delphi-Quellcode:
Das schreiben ist soweit ok. Lesen kannst du mit Reset(file) und Read.
procedure Einlesen;
var Datensatz:Bilddaten; //wahrscheinlich aber nicht lokal hier definieren, damit du nachher speichern kannst. begin Datensatz.RTitel:= Form3.Edit13.Text; Datensatz.RAutor:=...; ... end; |
Re: Ausgabe eines geladenen Records in Memofeldern
Danke für deine schnelle Antwort :-D
Hab ich gemacht :) Und wie bekomm ich die gelesenen Daten jetzt in mein Memofeld zurück :gruebel: (Ich bin gerade einfach zu blöd sorry :wall:) EDIT: Müsste in der Datei dann nicht irgendwas drin stehen, wenn ich die mit dem Editor z.b. öffne? Weil die ganz leer ist, nicht mal irgendwelche komischen Zeichen...) |
Re: Ausgabe eines geladenen Records in Memofeldern
... aber besser das close() gar nicht erst angewöhnen,
besser ist closefile() zu verwenden |
Re: Ausgabe eines geladenen Records in Memofeldern
Zitat:
Neben dem richtigen Close(File), hast du auch die gleiche Variable "Datensatz" verwendet? |
Re: Ausgabe eines geladenen Records in Memofeldern
Also ich hab jetzt hier noch mal die ganze Unit mit den Prozeduren, die ich fürs Hauptprogramm nutze aufgelistet
Delphi-Quellcode:
Und wenn ich die Datein geladen hab, hätte ich das gerne in etwa so hier:
unit Pfadkopie;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, jpeg, ExtDlgs; type Bilddaten = record RTitel, RAutor, RThema, RAufnahmekontext, RBlende, RBZ1, RBZ2, RBG1, RBG2, RAuflösung, RSchlagworte, RBeschreibung, RDat1, RDat2, RDat3, RAFormat: string[100]; end; procedure Pfad; procedure Einlesen; procedure Speichern; procedure Laden; procedure Schreiben; var Datensatz: Bilddaten; implementation uses unit1, unit3; procedure Pfad; var Zieldatei: string; begin if Form1.OpenPictureDialog1.Execute then begin Form3.close; ZielDatei:= Form1.OpenPictureDialog1.FileName; Form1.Image2.Picture.LoadFromFile(Zieldatei); Form1.image2.Stretch:= true; Form1.image2.proportional:=true; Form1.image2.show; Form1.Enabled := false; Form3:= TForm3.Create(Application); Form3.Show; Form3.Label20.Caption:= ExtractFileExt(Zieldatei); Form3.Label17.Caption:= Zieldatei; end; end; procedure Einlesen; begin Datensatz.RTitel:= Form3.Edit13.Text; Datensatz.RAutor:= Form3.Edit2.Text; Datensatz.RThema:= Form3.Edit3.Text; Datensatz.RAufnahmekontext:= Form3.Edit4.Text; Datensatz.RBlende:= Form3.Edit1.Text; Datensatz.RBZ1:= Form3.Edit8.Text; Datensatz.RBZ2:= Form3.Edit9.Text; Datensatz.RBG1:= Form3.Edit5.Text; Datensatz.RBG2:= Form3.Edit6.Text; Datensatz.RAuflösung:= Form3.Edit10.Text; Datensatz.RSchlagworte:= Form3.Edit7.Text; Datensatz.RBeschreibung:= Form3.Memo1.Text; Datensatz.RDat1:= Form3.ComboBox1.Text; Datensatz.RDat2:= Form3.ComboBox2.Text; Datensatz.RDat3:= Form3.ComboBox3.Text; Datensatz.RAFormat:= Form3.ComboBox6.Text; end; procedure Speichern; var datei: file of Bilddaten; begin if Form1.Savedialog1.Execute then begin try assignfile(Datei,Form1.Savedialog1.FileName); rewrite(datei); write(datei, Datensatz); finally closefile(datei); end; end; end; procedure Laden; var Datei: file of Bilddaten; begin if Form1.OpenDialog1.Execute then begin assignfile(datei, Form1.OpenDialog1.FileName); reset(datei); read(Datei, Datensatz); closefile(datei); end; end;
Delphi-Quellcode:
Also würde im Memofeld gerne den Datensatz ausgeben, den ich geladen habe.
Form1.Memo1.Text:=
'Titel: '+Datensatz.RTitel+#13#10+#13#10+ 'Aufnahmedatum: '+Datensatz.RDat1+Datensatz.RDat2+Datensatz.RDat3+#13#10+#13#10+ 'Autor: '+Datensatz.RAutor+ #13#10+#13#10+'Thema: '+Datensatz.RThema+#13#10+#13#10+ 'Aufnahmekontext: '+Datensatz.RAufnahmekontext+#13#10+#13#10+ 'Blende: '+Datensatz.RBlende+' mm'+#13#10+#13#10; ... |
Re: Ausgabe eines geladenen Records in Memofeldern
Sieht doch gut aus. Wenn du jetzt die Reihenfolge der Prozeduraufrufe richtig machst, sollte es klappen.
|
Re: Ausgabe eines geladenen Records in Memofeldern
Vielen, vielen Dank!
Genau daran lags, ich hab Einlesen nach Speichern geschrieben :wall: Danke, nochmal an alle, die mir hier geholfen haben :) |
Re: Ausgabe eines geladenen Records in Memofeldern
Aber auch wenn es jetzt funktioniert, vielleicht noch zwei Hinweise:
Die Bezüge innerhalb der Unit auf verschiedene Formulare und deren Controls in anderen Units sind "unschön" und fehleranfällig. In einer Mini-Anwendung mag das funktionieren. Versuche doch einmal das anders zu lösen. Globale Variablen sollte man ebenfalls möglichst vermeiden. Mach' dir auch darüber Gedanken, wie dies in deinem Fall anders zu realisieren wäre. |
Re: Ausgabe eines geladenen Records in Memofeldern
Zitat:
Dann habe ich jetzt noch das Problem, dass ich nun nicht nur einen einzigen Record in der Datei speichern möchte, sondern eben mehrere Datensätze. Sowas löst man ja sicher mit einem Array of Record, oder? Wie stelle ich es aber an, dass nicht jedes mal, wenn ich in einem Formular (bei mir eben Form3) auf Speichern klicke, nicht die ganze Datei neu geschrieben wird und dann wieder nur ein Datensatz drin steht, sondern eben nur der neue hinzugefügt wird? Lasse ich dann einfach das rewrite weg? Wenn ich jetzt sowas mache wie
Delphi-Quellcode:
Dann haben meckern ja die im Record deklarierten Strings wie RTitel usw. wieder rum, dass sie keine Klasse oder eben keinen Record haben, weil Datensatz ja jetzt als Array und nicht mehr direkt als Bilddaten deklariert ist.
Datensatz: Array of Bilddaten
Liebe Grüße Giertier |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:26 Uhr. |
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