Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Eintrag in Registrierungsdatenbank schreiben (https://www.delphipraxis.net/104268-eintrag-registrierungsdatenbank-schreiben.html)

Chrissi91 30. Nov 2007 13:27


Eintrag in Registrierungsdatenbank schreiben
 
Hi,

meine Frage: Bin ich dumm oder bin ich dumm? :stupid: :gruebel:

Delphi-Quellcode:
var
  R: TRegistry;
begin
  R := TRegistry.Create(HKEY_LOCAL_MACHINE);
  R.OpenKey('SOFTWARE\Pyrgo\Vertretungsplan\', False);
  R.WriteString('Hash', MD5Print(MD5String(edtPw1.Text)));
  R.Free;
Ich habe bei OpenKey sowohl True, als auch False ausprobiert (Hab wieder vergessen wozu das gut war).

Ich verstehe nicht, warum er bei mir keinen Eintrag erstellt (natürlich habe ich die Rechte dazu, auf die Reg-DB zuzugreifen.), dabei habe ich den Code 1:1 aus einem alten Programm kopiert, wo es eigentlich funktioniert hat ... :mrgreen:

EDIT: Ganz vergessen. Der Key existiert vorher nicht, das Verzeichnis Pyrgo\Vertretunsplan auch nicht. Aber ich glaube da ist das True bzw. False für verantwortlich bei OpenKey (True müsste glaube ich für Erstellen bzw. Überschreiben sein.)

RavenIV 30. Nov 2007 13:40

Re: Eintrag in Registrierungsdatenbank schreiben
 
Da fehlt das CloseKey.
Erst von CloseKey wird der Wert in die Registry geschrieben.

P.S.
Du bist dumm ;-)

DeddyH 30. Nov 2007 13:41

Re: Eintrag in Registrierungsdatenbank schreiben
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('SOFTWARE\Pyrgo\Vertretungsplan\', true) then
      begin
        Reg.WriteString('Foo','Bar');
        Reg.CloseKey;
      end;
  finally
    Reg.Free;
  end;
end;

Chrissi91 30. Nov 2007 13:44

Re: Eintrag in Registrierungsdatenbank schreiben
 
:wall: :wall: :wall:

Das ist ja dasselbe wie mit AssignFile und CloseFile ....

Naja, mein Infolehrer hätte den Fehler eh nicht gefunden. So dumm kann ich dann ja nicht sein. :mrgreen:

RavenIV 30. Nov 2007 13:50

Re: Eintrag in Registrierungsdatenbank schreiben
 
Zitat:

Zitat von Chrissi91
Das ist ja dasselbe wie mit AssignFile und CloseFile ....

ja genau.

Du kannst Dir folgendes merken.
Diese beiden Befehle gehören immer zusammen:
Open - Close, Assign - Close, Create - Free.

Wenn Du eine Türe aufmachst, dann machst Du sie ja auch wieder zu, oder?
Du startest den Motor des Autos, fährst in der Gegend rum. Wenn Du angekommen bist, machst Du den Motor ja auch wieder aus, oder?

Chrissi91 30. Nov 2007 14:01

Re: Eintrag in Registrierungsdatenbank schreiben
 
Zitat:

Zitat von RavenIV
Zitat:

Zitat von Chrissi91
Das ist ja dasselbe wie mit AssignFile und CloseFile ....

Wenn Du eine Türe aufmachst, dann machst Du sie ja auch wieder zu, oder? Öhm ... Bin in der U-Bahn geboren. :mrgreen:
Du startest den Motor des Autos, fährst in der Gegend rum. Wenn Du angekommen bist, machst Du den Motor ja auch wieder aus, oder? Echt? ^^

Wenn ich euch jetzt sage, dass es doch nicht funktionbiert? ^^

DeddyH 30. Nov 2007 14:04

Re: Eintrag in Registrierungsdatenbank schreiben
 
Mal als Admin versucht? Als Hauptbenutzer ging es hier bei mir.

Chrissi91 30. Nov 2007 14:13

Re: Eintrag in Registrierungsdatenbank schreiben
 
Ich habe nur einen Account. Und der ist normalerweise der Admin. :P

DeddyH 30. Nov 2007 14:15

Re: Eintrag in Registrierungsdatenbank schreiben
 
Und Du hast mein Beispiel genommen bzw. RootKey gesetzt?

Chrissi91 30. Nov 2007 14:21

Re: Eintrag in Registrierungsdatenbank schreiben
 
Nein, ich habe meins mit CloseKey genommen. Denn so hat das ja früher auch mal geklappt. Deins funzt einwandfrei. Aber meines soll auch funzen. :stupid:

DeddyH 30. Nov 2007 14:23

Re: Eintrag in Registrierungsdatenbank schreiben
 
Der Parameter im Konstruktor von TRegistry bezieht sich aber nicht auf den Wurzelknoten, sondern auf den Zugriffsmodus. Von daher verwundert mich das schon, dass das schonmal funktioniert haben soll.

Luckie 30. Nov 2007 22:53

Re: Eintrag in Registrierungsdatenbank schreiben
 
Ruft die Methode Free nicht automatsich CloseKey auf?

RavenIV 3. Dez 2007 08:00

Re: Eintrag in Registrierungsdatenbank schreiben
 
Zitat:

Zitat von Luckie
Ruft die Methode Free nicht automatsich CloseKey auf?

Wie kommst Du auf diese Idee?
TRegistry ist direkt von TObject abgeleitet.
Und das TRegistry.Free ist das TObject.Free.

Luckie 3. Dez 2007 08:40

Re: Eintrag in Registrierungsdatenbank schreiben
 
Na dann guck dir mal den Destruktor von TRegistry an:
Delphi-Quellcode:
destructor TRegistry.Destroy;
begin
  CloseKey;
  inherited;
end;
Das TRegistry von TObject abgeleitet ist, heißt ja noch lange nicht, dass im Destruktor nichts weiter passiert. Und da Free Destroy aufruft, kann man durch aus sagen, dass Free indirekt auch CloseKey aufruft. Meine Vermutung basierte darauf, da auch TFielStream.Free die Datei schliesst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 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