Psycho Fred Geschrieben 3. September 2003 Geschrieben 3. September 2003 Hallo Leutz, ich hab ein Prog, das bestimmte Registry Einträge ausliest. Das tut es unter Win 98 auch fehlerfrei, nur bei 2000/XP nicht ganz. zwei von drei prozeduren funktionieren, nur die dritte nicht. hier der quelltext dazu: PMa: String[200]; {PM Prüfungsvariablen} PMb: String[200]; PMc: Dword; rocedure TForm1.readPMa; var reg: TRegistry; begin reg:=TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', TRUE) then if reg.valueexists('Bin') then PMa := Reg.ReadString('Bin') else PMa := 'Kein Schlüssel vorhanden' finally Reg.CloseKey; Reg.Free; end; end; procedure TForm1.readPMb; var reg: TRegistry; begin reg:=TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', TRUE) then if reg.valueexists('DBPath') then PMb := Reg.ReadString('DBPath') else PMb := 'Kein Schlüssel vorhanden' finally Reg.CloseKey; Reg.Free; end; end; procedure TForm1.readPMc; var reg: TRegistry; begin reg:=TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', TRUE) then if reg.valueexists('CurrentVersion') then PMc := Reg.ReadInteger('CurrentVersion') finally Reg.CloseKey; Reg.Free; end; end; Form2.Label12.Caption := PMa; Form2.Label13.Caption := PMb; Form2.Label14.Caption := inttostr(PMc); ist da irgendwas drin, was unter 2000/XP nicht klappen kann? programm ist mit Delphi 6 geschrieben. danke im voraus für eure hilfe. fred Zitieren
grueni Geschrieben 3. September 2003 Geschrieben 3. September 2003 Könntest du etwas genauer sagen, was da nicht klappt ? Kommt eine Fehlermeldung, findet er den Schlüssel nicht oder was passiert da ? BTW: Deklarier deine String-Variablen einfach mit "string" und nicht mit "string[n]", kann u.U. Fehler geben, wenn du einen String>n zuweisen willst (Der Win2000/XP-Bug im QReport kommt von sowas !) Zitieren
Psycho Fred Geschrieben 3. September 2003 Autor Geschrieben 3. September 2003 danke für die antwort, das wars leider nicht. er insgesamt 9 registry einträge auslesen. findet er den nicht, soll er schreiben, das nix da ist. bei 98 klappen alle neun, bei 2000/XP nur die ersten 6. da lässt er einfach alles leer. hoffe, das war so halbwegs verständlich? *g* Zitieren
grueni Geschrieben 3. September 2003 Geschrieben 3. September 2003 Also bei der letzten procedure passiert gar nichts, wenn OpenKey fehlschlägt, bei den anderen zwei setzt er den String auf den Fehlertext. Du mußt den Fall behandlen, wenn OpenKey false zurückgibt ! also ungefähr so: if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', TRUE) then if reg.valueexists('CurrentVersion') then PMc := Reg.ReadInteger('CurrentVersion') else Form2.Label4.Caption := 'Kein Schlüssel !'; finally Reg.CloseKey; Reg.Free; end; Das mit den string-Variablen war auch nicht direkt auf dein Problem bezogen, wäre es das gewesen, hätte dich dein Compiler mit Fehlermeldungen bombardiert ! Zitieren
Psycho Fred Geschrieben 3. September 2003 Autor Geschrieben 3. September 2003 nee, bei der letzten procedure geht das nicht so einfach, die variable ist ja als DWORD deklariert, welche ja ein integer typ ist. wie das klappt, hab ich noch nicht raus. eigentlich geht es dann nur um die ersten beiden prozeduren. unter 98 funzen die, nur unter 2000/XP halt nicht... Zitieren
grueni Geschrieben 3. September 2003 Geschrieben 3. September 2003 Mach es z.B. so: if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', TRUE) then if reg.valueexists('CurrentVersion') then PMc := Reg.ReadInteger('CurrentVersion') else PMc := -1; .... if PMc=-1 then Form1.Label14.Caption := 'Kein Schlüssel !'; Ich vermute, daß der Schlüssel unter 2k/XP nicht erzeugt werden kann, daher gibt OpenKey false zurück, und genau auf diesen Fall mußt du reagieren. Ich gehe mal davon aus, daß die Versionsnummer nicht -1 lauten kann, und verwende diesen Wert als "Fehler-Flag". Zitieren
Psycho Fred Geschrieben 3. September 2003 Autor Geschrieben 3. September 2003 das funzt auch nicht, ist aber nicht so schlimm. bei version steht dann ne 0, das ist egal. das doofe ist ja, das ich nix angezeigt bekomme bei den ersten beiden prozeduren. das ist das hauptprob. Zitieren
grueni Geschrieben 3. September 2003 Geschrieben 3. September 2003 Ich hab das zwar nicht ausprobiert (ich glaub auch nicht, daß das laufen würde), aber manche Zustände werden in deinem Prog gar nicht abgefangen, ich würds so ähnlich machen: binValue: string; dbPathValue: string; versionValue: string; procedure TForm1.readPMa; var reg: TRegistry; begin reg:=TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; //bei true wird der Schlüssel angelegt, wollen wir das wirklich ? if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', FALSE) then begin if reg.valueexists('Bin') then binValue := Reg.ReadString('Bin') else binValue := 'Kein Wert vorhanden !'; end else binValue := 'Kein Schlüssel vorhanden'; finally Reg.CloseKey; Reg.Free; end; end; procedure TForm1.readPMb; var reg: TRegistry; begin //todo siehe code von readPMa end; procedure TForm1.readPMc; var reg: TRegistry; begin try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey ('Software\CG\DentalDirect\PraxisMaterial', FALSE) then begin if reg.valueexists('CurrentVersion') then versionValue := intToStr(Reg.ReadInteger('CurrentVersion')) else versionValue := 'Kein Wert vorhanden !'; end else versionValue := 'Kein Schlüssel vorhanden'; finally Reg.CloseKey; Reg.Free; end; Form2.Label12.Caption := binValue; Form2.Label13.Caption := dbPathValue; Form2.Label14.Caption := versionValue; Jetzt weiß ich, warum ich mit IniFiles arbeite ! Zitieren
Psycho Fred Geschrieben 3. September 2003 Autor Geschrieben 3. September 2003 juhu paulaner, das wars. vielen dank. also die ersten beiden proceduren klappen, die dritte nicht, aber das wird schon noch. ich schlag dich mal meinem chef als neuer ausbildungsbetreuer vor. ;o) grüße aus koblenz nach ravensburg. fred Zitieren
grueni Geschrieben 3. September 2003 Geschrieben 3. September 2003 Ach so, ich bräuchte noch deine Adresse wegen der Rechnungsanschrift ! :D Gruß zurück. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.