Autor Beitrag
jojo-sp
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 317

Windows XP Prof, Vista Ultimate & Home Premium, Windows 7
Delphi 7 Enterprise, Delphi 2009
BeitragVerfasst: Do 08.01.09 11:26 
Hallo,

vielleicht ist euch schonmal sowas untergekommen:

Ich habe 2 Programme, die einen Nummernkreis hochzählen.
Das eine Programm hat einen Nummerkreis von 10000000 bis 19999999 und das andere
von 20000000 bis 29999999.

Die Routinen zum Laden und Speichern der aktuellen Nummer sind in beiden Programmen identisch.
Während das Programm mit dem kleineren Nummerkreis einwandfrei die Nummer hochzählt,
beginnt das 2 Programm nach ein paar Tagen bis Wochen wieder bei 20000000.

Wäre es möglich, dass die TIniFile Komponente von Delphi (Delphi 7 Enterprise) mit der hohen Zahl nicht klarkommt?
Die maximale Grenze vom Integer ist ja eigentlich bei weitem noch nicht erreicht.

Langsam werde ich verrückt....

MfG Johannes

_________________
Ist der Ruf erst ruiniert, lebts sich gänzlich ungeniert...
Wilhelm Busch (1832 - 1908)
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 08.01.09 11:29 
30 Millionen sollten eigentlich kein Problem darstellen. Zeig doch mal die Routinen zum Lesen/Setzen, evtl. ist da ein klitzekleines Fehlerchen drin.
jojo-sp Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 317

Windows XP Prof, Vista Ultimate & Home Premium, Windows 7
Delphi 7 Enterprise, Delphi 2009
BeitragVerfasst: Do 08.01.09 12:06 
Eigentlich ist es nichts wildes.

Die Routinen sind in beiden Progs identisch, bis halt auf den Nummernkreis.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  ini:= TIniFile.Create(ChangeFileExt(Application.Exename,'.ini'));
  lf:= ini.ReadInteger('Main','LfdNr',20000000);
  inc(lf);
  if not lf in [20000000..29999999] then lf:= 20000000;
  //...
  ini.WriteInteger('Main','LfdNr',lf);
  ini.Free;


Ich kann da zumindest keinen Fehler finden. Da er bei einem Fehler wieder bei 20000000 beginnt, kann der Fehler nur beim Write oder Read auftreten. Ein gleichzeitiges Lesen/Schreiben der ini ist eigentlich auch asugeschlossen.

_________________
Ist der Ruf erst ruiniert, lebts sich gänzlich ungeniert...
Wilhelm Busch (1832 - 1908)
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Do 08.01.09 12:10 
Die Ini arbeitet korrekt..

ausblenden Delphi-Quelltext
1:
  if not lf in [20000000..29999999] then lf:= 20000000;					

Im Moment macht Delphi:
lf wird durch das "not" binär invertiert, und DANACH geprüft, ob es in dem Bereich liegt.

ausblenden Delphi-Quelltext
1:
  if not (lf in [20000000..29999999]) then lf:= 20000000;					


Edit: Du solltest dir übrigens try..finally angewöhnen.

_________________
PROGRAMMER: A device for converting coffee into software.
jojo-sp Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 317

Windows XP Prof, Vista Ultimate & Home Premium, Windows 7
Delphi 7 Enterprise, Delphi 2009
BeitragVerfasst: Do 08.01.09 12:20 
Ich hatte das nur ausm Kopf getippt.

Ein Try finally existiert und die Klammern auch (Habe ich gerade nachgesehen :-) ).

_________________
Ist der Ruf erst ruiniert, lebts sich gänzlich ungeniert...
Wilhelm Busch (1832 - 1908)