AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Registry lesen

Ein Thema von oldmann · begonnen am 3. Sep 2020 · letzter Beitrag vom 4. Sep 2020
Antwort Antwort
Seite 1 von 2  1 2      
oldmann

Registriert seit: 10. Okt 2008
Ort: Weyhe
138 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Registry lesen

  Alt 3. Sep 2020, 16:36
Hallo,

ich benutze Delphi Tokyo 10.2.2 mit Windows10.
Ich habe ein Problem beim Lesen der Registry.
Ich schreibe Werte aus dem Programm in die Registry.
Am Anfang jedoch, wenn das Programm neu installiert wird, sind diese Werte noch nicht vorhanden.
Beim lesen von Strings gibt es kein Problem.
Wenn ich jedoch Integer auslesen will, die noch nicht vorhanden sind, gibt es eine Fehlermeldung.
Wie kann ich die Werte abfragen ohne das eine Fehlermeldung ausgegeben wird ?
Für Eure Hilfe wäre ich dankbar.

Gruß Oldmann
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#2

AW: Registry lesen

  Alt 3. Sep 2020, 17:22
Was für eine Fehlermeldung erscheint da? Wie sieht der zugehörige Code aus?

Grüße
Dalai
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#3

AW: Registry lesen

  Alt 3. Sep 2020, 17:47
Hmm..

wenn Du nur zum Lesen die Reg öffnest, dann sollte Dir OpenKey(<Pfad>, False) ein 'False' zurückgeben, wenn dein Registry-Pfad nicht vorhanden ist...

Somit gehe ich von aus (mangels SourceCode), dass Du den Rückgabewert ignorierst und trotzdem versuchst mit Readxxx Werte zu Lesen..
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
oldmann

Registriert seit: 10. Okt 2008
Ort: Weyhe
138 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Registry lesen

  Alt 4. Sep 2020, 09:15
Hallo,

Hier der Code:

procedure Registry_lesen;
begin
with TRegistry.Create do
begin
try
Rootkey:=HKEY_CURRENT_USER;
if OpenKey('Software\Windaxlg',True) then
begin
test.str_1:=ReadString('Win1');
test.str_2:=ReadString('Win2');
aufrufe:=ReadInteger('Win3');
test.Tage:=ReadInteger('Win4');
test.str_4:=ReadString('Win4');
end;
finally
Free;
end;
end;
end;

Am Anfang ist der Code ja bei dem Anwender nicht vorhanden.
Er wird erst im laufe der Programmausführung gespeichert.
Daher bekomme ich bei den Integern eine Fehlermeldung.
Die Fehlermeldung lautet: „Fehler beim Holen der Daten von Win3“

Oldmann
  Mit Zitat antworten Zitat
oldmann

Registriert seit: 10. Okt 2008
Ort: Weyhe
138 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Registry lesen

  Alt 4. Sep 2020, 09:16
Hallo,

Hier der Code:

[GOOGLE]
Delphi-Quellcode:
procedure Registry_lesen;
begin
with TRegistry.Create do
begin
try
Rootkey:=HKEY_CURRENT_USER;
if OpenKey('Software\Windaxlg',True) then
begin
test.str_1:=ReadString('Win1');
test.str_2:=ReadString('Win2');
aufrufe:=ReadInteger('Win3');
test.Tage:=ReadInteger('Win4');
test.str_4:=ReadString('Win4');
end;
finally
Free;
end;
end;
end;
[/GOOGLE]Am Anfang ist der Code ja bei dem Anwender nicht vorhanden.
Er wird erst im laufe der Programmausführung gespeichert.
Daher bekomme ich bei den Integern eine Fehlermeldung.
Die Fehlermeldung lautet: „Fehler beim Holen der Daten von Win3“

Oldmann
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#6

AW: Registry lesen

  Alt 4. Sep 2020, 10:41
Fälschlicherweise war ich der Annahme, dass Delphi-Referenz durchsuchenTRegistry.ReadInteger keine Exception wirft. Die Doku sagt aber klar:
Zitat:
If the Registry entry does not contain an integer, an exception is raised.
Daher wird es wohl sinnvoll sein, vor jedem Read... mit TRegistry.ValueExists zu prüfen, ob der Wert vorhanden ist, und bei Nichtvorhandensein einen Standardwert zu setzen.

Unabhängig davon solltest du auf das with verzichten.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.292 Beiträge
 
Delphi 12 Athens
 
#7

AW: Registry lesen

  Alt 4. Sep 2020, 11:27
Zitat:
Unabhängig davon solltest du auf das with verzichten.
...er hat Jehova gesagt.
  Mit Zitat antworten Zitat
oldmann

Registriert seit: 10. Okt 2008
Ort: Weyhe
138 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Registry lesen

  Alt 4. Sep 2020, 11:58
Hallo,

wie wird das genau umgesetzt dein "TRegistry.ValueExists zu prüfen".
Ein bischen code wäre nett.
Wenn ich das "With" weglasse, funktioniert es nicht.

Oldmann
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#9

AW: Registry lesen

  Alt 4. Sep 2020, 12:44
Delphi-Quellcode:
procedure Registry_lesen;
var
  reg : TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.Rootkey := HKEY_CURRENT_USER;
    if reg.OpenKey('Software\Windaxlg',True) then begin
      if reg.ValueExists('Win1') then test.str_1 := reg.ReadString('Win1') else test.str_1 := '';
      if reg.ValueExists('Win2') then test.str_2 := reg.ReadString('Win2') else test.str_2 := '';
      if reg.ValueExists('Win3') then aufrufe := reg.ReadInteger('Win3') else aufrufe := 0;
      if reg.ValueExists('Win4') then test.Tage := reg.ReadInteger('Win4') else test.Tage := 0;
      if reg.ValueExists('Win4') then test.str_4 := reg.ReadString('Win4') else test.str_4 := '';
    end;
  finally
    reg.Free;
  end;
end;
ungetestet hingedaddelt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#10

AW: Registry lesen

  Alt 4. Sep 2020, 13:32
StrToIntDef(reg.ReadString('Win3'), 0)



Exists hilft hier nicht unbedingt, da es zwei Fehlerstellen gibt.
Einmal den Value gibt es nicht und bei ReadInteger auch noch wenn es kein Integer (DWORD) ist.

Man könnte hier vielleicht mit "einfach" mit TRegIniFile rumspielen.
In den IniFile-Klassen wird bei fehlende oder falschen Werten der Default genommen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.
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