Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Speichern - ein großes Problem (https://www.delphipraxis.net/88381-speichern-ein-grosses-problem.html)

Bruce86 14. Mär 2007 22:57


Speichern - ein großes Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
So nun hoffe ich mal dass ihr mir, wie in den letzten tag, auch noch hierbei helfen könnt!
Es geht um das speichern!

Ich würde ganz gerne die Daten, die für die schüler eingegeben werden, die auswahl der chekcboxen auf den schüler bezogen, sowie das bild was zu dem schüler gehört in eine rdatei speichern! wenn es nicht gleich für mehrere geht würde es mir auch erstmal für einen schüler reichen! ;-)
Weiß das klingt unheimlich viel hoffe nur es ist nciht wirklich so viel wie es sich anhört!

Vllt erkläre ich nochmal kurz was in meinem Projekt vorgeht!

Also(siehe screenshot) es werden bei den schülerdaten die Daten der schüler(Name, Vorname etc pp) engegeben dann werde diese an die listbox übermittelt und können dann wieder in die edits zurückgegeben werden! weiterhin wählt man die fächer für jeden schüler aus und sofern vorhanden lädt man ein bild für diesen schüler hoch!
Meins ziel ist eigentlich dass alle daten aller schüler einer Schulklasse später in einer datei gespeichert werden! Ich glaube fast dass das eine ewigkeit braucht bis ich soweit bin aber wenn ihr mir hier im ansatz helfen könntet wäre das super! notfalls muss es eben für jeden schüler abgespeichert werden!

Das gleiche problem würde dann beim laden auftreten aber wenn das speichern erstmal realisiert ist denke ich mal kann ich mich in den rest dann weiter reinfuchsen!

Hoffe es gibt eine lösung für mein problem! ok gibt es sicherlich denn andere programme können es ja auch aber ob das dann nicht alles zu hoch gegriffen ist? Ich glaube das ist wohl eher das problem! Vielen Dank schon mal für eure hilfe!

Luckie 14. Mär 2007 23:16

Re: Speichern - ein großes Problem
 
Dafür würde sich eine XML-Datei anbieten, denke ich.

Billi Berserker 15. Mär 2007 00:03

Re: Speichern - ein großes Problem
 
Es gäbe mehrere Möglichkeiten :)

Wie bereits schon erwähnt eine XML Datei,
da würden die Daten in etwa so gespeichert:
XML-Code:
<Klasse>
  <Schüler>
    <Name>123</Name>
    <Vorname>456</Vorname>
  </Schüler>
  <Schüler>
    <Name>abc</Name>
    <Vorname>def</Vorname>
  </Schüler>
</Klasse>
uws.
Das benutzen von so einfachen XML Dateien geht meiner Meinung nach am besten mit der TJvSimpleXML Komponente die bei JVCL dabei ist.


Eine Alternative wäre die Daten ganz normal in eine Text Datei zu schreiben.
Hierfür würde ich mich der TStringList Komponente bedienen und die CommaText Eigenschaft selbiger gnadenlos ausnutzen.
D.h. beim speichern fügst du die Daten für jeden Schüler in einer bestimmten Reihenfolge in eine TStringList. Mit TStringList.commatext bekommst du damit einen Schüler in einer Textzeile. Diese eine zeile speicherst du in die Textdatei für jede Klasse. Der zweite Schüler wird dann in die zweite Zeile gespeichert, etc.
sieht dann in etwa so aus:
"123","456","...","..."
"abc","def","...","..."
Beim laden machst du das ganze rückwärts. Du ließt die Textdatei Zeilenweise aus und lädst die Komma Text Zeile rückwärs in deine TStringList. Damit hast du die einzelnen Elemente des Schülers dann wieder in der StringList...
So ists zwar nicht gerade besonders schön, aber man spart sich den streß die Zeile per hand auseinander zu nehmen ;)

Bruce86 15. Mär 2007 06:55

Re: Speichern - ein großes Problem
 
Ok! Dashört sich schon mal sehr gut an!
Doch hier gleich mal ne frage zu! Was ist mit den variablen gemeint also 123;456;abc...
Was soll an die stelle dieser Variablen?
Und wie kann ich dort das zu dem schüler gehörige Foto abspeichern?

Wäre mal ein ganzer quellcode mit erläuterungen drinne? könnt ja dann ne erklärung hinschreiben wo ich es selbst dann konfigurieren muss was also dannan diese stelle muss! muss ich zuvar records oder der gleichen deklarieren?

MFG

Bruce86

bitsetter 15. Mär 2007 07:32

Re: Speichern - ein großes Problem
 
Hi,

wie groß sind die Bilddateien, welches Bildformat haben diese und haben die Bilder sogar die gleiche Dateigröße?

sirius 15. Mär 2007 07:44

Re: Speichern - ein großes Problem
 
Zitat:

Und wie kann ich dort das zu dem schüler gehörige Foto abspeichern?
Du speicherst einfach den Dateinamen des Bildes.

(123 steht da für den Namen z.B.: Meier)
(456 entsprechend für Max)

Bruce86 15. Mär 2007 08:08

Re: Speichern - ein großes Problem
 
Die Bilddateien liegen um die 30kb und weniger und sind im *.bmp gespeichert

Billi Berserker 15. Mär 2007 10:11

Re: Speichern - ein großes Problem
 
Die bmp Dateien würde ich einfach so als Bitmaps speichern, eventuell in nem extra ordner.

Beispiel code für XML (blind programmiert und nicht getestet)
(ich habe auch keine ahnung wie dein code strukturiert ist, hier so wie ich es machen würde - weiß auch gerade nicht ob ü in xml als item name geht)
Delphi-Quellcode:
procedure Speichern;
var
  n : integer;
  XML : TJvSimpleXML
  Schüler : TSchüler
begin
  XML := TJvSimpleXML.Create(nil);
  try
    XML.Root.Name := 'Klasse X';
    for n := 0 to SchülerList.Items.Count - 1 do
        with XML.Root.Items.Add('Schüler').Items do
        begin
          item := TSchüler(SchülerList.Items.Item[n]);
          Add('Name',Schüler.Name);
          Add('Vorname',Schüler.Vorname);
          ...
            // restlichen Eigenschaften
          ...
          Schüler.Bitmap.SaveToFile('C:\Fotos\' + Schüler.Name + ' ' + Schüler.Vorname + '.bmp');
        end;
    XML.SaveToFile('C:\klassex.xml');
  finally
    XML.Free;
  end;
end;

procedure Laden;
var
  n : integer;
  XML : TJvSimpleXML;
  Schüler : TSchüler
begin
  XML := TJvSimpleXML.Create(nil);
  try
    XML.LoadFromFile('C:\klassex.xml');
    for n := 0 to XML.Root.Items.Count - 1 do
        with XML.Root.Items.Item[n].Items do
        begin
          Schüler : TSchüler.Create;
          Schüler.Name := Value('Name');
          Schüler.Vorname := Value('Vorname');
          ...
          // restlichen Eigenschaften
          ...
          Schüler.Bitmap.LoadToFile('C:\Fotos\' + Schüler.Name + ' ' + Schüler.Vorname + '.bmp');
          SchülerList.Items.Add(Schüler);
        end;
  finally
    XML.Free;
  end;
end;

Bruce86 15. Mär 2007 10:12

Re: Speichern - ein großes Problem
 
Wie setze ich das:
Zitat:

<Klasse>
<Schüler>
<Name>123</Name>
<Vorname>456</Vorname>
</Schüler>
<Schüler>
<Name>abc</Name>
<Vorname>def</Vorname>
</Schüler>
</Klasse>
fort wenn es um die bilder,die auswahl der fächer(checkboxen) und Telfonnummern etc geht????

Könnt ihr das mal so an einem beispiel ausführlich ausschreiben?

Wäre Super

Vielen Dank im Vorraus

Bruce86

Bruce86 15. Mär 2007 10:20

Re: Speichern - ein großes Problem
 
Hi Billi Berserker!

muss ich dafür vorher ein record deklarieren?

Delphi-Quellcode:
type Tschueler = record
     Name :string;
     Vorname: string;
         .
         .
         .
     end;

Billi Berserker 15. Mär 2007 10:26

Re: Speichern - ein großes Problem
 
Kommt ganz drauf an wie du das speichern der Daten aktuell machst.
Gibt da so viele Möglichkeiten... in meinem Beispiel ists über ne Klasse TSchüler und eine TObjectList (SchülerList) gemacht.
Geht aber auch über ein dynamisches Array und ein Record.

Bruce86 15. Mär 2007 10:40

Re: Speichern - ein großes Problem
 
Derzeit ist es noch gar nicht realisiert da ich nicht weiß wie ich alles unter einen hut bekomme wie ich es oben schon geschrieben habe! abe rdas mi dem xml-dateien scheint mir eine sehr gute lösung zu sein!
Deshalb frage ich lieber euch weil ich wusste nciht wie ich das hätte machen sollen! datenbanken dürfen wir nicht nehmen das ist das problem dabei sonst wäre das so denke ich mal nen kleineres problem da ich öfters mit datenbanken arbeite udn mit xml habe ich mich bisher noch nicht befasst!

SaFu 15. Mär 2007 10:58

Re: Speichern - ein großes Problem
 
Hi kleine verbesserung für dein Projekt ich würde alles mit einer oder mehrere datenbanken machen wärst viel flexieble.

Für deine bilder laden würde ich dann den index des Namen in eine Variable stecken und würde das Bild mit der Variable laden habe schonmal so was ähnliches gemacht

Delphi-Quellcode:
procedure TForm8.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
blauezelle;
  if Listbox1.ItemIndex > -1  then
   begin
     ListBox1.ItemIndex; //Markierte Spalte finden
     Lb:= ListBox1.Items[ListBox1.ItemIndex]; //makierung übergeben in Lb
     Label14.Caption:= 'VERTRETUNGSPLAN für Koll. '+ Lb;

       if not FileExists (ExtractFilePath(ParamStr(0))+'lehrer\'+Lb+'.jpg') then
         begin
          GridLade; // StringGrid laden
          MemoLade; // Meomos und Labels laden
          Image1.Visible:= False;
          Label6.Visible:= False;
         end
       else
         begin
          GridLade; // StringGrid laden
          MemoLade; // Meomos und Labels laden
          Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'lehrer\'+Lb+'.jpg') ;
          Image1.Visible:= True;
          Label6.Visible:= True;
           if Panel14.Visible = True then
             begin
              Label6.Caption := 'Bild des Lehrers '+ LB;
             end
           else
            begin
             Label6.Visible:= False;
            end;
         end;
    end
 else
  begin
   // nichts drin nur zur fehler vermeidung
 end;
end;
Habe es über den namen der Listbox gemacht wie man sehen kann das könntest du auf deine bedürfnisse anpassen

Gruss sascha


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 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