Speichern einer fortlaufenden Nummer
Speichern einer fortlaufenden Nummer
Hallo zusammen,
ich möchte eine fortlaufende Prüfnummer speichern. Diese muss nach dem schließen des Programmes wieder eingelesen
werden (bzw. noch vorhanden sein). Wie setzte ich sowas mit Lazarus am besten um? Benötige ich wieder eine extra File?
Vielen Dank vorab.
ich möchte eine fortlaufende Prüfnummer speichern. Diese muss nach dem schließen des Programmes wieder eingelesen
werden (bzw. noch vorhanden sein). Wie setzte ich sowas mit Lazarus am besten um? Benötige ich wieder eine extra File?
Vielen Dank vorab.
Re: Speichern einer fortlaufenden Nummer
Verwendest Du bereits eine ini-Datei?
-
- Beiträge: 174
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
Re: Speichern einer fortlaufenden Nummer
Hallo,
ich hab für so was mal mit INI-Files gearbeitet.
Findet mal viel darüber im Netz und geht relativ einfach.
Hatte vorher noch nie mit Dateien lesen/schreiben in meinen Programmen gearbeitet,
hat aber auf Anhieb damit einwandfrei funktioniert.
http://wiki.freepascal.org/Using_INI_Files/de
NoCee
ich hab für so was mal mit INI-Files gearbeitet.
Findet mal viel darüber im Netz und geht relativ einfach.
Hatte vorher noch nie mit Dateien lesen/schreiben in meinen Programmen gearbeitet,
hat aber auf Anhieb damit einwandfrei funktioniert.
http://wiki.freepascal.org/Using_INI_Files/de
NoCee
Re: Speichern einer fortlaufenden Nummer
Ich würde die Nummer auch in einer ini- bzw. xml-Datei speichern. Falls Du eine DB hast, dann ist es noch besser. Alternativ wäre noch die Registry, würde ich aber persönlich dafür nicht nehmen.
-
- Beiträge: 106
- Registriert: Mi 3. Feb 2016, 09:39
- OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
- CPU-Target: 32/64Bit,ARM(RPi)
- Wohnort: nahe Grimma
Re: Speichern einer fortlaufenden Nummer
Wenn du keine DB Anbindung hast oder planst wäre eine INI Datei wohl das einfachste.
XML wäre mir für sowas zu umständlich. Also wenn du es nur dafür brauchst.
Edit zur Umsetzung: Ich würde eine Globale Variable dafür nutzen. Im OnCreate lädst du sie und im OnDestroy speicherst du sie.
XML wäre mir für sowas zu umständlich. Also wenn du es nur dafür brauchst.
Das fällt schonmal flach wenn man Crossplattform denkt. Allerdings hat sich l0lhaxx dazu ja nicht geäußert.Lion hat geschrieben:Alternativ wäre noch die Registry, würde ich aber persönlich dafür nicht nehmen.
Edit zur Umsetzung: Ich würde eine Globale Variable dafür nutzen. Im OnCreate lädst du sie und im OnDestroy speicherst du sie.
Mfg Requion
Das beste an Standards ist, dass es so viele davon gibt.
Das beste an Standards ist, dass es so viele davon gibt.
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Speichern einer fortlaufenden Nummer
Kann man machen.Requion hat geschrieben:Ich würde eine Globale Variable dafür nutzen. Im OnCreate lädst du sie
Nein, speichern immer dann wenn sie inkrementiert wird. Man kann sich nicht sicher sein, dass OnDestroy immer aufgerufen wird.Requion hat geschrieben:und im OnDestroy speicherst du sie.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: Speichern einer fortlaufenden Nummer
Genau, so was speichere ich immer sofort. Sonst kann das Programm oder Windows abstürzen, und dann hat man das Problem, da kein OnDestroy aufgerufen wurde.
-
- Beiträge: 106
- Registriert: Mi 3. Feb 2016, 09:39
- OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
- CPU-Target: 32/64Bit,ARM(RPi)
- Wohnort: nahe Grimma
Re: Speichern einer fortlaufenden Nummer
Stimmt auffallend. Normalerweise gehe ich davon aus das Fehler in soweit abgefangen werden das wenigstens das Programm ordnungsgemäß beendet wird/werden kannLion hat geschrieben:Genau, so was speichere ich immer sofort. Sonst kann das Programm oder Windows abstürzen, und dann hat man das Problem, da kein OnDestroy aufgerufen wurde.

An Windows Abstürze hab ich in dem Moment garnicht gedacht

Wie ist das wenn die Nummer dann in kürzester Zeit sehr oft hochgezählt wird?
Code: Alles auswählen
// I Global deklariert
for I := 0 to 100000 do
begin
//führe Operationen durch
//Speicher I
end;
Code: Alles auswählen
// I Global deklariert
for I := 0 to 100000 do
begin
//führe Operationen durch
end;
//Speicher I
Hat das (wie im 1. Beispiel) Auswirkungen auf die Lebensdauer des Speichermediums(HDD, SSD, Flash) wenn ich 100000x in die Datei schreibe oder ist das bei der Anzahl unbedenklich?
Ich würde wahrscheinlich das 2. Beispiel bervorzugen.
Mfg Requion
Das beste an Standards ist, dass es so viele davon gibt.
Das beste an Standards ist, dass es so viele davon gibt.
Re: Speichern einer fortlaufenden Nummer
Hallo zusammen,
erstmal vielen Dank für die zahlreichen Antworten. Ich habe mich jetzt mal an den ini-Dateien versucht.
Klappt auch alles, bis auf die Ausnahme das nach dem Programm neustart wieder der Wert 10000 in der ini-Datei steht obwohl er zuvor bei z.B. 10030 war. Wo ist mein Fehler?
erstmal vielen Dank für die zahlreichen Antworten. Ich habe mich jetzt mal an den ini-Dateien versucht.
Klappt auch alles, bis auf die Ausnahme das nach dem Programm neustart wieder der Wert 10000 in der ini-Datei steht obwohl er zuvor bei z.B. 10030 war. Wo ist mein Fehler?
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
Ini: TIniFile;
begin
//Ini-Datei erstellen (Falls noch nicht vorhanden)
Ini:= TIniFile.Create('rn.ini');
try
Ini.WriteInt64('Rondennummer','Schlüssel1',10000);
finally
Ini.Free;
end;
Code: Alles auswählen
procedure TForm1.menuWiegenSpeichernClick(Sender: TObject);
var
Ini: TIniFile;
Rondennummer: int64;
begin
Ini:=TIniFile.Create('rn.ini');
Rondennummer:= (Ini.ReadInt64('Rondennummer','Schlüssel1',0))+1;
Ini.WriteInt64('Rondennummer','Schlüssel1',Rondennummer);
-
- Beiträge: 106
- Registriert: Mi 3. Feb 2016, 09:39
- OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
- CPU-Target: 32/64Bit,ARM(RPi)
- Wohnort: nahe Grimma
Re: Speichern einer fortlaufenden Nummer
Weil du im OnCreate immer den Wert Überschreibst.
Mfg Requion
Das beste an Standards ist, dass es so viele davon gibt.
Das beste an Standards ist, dass es so viele davon gibt.
Re: Speichern einer fortlaufenden Nummer
muss ich das dann mit einer fileexist abfrage machen?Requion hat geschrieben:Weil du im OnCreate immer den Wert Überschreibst.
EDIT: So funktioniert es! Danke für eure Hilfe
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
Ini: TIniFile;
begin
//Ini-Datei erstellen (Falls noch nicht vorhanden)
if not fileexists ('rn.ini') then begin
Ini:= TIniFile.Create('rn.ini');
try
Ini.WriteInt64('Rondennummer','Schlüssel1',10000);
finally
Ini.Free;
end;
end;
-
- Beiträge: 106
- Registriert: Mi 3. Feb 2016, 09:39
- OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
- CPU-Target: 32/64Bit,ARM(RPi)
- Wohnort: nahe Grimma
Re: Speichern einer fortlaufenden Nummer
Code: Alles auswählen
Var Rondennummer: Integer; //Global
procedure TForm1.FormCreate(Sender: TObject);
var
Ini: TIniFile;
begin
//Ini-Datei erstellen (Falls noch nicht vorhanden)
Ini:= TIniFile.Create('rn.ini');
try
Ini.ReadInt64('Rondennummer','Schlüssel1',10000); //Liest Wert aus der INI, wenn keiner Gefunden wird nimmt er 10000
finally
Ini.Free;
end;
Code: Alles auswählen
procedure TForm1.menuWiegenSpeichernClick(Sender: TObject);
var
Ini: TIniFile;
begin
Ini:=TIniFile.Create('rn.ini');
try
Ini.WriteInt64('Rondennummer','Schlüssel1',Rondennummer); //Speichere Wert der Globalen Var
finally
Ini.Free;
end;
end;
Also wenn du mit 10000 Anfängst dann:
Code: Alles auswählen
// führe Operationen durch
// Erhöhe Rondennummer um 1
//...
// Speicher Wert von Rondennummer
Mfg Requion
Das beste an Standards ist, dass es so viele davon gibt.
Das beste an Standards ist, dass es so viele davon gibt.
Re: Speichern einer fortlaufenden Nummer
Ich würde es nach der Schleife speichern.Requion hat geschrieben: Also innerhalb der Schleife oder nach der Schleife speichern?
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Speichern einer fortlaufenden Nummer
Das kommt darauf an. Was passiert im schlimmsten Fall wenn eine Nummer doppelt benutzt wird? Wie wichtig ist die Geschwindigkeit einer Operation?Requion hat geschrieben:Wie ist das wenn die Nummer dann in kürzester Zeit sehr oft hochgezählt wird?
Solche und ähnliche Fragen muss man erst beantworten bevor man eine Speicherstrategie auswählt.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de