![]() |
Problem mit ini-Datei bei Wertzuweisungen
Hallo,
Ich habe mich mal näher mit einer Art Datenbank beschäftigt. Der Inhalt von meinem Programm wäre ein StringGrid in der verschiedene Werte stehen. Diese möchte ich in einer ini abspeichern und auch wieder abfragen können. Mein Problem hierbei ist das grundsätzliche Problem bei einer Wertzuweisung. Ich habe es schon geschafft, dass wenn ich auf den Button Speichern klicke, fügt er ein Element der Stringgrid in die ini, jedoch möchte ich eine Art Schleife (for to oder repeat oder was sich am besten macht). Habt ihr eine Lösung parat? Quellcode:
Code:
Die Schleife funktioniert halt nicht. Er soll von der StringGrid (grid) in der 1. Spalte alle Elemente von 1 bis Anzahl der vorhanden Elemente (also RowCount) in die ini schreiben.
procedure TForm1.speiClick(Sender: TObject);
var a,h : integer; begin a:=1; h:=grid.RowCount; ini := TIniFile.Create(ExtractFilePath( ParamStr(0))+'data.ini') for a:=1 to h do begin ini.WriteString('Titel', 'a', grid.Cells[0,a]) end; end; MFG Subsidenz |
Re: Problem mit ini-Datei bei Wertzuweisungen
Du überschreibst in Deiner Schleife immer wieder denselben Ident in derselben Section.
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Zitat:
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Ich weiß nicht, ob ich Dich richtig verstanden habe, aber versuch es mal so:
Delphi-Quellcode:
ini.WriteString('Titel', IntToStr(a), grid.Cells[0,a])
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Zitat:
Woaw tatsächlich das funktioniert^^ Danke DeddyH |
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Kein allgemeines Problem |
Re: Problem mit ini-Datei bei Wertzuweisungen
Sollte die Schleife nicht eher von 0 bis h-1 gehen - oder wenn du eine Überschrift hast, dann halt von 1 bis h-1?
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Stimmt eigentlich, da hatte ich gar nicht hingesehen. Ich würde einfach von FixedRows bis RowCount - 1 gehen, das sollte immer passen.
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Da ich eine Überschrift in der Tabelle habe geht das schon alles seinen Gang :wink:
Mir ist da noch was eingefallen: Wie kann ich nun die Anzahl an Werten in einer ini mir ausgeben lassen? Ich möchte also wissen, wieviel Werte unter einer Sektion in der ini stehen. MFG Subsidenz |
Re: Problem mit ini-Datei bei Wertzuweisungen
Versuch es mal mit TIniFile.ReadSectionValues. Die Anzahl der Einträge in der Stringliste entspricht dann der Anzahl der Werte.
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Hallo,
du hast zwei Möglichkeiten: 1. Möglichkeit: Du liest dir mit ReadSectionValues alle Einträge der Section in eine StringList ein und schaust dir dann StringList.Count an oder... 2. Möglichkeit: Du speicherst dir zuerst in die Ini-Datei wieviele Einträge es sind (sofern du es zu diesem Zeitpunkt schon weisst). Beim Auslesen brauchst dann nur den Eintrag der Anzahl auslesen und du weisst wieviele drin sind. (unsicher wenn sich was ändert) |
Re: Problem mit ini-Datei bei Wertzuweisungen
Zitat:
Delphi-Quellcode:
so? Anmerkung: Titel ist einer meiner Überschriften in der Tabelle.
z:=TIniFile.ReadSectionValues('Titel');
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Etwas zu kurz, fürchte ich.
Delphi-Quellcode:
var sl: TStringlist;
Anzahl: integer; begin sl := TStringList.Create; Anzahl := 0; try Ini.ReadSectionValues('Titel',sl); Anzahl := sl.Count; finally sl.Free; end; end; |
Re: Problem mit ini-Datei bei Wertzuweisungen
eher so:
Delphi-Quellcode:
var
sl: TStringList; z: Integer; //Anzahl begin sl := TStringList.Create; try IniFile.ReadSectionValues('Titel', sl); z := sl.Count; finally FreeAndNil(sl); end; end; |
Re: Problem mit ini-Datei bei Wertzuweisungen
Okay ich sollte mal lieber das Problem etwas ausführlicher erklären.
Also ich habs jetzt geschafft, dass er die Werte ordentlich in die ini abspeichert. Wenn ich nun das Programm erneut starten will klick ich auf den "Laden"-Button und will meine StringGrid nach den Werten einrichten. Da hab ich mir überlegt, dass die Zeilenanzahl der Anzahl der Werte in der ini entsprechen muss (nur halt +1 wegen der tabelle). Das Ganze hab ich dann so umgesetzt:
Delphi-Quellcode:
Jetzt meckert er an folgender Stelle:
procedure TForm1.ladenClick(Sender: TObject);
var i : TListBox; z,a : integer; sl: TStringlist; begin begin sl := TStringList.Create; try Ini.ReadSectionValues('Titel',sl); z := sl.Count; finally FreeAndNil(sl); end; ini := TIniFile.Create(ExtractFilePath( ParamStr(0))+'data.ini'); a:=1; grid.RowCount:=z+1; for a:=1 to z do begin grid.Cells[0,a]:=ini.ReadSection('Titel', IntToStr(a), ''); end; end;
Delphi-Quellcode:
MFG Subsidenz
grid.Cells[0,a]:=ini.ReadSection('Titel', IntToStr(a), '');
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Ersetz mal ReadSection durch ReadString.
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Zitat:
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Du erzeugst die Ini erst, nachdem Du versucht hast, daraus zu lesen?
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Zitat:
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Solange Du die IniFile erzeugt und nicht wieder freigegeben hast, musst Du sie nicht wieder neu erzeugen.
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Also nach dem rausnehmen sah es nicht gerade besser aus. Er zeigt immer noch den Access violation Fehler und geht in diese Zeile(die mit den Ausrufezeichen):
Delphi-Quellcode:
begin
sl := TStringList.Create; try Ini.ReadSectionValues('Titel',sl); !!!! z := sl.Count; finally FreeAndNil(sl); end; |
Re: Problem mit ini-Datei bei Wertzuweisungen
Wo hast Du denn das TIniFile.Create stehen? Ist die Ini eine globale Variable?
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Zitat:
Delphi-Quellcode:
Das hab ich bei den globalen Variablen stehen.
var
ini : TiniFile; MFG Subsidenz |
Re: Problem mit ini-Datei bei Wertzuweisungen
Und wo wird sie angelegt (TIniFile.Create)?
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Zitat:
Delphi-Quellcode:
Dieser Code ist mit in der Speicher-Prozedur. Sie wird also im gleichen Ordner angelegt bzw. gespeichert/überschrieben.
ini := TIniFile.Create(ExtractFilePath( ParamStr(0))+'data.ini');
|
Re: Problem mit ini-Datei bei Wertzuweisungen
So kommen wir irgendwie nicht weiter. Wenn es nicht gerade 400 Zeilen sind, poste mal die Unit.
|
Re: Problem mit ini-Datei bei Wertzuweisungen
Delphi-Quellcode:
Anmerkung: Dies ist ein Programm für eine Musik-Datenbank. Man trägt jeweils in 5 Editfelder etwas ein und dann wird es in eine Tabelle geschrieben. Die Werte daraus kann man durch den Button "Speichern" in eine ini-Datei schreiben. Beim "Laden" sollen nun diese Werte wieder in die Tabelle eingefügt werden.
unit Seite1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, jpeg, ExtCtrls, Outline, ComCtrls, TabNotBk, Buttons, iniFiles; type TForm1 = class(TForm) Hintergrund: TImage; ueberschrift: TLabel; eigenschaften: TGroupBox; ltitel: TLabel; tinterpret: TLabel; tgenre: TLabel; tgroesse: TLabel; tlaenge: TLabel; titel: TEdit; interpret: TEdit; genre: TEdit; groesse: TEdit; laenge: TEdit; grid: TStringGrid; operatoren: TGroupBox; ein: TButton; BitBtn1: TBitBtn; spei: TButton; loeschen: TButton; laden: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure einClick(Sender: TObject); procedure speiClick(Sender: TObject); procedure ladenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; ini : TiniFile; implementation uses Unit2, Seite2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Form3.ShowModal; end; procedure TForm1.FormCreate(Sender: TObject); begin grid.Cells[0,0]:='Titel'; grid.Cells[1,0]:='Interpret'; grid.Cells[2,0]:='Genre'; grid.Cells[3,0]:='Größe in MB'; grid.Cells[4,0]:='Länge in min'; end; procedure TForm1.einClick(Sender: TObject); var h :integer; begin h:=grid.RowCount-1; grid.Cells[0,h]:=titel.Text; grid.Cells[1,h]:=interpret.Text; grid.Cells[2,h]:=genre.Text; grid.Cells[3,h]:=groesse.Text; grid.Cells[4,h]:=laenge.Text; grid.RowCount:=h+2; titel.SetFocus; end; procedure TForm1.speiClick(Sender: TObject); var a,h : integer; begin a:=1; h:=grid.RowCount-2; ini := TIniFile.Create(ExtractFilePath( ParamStr(0))+'data.ini'); ini.EraseSection('Titel'); for a:=1 to h do begin ini.WriteString('Titel', IntToStr(a), grid.Cells[0,a]) end; end; procedure TForm1.ladenClick(Sender: TObject); var i : TListBox; z,a : integer; sl: TStringlist; begin begin sl := TStringList.Create; try Ini.ReadSectionValues('Titel',sl); z := sl.Count; finally FreeAndNil(sl); end; a:=1; grid.RowCount:=z+1; for a:=1 to z do begin grid.Cells[0,a]:=ini.ReadString('Titel', IntToStr(a), ''); end; end; end; end. Soweit wollt ich das erstmal machen. Löschen der Zeilen bzw. Bearbeiten kommt noch hinzu. Das Laden steht halt gerade im Problem-Mittelpunkt :-D MFG Subsidenz |
Re: Problem mit ini-Datei bei Wertzuweisungen
Wenn ich das richtig sehe, müsstest Du immer erst speichern, damit die Ini zur Verfügung steht. Da Du eh globale Variablen benutzt, kannst Du das auch so machen (vor dem letzten end.):
Delphi-Quellcode:
Damit steht die Ini global zur Verfügung, Du musst sie nicht neu erzeugen. (Hoffentlich werde ich jetzt nicht öffentlich gesteinigt :duck: )
initialization
ini := TIniFile.Create(ExtractFilePath( ParamStr(0))+'data.ini'); finalization ini.Free; |
Re: Problem mit ini-Datei bei Wertzuweisungen
Zitat:
Aber wo müssen die beiden Sachen denn eingefügt werden? |
Re: Problem mit ini-Datei bei Wertzuweisungen
Zitat:
|
Re: Problem mit ini-Datei bei Wertzuweisungen
DeddyH du bist mein Held! :thumb:
Jetzt funktionert alles zur vollsten Zufriedenheit :-D Hast mir wirklich sehr geholfen, danke. MFG Subsidenz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 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