Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi eigener String in Registry (https://www.delphipraxis.net/55194-eigener-string-registry.html)

tyron78 17. Okt 2005 22:00


eigener String in Registry
 
Hallo.
Hab hier schon ne Weile in der Praxis gesucht, aber noch nichts passendes gefunden. Nach meinem (dank Euch) erfolgreichem Versuch mit Access habe ich mich (auf raten eines Kollegen hin) entschlossen, auf Interbase umzuschenken, bevor meine Anwendung zu umfangreich ist.
Ich habe also (erstmal Manuell) einen Registryeintrag (IBCON) erstellt, der sich wie folgt zusammensetzt:

Dateiname (inkl. Pfad) +'>>'+ Username + '>>'+ Passwort

Dieser wird später wird in die einzelnen Komponenten aufgebröselt und es wird ein connect zur DB erstellt (klappt soweit auch - habs mal ohne Registry also hardcodiert getestet).

Entspricht zwar keinerlei Security-Richtlinien oder ähnlichem, aber da die Anwendung nur lokal läuft ist das vorerst egal.
Ich versuche mit folgendem Code die Registry auszulesen:

Delphi-Quellcode:
    function ReadDSNFromRegistry(DSN: string): string;
    var Registry: TRegistry;
        Reg_Result: string;
    begin
      Registry:=TRegistry.Create;
      try
        Registry.RootKey:=HKEY_LOCAL_MACHINE;
        if Registry.KeyExists('\Software\mydir\myapp')=true then begin
          if Registry.OpenKey('\Software\mydir\myapp',true)=true then
            Reg_Result := Registry.ReadString('IBCON')
          else
            Reg_Result := '';
          end
        else
          Reg_Result := '';
        finally
          Registry.Free;
          Result := Reg_Result;
        end;
    end;
Nun bekomme ich bereits beim Start der Anwendung die Fehlermeldung "Kein zulässiger Dateiname". Entferne ich den Teil nach dem Dateinamen (>> etc.) kommt die Fehlermeldung "Nicht erkennbares Datenbankformat". Woran kann das liegen??? Hoffe mir kann hier jemand helfen... Danke im Vorraus.

Tyron

SirThornberry 17. Okt 2005 22:13

Re: eigener String in Registry
 
wenn du vorher prüfen willst ob der Key in der Registry existiert kannst du auch das KeyExists weg machen und den zweiten Parameter von OpenKey auf False setzen. Desweiteren gehört es sich eigentlich das man CloseKey aufruft wenn das OpenKey geklappt hat.
Zu deinem Fehler den du bekommst. Der hat eignetlich nix mit dem Quellcode zu tun den du hier gepostet hast da dies ja das auslesen der Registry ist und nichts mit dem öffnen der Datenbank etc. zu tun hat. Du übergibst der funktion ja "DSN" aber wo verwendest du das innerhalb der funktion?

Christian Seehase 17. Okt 2005 22:16

Re: eigener String in Registry
 
Moin Tyron,

als erstes sollest Du mal Reg_Result zu Beginn der Routine initialisieren.
Dann ist die Überprüfung mit KeyExists überflüssig, wenn Du sowieso Open mit true verwendest, ausserdem solltest Du bei booleschen Abfragen = true weglassen.
Wenn OpenKey erfolgreich war, solltest Du den Key auch wieder schliessen.

Dein eigentliches Problem liegt allerdings wohl nicht beim Auslesen des Wertes aus der Registry, sondern bei der Verarbeitung des zurückgegebenen Wertes.

tyron78 17. Okt 2005 22:28

Re: eigener String in Registry
 
Hallo.

Danke für die schnelle Antwort und die Tips. Hab den Fehler gerade gefunden: Die Funktion wurde noch in nem anderen Unit aufgerufen, was ich eigentlich nicht mehr verwende aber noch im Projekt habe... hab den Aufruf auskommentiert (brauch den Rest der Unit noch als Vorlage) - jetzt klappts.

mfg

Tyron


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 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 by Thomas Breitkreuz