AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ausgabe eines geladenen Records in Memofeldern
Thema durchsuchen
Ansicht
Themen-Optionen

Ausgabe eines geladenen Records in Memofeldern

Ein Thema von Giertier · begonnen am 18. Feb 2009 · letzter Beitrag vom 19. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
Giertier

Registriert seit: 31. Okt 2008
20 Beiträge
 
Delphi 2005 Personal
 
#1

Ausgabe eines geladenen Records in Memofeldern

  Alt 18. Feb 2009, 15:36
Ich schon wieder ,

Und zwar habe ich folgendes Problem. Ich möchte Daten aus Editfeldern in ein Record speichern:

Record:
Delphi-Quellcode:
 Bilddaten = record
 RTitel, RAutor, RThema, RAufnahmekontext, RBlende, RBZ1, RBZ2, RBG1, RBG2,
 RAuflösung, RSchlagworte, RBeschreibung, RDat1, RDat2, RDat3, RAFormat: string[100];
 end;
Einlesen in den Record:
Delphi-Quellcode:
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;
Nun habe ich keine Ahnung wie man den Record speichert, hab das mal so probiert:

Delphi-Quellcode:
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;
Datensatz habe ich vorher global als Datensatz: Bilddaten deklariert.

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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 18. Feb 2009, 16:08
erstmal:
Delphi-Quellcode:
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;
Das schreiben ist soweit ok. Lesen kannst du mit Reset(file) und Read.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Giertier

Registriert seit: 31. Okt 2008
20 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 18. Feb 2009, 16:21
Danke für deine schnelle Antwort

Hab ich gemacht

Und wie bekomm ich die gelesenen Daten jetzt in mein Memofeld zurück (Ich bin gerade einfach zu blöd sorry )

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...)
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#4

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 18. Feb 2009, 16:23
... aber besser das close() gar nicht erst angewöhnen,
besser ist closefile() zu verwenden
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 18. Feb 2009, 16:40
Zitat von Giertier:
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...)
Sollte.

Neben dem richtigen Close(File), hast du auch die gleiche Variable "Datensatz" verwendet?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Giertier

Registriert seit: 31. Okt 2008
20 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 18. Feb 2009, 16:47
Also ich hab jetzt hier noch mal die ganze Unit mit den Prozeduren, die ich fürs Hauptprogramm nutze aufgelistet

Delphi-Quellcode:
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;
Und wenn ich die Datein geladen hab, hätte ich das gerne in etwa so hier:

Delphi-Quellcode:
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;
...
Also würde im Memofeld gerne den Datensatz ausgeben, den ich geladen habe.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 18. Feb 2009, 16:58
Sieht doch gut aus. Wenn du jetzt die Reihenfolge der Prozeduraufrufe richtig machst, sollte es klappen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Giertier

Registriert seit: 31. Okt 2008
20 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 18. Feb 2009, 17:10
Vielen, vielen Dank!

Genau daran lags, ich hab Einlesen nach Speichern geschrieben

Danke, nochmal an alle, die mir hier geholfen haben
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#9

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 18. Feb 2009, 17:54
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.
Ralph
  Mit Zitat antworten Zitat
Giertier

Registriert seit: 31. Okt 2008
20 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 19. Feb 2009, 07:41
Zitat von taaktaak:
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.
Daran habe ich auch schon gedacht, weil uns sowas auch immer erzählt wird. Allerdings bin ich noch ziemlich grün hinter den Ohren, was Delphi algemein angeht. Gibt es denn auch eine Möglichkeit alle Formulare in eine Unit zu packen? Wenn ich dann z.B. mit Visible arbeite oder so?

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

Datensatz: Array of Bilddaten 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.

Liebe Grüße

Giertier
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 Uhr.
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