Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi neue ini einträge werden nicht gespeichert (https://www.delphipraxis.net/146325-neue-ini-eintraege-werden-nicht-gespeichert.html)

Sektalas 18. Jan 2010 04:51


neue ini einträge werden nicht gespeichert
 
Hallo, ich bin fast am verzweifeln, weil es eigentlich eine einfache sache ist, aber es will einfach nicht klappen

An einem bestimmten Teil des programmes, werden die ini informationen ausgelesen und können geändert werden.

Aber ab da wo die Einträge in der Ini quasi geupdatet werden sollen, speichert er einfach nicht die neuen daten

Delphi-Quellcode:
 if fileexists(ExtractFilePath(ParamStr(0))+ 'db.plt') then
    begin
      ini2:=TIniFile.Create(ExtractFilePath(ParamStr(0))+ 'db.plt');
        try

            ini2.WriteInteger(playername, 'points', StrToInt(Edit1.Text)); //Neue Punkte schreiben
            ini2.WriteString(playername, 'editdate', DateToStr(date)); // Editierdatum schreiben
            ini2.WriteInteger(playername, 'puffer', newpuffer); //Puffer schreiben
            //ini.WriteInteger(playername, 'penalty', penalty); // Strafpunkt setzen (folgt später)
            ini2.UpdateFile;
        finally
         ini2.free;
        end;
    end;
Keiner der Writevorgänge funktioniert.

Am einem anderen teil im programm wiederum funktioniert es reibunglos

Delphi-Quellcode:
 if fileexists(ExtractFilePath(ParamStr(0))+ 'db.plt') then
    begin
      ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+ 'db.plt');
        try
            ini.WriteInteger(playername, 'points', StrToInt(playerpoints));
            ini.WriteString(playername, 'adddate', DateToStr(date));
            ini.WriteInteger(playername, 'puffer', puffer_calc);
            ini.WriteInteger(playername, 'penalty', 0);
            ini.WriteString(playername, 'edit', '');
        finally
         ini.free;
        end;
    end;
Ich finde einfach den Fehler nicht

mkinzler 18. Jan 2010 07:02

Re: neue ini einträge werden nicht gespeichert
 
Steht in Edit1.Text auch ein Intefger drin?
Besser TryStrToInt(), StrToIntDef() nehmen

dataspider 18. Jan 2010 07:13

Re: neue ini einträge werden nicht gespeichert
 
Hi,

vielleicht stört ja auch das UpdateFile...
Ab NT werden die Daten ja nicht mehr gepuffert.
Braucht man wohl noch unter Linux...

Frank

himitsu 18. Jan 2010 07:20

Re: neue ini einträge werden nicht gespeichert
 
Zitat:

Zitat von mkinzler
Steht in Edit1.Text auch ein Intefger drin?

Wenn nicht, dann würde ich mich beschweren, weil er uns die Fehlermeldung verschwiegen hat. :zwinker:

Uwe Raabe 18. Jan 2010 07:31

Re: neue ini einträge werden nicht gespeichert
 
Ich tippe eher darauf, daß das Ganze unter Vista und Windows 7 läuft und der Dateivirtualisierer zuschlägt.

Delphi-Quellcode:
ExtractFilePath(ParamStr(0))+ 'db.plt'
Wenn man dann die geänderten INI-Einträge im Programmverzeichnis sucht, wird man nur die unveränderte INI-Datei finden.

hoika 18. Jan 2010 07:43

Re: neue ini einträge werden nicht gespeichert
 
Hallo,

glaube ich nicht

Zitat:

Am einem anderen teil im programm wiederum funktioniert es reibunglos
An den Thread-Ersteller.

Lösche die Ini mal und lasse sie durch den
nicht funktionierenden Code anlegen.
Vorher darf der funktionierende Teil aber nicht aufgerufen werden !

Falls es tatsächlich Vista oder Win7 ist,
les dir mal was zu "Ini nichts ins Programm-Verzeichnis" durch.

Das wurde hier schon so oft durchgekaut.

Und noch was:
Warum schreibst du den Code doppelt ? Don't repeat yourself (DRY).

Jetzt hast du 2 Stellen "Ini-Schreiben", die sich nur durch die Werte unterscheiden.

Mache genau eine Methode mit Parametern draus,
dann kannst schön einen Breakpoint setzen,
und u.a. ausschließen, dass die Code-Stück 2
nicht aus Versehen noch mal aufrufst und dabei deine anderen Werte wieder überschreibst.

Es bietete sich z.B. an, Darum / Uhrzeit (incl.Sekunden) mit in die Ini zu schreiben.


Heiko

Sektalas 18. Jan 2010 16:06

Re: neue ini einträge werden nicht gespeichert
 
Danke für die vielen Antworten, kam leider jetzt erst zum lesen.

Zitat:

Zitat von mkinzler
Steht in Edit1.Text auch ein Intefger drin?
Besser TryStrToInt(), StrToIntDef() nehmen

In onkeypress wird überprüft ob die eingabe ein integerwert ist. aber ich werde es trotzdem in Try ändern. Danke. Aber das der fehler hier entseht denke ich nicht, auch wenn ich 100% einen integerwert eingebe, besteht das problem.

Zitat:

Zitat von dataspider
Hi,

vielleicht stört ja auch das UpdateFile...
Ab NT werden die Daten ja nicht mehr gepuffert.
Braucht man wohl noch unter Linux...

Frank

Ich hab es mit und ohne probiert, aber es bleibt alles beim gleichen :(


Zitat:

Zitat von himitsu
Zitat:

Zitat von mkinzler
Steht in Edit1.Text auch ein Intefger drin?

Wenn nicht, dann würde ich mich beschweren, weil er uns die Fehlermeldung verschwiegen hat. :zwinker:

Ich will eine problemlösung und werde euch nichts verheimlichen ;)


Zitat:

Zitat von Uwe Raabe
Ich tippe eher darauf, daß das Ganze unter Vista und Windows 7 läuft und der Dateivirtualisierer zuschlägt.

Delphi-Quellcode:
ExtractFilePath(ParamStr(0))+ 'db.plt'
Wenn man dann die geänderten INI-Einträge im Programmverzeichnis sucht, wird man nur die unveränderte INI-Datei finden.

Auf Windows Vista/7 (in meinem fall 7) würde ich es auch schieben. Auch die UAC dachte ich mir zuerst. Aber da die genannte procedure ja funktionier ist es mir ein Rätsel.

-------------------



Zitat:

Zitat von hoika
Hallo,

glaube ich nicht

Zitat:

Am einem anderen teil im programm wiederum funktioniert es reibunglos
An den Thread-Ersteller.

Lösche die Ini mal und lasse sie durch den
nicht funktionierenden Code anlegen.
Vorher darf der funktionierende Teil aber nicht aufgerufen werden !

... (will keinn fullquote machen)

Hab ich mal gemacht, di eini gelöscht und dann den scheinbar nicht funktionierenden code gestartet. Es wird dort keine ini erstellt geschweigedenn etwas in ihr gespeichert

Zitat:

Falls es tatsächlich Vista oder Win7 ist,
les dir mal was zu "Ini nichts ins Programm-Verzeichnis" durch.
Werde ich mal tun, wusste ich nicht, das es sowas gibt.

Zitat:

Warum schreibst du den Code doppelt ? Don't repeat yourself (DRY). ....
Diese 2 Aufrufe sind unabhängig voneinander


Edit:
Selbst wenn ich das Programm auserhalb der Entwicklungsumgebung als Administrator starte, passiert scheinbar nichts

Edi2: Jetzt hab ich das ganze in den Eigene Dateien ordner gemacht (die ini) trotzdem wird nichts geändert

DeddyH 19. Jan 2010 09:39

Re: neue ini einträge werden nicht gespeichert
 
Ich würde Folgendes tun: zuerst einmal eine Konstante deklarieren, damit Du garantiert überall denselben Dateinamen verwendest. Dann nicht im eigenen Programmverzeichnis speichern, das kann u.U. zur Virtualisierung führen wie schon angesprochen. Das Schreiben dann in eine eigene Methode auslagern und zum Schluss noch kontrollieren, ob "playername" in beiden Fällen befüllt ist.

blauweiss 19. Jan 2010 10:07

Re: neue ini einträge werden nicht gespeichert
 
Hallo Sektalas,

untersuche doch einfach, ob die Routine überhaupt aufgerufen wird.
Dazu setzt Du entweder einen Breakpoint, oder (wenn Du mit dem Debugger nicht firm bist) Du baust testweise ein ShowMessage ein.

blauweiss

hoika 19. Jan 2010 11:53

Re: neue ini einträge werden nicht gespeichert
 
Hallo,

Zitat:

Diese 2 Aufrufe sind unabhängig voneinander
Es geht nicht um den Aufruf.
Der Code unterscheidet sich kaum voneinander.

Also in eine eigenständige Methode packen,
und die Ini-Werte als Parameter übergeben.

Dann reicht genau ein Breakpoint, um das zu debuggen.

Dass ExtractFileXXX nur einmal im Programmcode erscheinen soll,
wurde ja bereits gesagt.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 Uhr.
Seite 1 von 2  1 2      

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