PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [DELPHI 6]Daten speichern und auslesen



Borky
07.01.2007, 16:06
Heho,

ich will die daten eines "Formulars dauerhaft auf der Festplatte speichern.
also mal als beispiel

name: max
nachname: Mustermann
adresse: Mussterstraße 99
plz: 12345
ort: musterhausen

nun sind alle diese Formularfelder einzelne Variablen. die soll auch so bleiben. also ich will es so speichern, das ich selbige auch wieder als einzelne Variablen auslesen kann. Wie realisiere ich dies am günstigsten?

noch ein weiteres Problem. ich will nun verschiedene Funktionen des Programmes in frames realisieren. kann ich diese nun in einer Form mit einem Frame-teil da be buttonclicks aufrufen? und innerhalb dieser frames sollen dann auch die daten sein, welche gespeicher/geöffnet werden sollen. wo muss dann der speichern/öffnen dialog hin? in des frame oder in die form?
mfg Borky

NPC Fighter
07.01.2007, 16:48
Du könntest mit Ini Dateien arbeiten. Ein Tutorial dazu gibts hier (http://www.dsdt.info/tutorials/ini/).

Borky
07.01.2007, 17:12
ok, ich versuchs mal so. aber ich denke,das das klappen müsste. nun hab ich aber erst mal das wichtigere Problem. Ich will das beim start innerhalb der form aufgerufene Frame "ändern" sprich dort ein anderes Frame einbinden, samt des Codes dieses anderen Frames. wie realisiere ich das? bzw unter welche funktion muss ich da suchen

Borky

EDIT: ok, das mit der INI-Datei funktioniert einwandfrei. nun hab ich aber ein anderes Problem. ich hab die ini-datei abspeichern lassen.
ich öffne diese nun wieder über einen opendialog. funktioniert auch einwandfrei. wenn ich nun aber das probgram beende oder den frame, in dem die daten angezeigt werden, schließe. bekomme ich eine fehlermeldung.

diesen fehler bekomm ich wenn ich den frame mit destroy schließe:
http://upload.npcfighter.de/files/36/448fehler1.jpg

und diesen, wenn ich das programm mit dem geöffneten frame beende:
http://upload.npcfighter.de/files/36/973fehler2.jpg

wenn ich jedoch erst den fram schließe (und nach ok klicken des fehlers) läuft das prog problemlos weiter und ich kann es auch ohne fehlermeldung normal beenden

hier noch der code, mit dem ich die datei öffne und auslese:



procedure Tform_main.dat_lieg_openClick(Sender: TObject);
begin
frm_lieg_open := Tfrm_lieg_open.Create( nil );
frm_lieg_open.Parent := frm_main;
frame := 3;
frm_lieg_open.open_lgs.Create(self);
frm_lieg_open.open_lgs.InitialDir := 'liegenschaften/';
frm_lieg_open.open_lgs.Options := [ofFileMustExist];
frm_lieg_open.open_lgs.Filter := 'Liegenschaften|*.lgs';
frm_lieg_open.open_lgs.FilterIndex := 1;
frm_lieg_open.open_lgs.Execute;

ini := TIniFile.Create(frm_lieg_open.open_lgs.FileName);

frm_lieg_open.open_lgs.Destroy;

frm_lieg_open.lbl_liegenr_anz.Caption := ini.ReadString('Liegenschaft','Liegenschaftsnummer','');
frm_lieg_open.lbl_verm_anz.Caption := ini.ReadString('Liegenschaft','Vermieter','');
frm_lieg_open.lbl_adr_anz.Caption := ini.ReadString('Liegenschaft','Straße','');
frm_lieg_open.lbl_plz_anz.Caption := ini.ReadString('Liegenschaft','PLZ','');
frm_lieg_open.lbl_ort_anz.Caption := ini.ReadString('Liegenschaft','Ort','');

ini.Free;

dat_lieg_close.Enabled := True;
end;


der fehler kommt gleichermassen, wenn ich den dialog mit
frm_lieg_open.open_lgs.Destroy;
bzw.
frm_lieg_open.open_lgs.Free;
freigebe

mfg Borky

Caine Luveno
10.01.2007, 19:02
Wieso erstellst du den Frame eigentlich zur Laufzeit?

Ansonsten:

frm_lieg_open.open_lgs.Create(self);

wird freigegeben aber

frm_lieg_open

wird nicht wieder freigegeben. Vielleicht liegts daran.

Borky
11.01.2007, 11:46
Wieso erstellst du den Frame eigentlich zur Laufzeit?

Ansonsten:

frm_lieg_open.open_lgs.Create(self);

wird freigegeben aber

frm_lieg_open

wird nicht wieder freigegeben. Vielleicht liegts daran.

der fehler selbst is schon behoben. und die frm_lieg_open wird in einer andern prozedur wieder freigegeben. des is ja nur ein schnipssel ausm quellcode. und warum ich frames zur laufzeit erstelle? weil ich mehrere Frames innerhalb einer form abwechselnd haben will.

aber noch etwas. kann man Code global auslagern und dann sozusagen includen. ähnlich wie in php oder C/C++ der include-befehl?

Borky

MagicMagor
11.01.2007, 13:04
aber noch etwas. kann man Code global auslagern und dann sozusagen includen. ähnlich wie in php oder C/C++ der include-befehl?
Ja, oben zu Beginn deiner Datei wirst du den Punkt "uses" sehen. Hinter den schreibst du die Dateinamen (ohne die Endung), die du verwenden willst.

Also wenn du eine Datei "zeugs.pas" hast schreibst du


uses zeugs;

Delphi hat da schon einige Dateien eingefügt die du bereits benutzt (zB Forms), deine Dateien kannst du einfach dahinter anfügen.

Es ist noch zu erwähnen, es gibt zwei uses in jeder Datei. Einmal ganz oben im Interface-Teil, wo man Klassen definiert und einmal im Implementation-Teil wo der eigentliche Code der Funktionen steht.
Wenn du Funktionen oder Variablen/Konstanten aus anderen Dateien in deinem Interface-Teil nutzen willst musst du die Datei auch dort einfügen. (Sie ist dann aber in der gesamten Datei verfügbar) Dateien die nur im Implementation-Teil eingefügt wurden sind auch nur dort benutzbar.
Der wichtige Unterschied ist, im Interface-Teil darfst du keine Ring-Einfügung machen. Also wenn Datei A in ihrem Interface-Teil Datei B einfügt, darf Datei B nicht Datei A in seinem Interface-Teil einfügen, Delphi würde dir dann einen Fehler entgegenwerfen.
Im Implementation-Teil dürfen solche Ring-Einfügungen aber vorkommen.