AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Datei suchen u. Path dann in die Registry schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Datei suchen u. Path dann in die Registry schreiben

Ein Thema von m-werk · begonnen am 19. Jul 2002 · letzter Beitrag vom 31. Jul 2002
Antwort Antwort
Seite 1 von 3  1 23      
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#1

Datei suchen u. Path dann in die Registry schreiben

  Alt 19. Jul 2002, 20:44
Hi Leute,

Ich hab ein kleines Formular erstellt, mit den Buttons: Suchen, Aktualisieren und Beenden.

Weiters habe ich noch ein Label mit den Namen "Pfad" drinn.

Wie kann ich es machen damit, wenn ich auf Suchen gehe, im Label dann der genaue Pfad drinn steht, wo die Datei liegt. Ich möchte aber nicht die Datei eingeben, nach der gesucht wird, denn diese Datei hat einen Fixen Namen "Kundendaten.mdb". Es soll einfach nach dieser Datei im "ARBEITSPLATZ" gesucht werden. Es ist doch so, dass dann die ganzen Festplatten automatisch durchsucht werden.

Das Ergebnis soll dann im Label ersichtlich sein. Sollte die Datei nicht gefunden werden, so soll eine Messagebox erscheinen wo dann drinn steht: "Leider konnte die Datenbank auf Ihrem PC nicht gefunden werden".

Beim Button "Aktualisieren" soll dann der Path der in der Label steht dann in die Registry unter HKEY_CURRENT_USER\Software\AriusDB\SettingsDB gespeichert werden.

Kann mir da jemand helfen?
Grüße, m-werk
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: Datei suchen u. Paht dann in die Registry schreiben

  Alt 19. Jul 2002, 20:59
Zitat von m-werk:
Ich möchte aber nicht die Datei eingeben, nach der gesucht wird, denn diese Datei hat einen Fixen Namen "Kundendaten.mdb". Es soll einfach nach dieser Datei im "ARBEITSPLATZ" gesucht werden. Es ist doch so, dass dann die ganzen Festplatten automatisch durchsucht werden.
Nein! Der "Arbeitsplatz" ist sozusagen ein virtueller Ordner, der nicht wirklich existiert. Wenn du eine Datei auf allen Festplatten suchen willst, dann musst du in dieser Reihenfolge vorgehen:
  • die Anzahl der Festplatten herausfinden
  • mit FindFirst/FindNext/FindClose nach der Datei suchen

Zitat:
Das Ergebnis soll dann im Label ersichtlich sein. Sollte die Datei nicht gefunden werden, so soll eine Messagebox erscheinen wo dann drinn steht: "Leider konnte die Datenbank auf Ihrem PC nicht gefunden werden".
Das ergibt sich dann durch das Suchen der Datei.

Zitat:
Beim Button "Aktualisieren" soll dann der Path der in der Label steht dann in die Registry unter HKEY_CURRENT_USER\Software\AriusDB\SettingsDB gespeichert werden.
Im Prinzip hast du deine eigene Frage bereits beantwortet. Registry-Zugriffe hast du durch deine 30-Tage-Ideen usw. bereits geübt.
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#3
  Alt 20. Jul 2002, 13:35
Hier ein kleines Tut über die Arbeit mit der Registry 1:1 aus dem EDH
Zitat:
Mit der Registry arbeiten


Was ist die Registry?

Die Registry ist die zentrale Datenbank eines Windows-Betriebssystems

In der Registry werden die meisten Einstellungen und Informationen des Betriebssystems gespeichert. Dazu gehören unter anderem der Dateiname des Hintergrundbildes, Informationen über installierte Software und vieles mehr. Diese Werte/Informationen lassen sich ohne große Umstände aus der Datenbank auslesen und abändern.

ACHTUNG! Beachte, dass durch die Manipulation der Registry tief ins System eingegriffen wird. Lege zuvor ein Backup Deiner persönlichen Dateien an, um Datenverlust vorzubeugen.


Eine Instanz des Objektes erstellen

Delphi kapselt den Registryzugriff in einem Objekt namens TRegistry. Es befindet sich in der Unit Registry, welche Du der uses-Klausel hinzufügen musst. Bevor Du mit diesem Objekt arbeiten kannst, musst Du es deklarieren und eine Instanz davon erstellen:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  Registry: TRegistry;
begin
  with TRegistry.Create do
Die Registrierungsdatenbank hat einen hierarchischen Aufbau. Am Anfang dieser Hierarchie stehen mehrere Hauptschlüssel, die wiederum weitere Unterschlüssel enthalten. Alle Schlüssel die Deine Anwendung erzeugt, öffnet oder liest sind Unterschlüssel von diesen vordefinierten Hauptschlüsseln. Die Eigenschaft Rootkey definiert diesen Hauptschlüssel für das TRegistry-Objekt. Standardgemäß wird die Eigenschaft Rootkey bei der Erzeugung des Objekts auf den Wert HKEY_CURRENT_USER gesetzt.

Mögliche Werte von Rootkey:

HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_PERFORMANCE_DATA
HKEY_CURRENT_CONFIG
HKEY_DYN_DATA



Bevor Du jetzt einen Schlüssel erzeugst oder einen Wert aus einem Schlüssel lesen kannst, muss dieser geöffnet werden. Dies geschieht mit dem Aufruf von Openkey:
Code:
function OpenKey(const Key: string;
  CanCreate: Boolean): Boolean;
Die Funktion erwartet zwei Parameter: Erstens den Schlüssel, welcher geöffnet werden soll (immer relativ von bisher geöffneten Schlüsseln) und zweitens einen booleschen Parameter, welcher steuert, ob ein Schlüssel, wenn er noch nicht existiert erstellt werden soll (True) oder nicht (False). Jeder weitere Aufruf von Openkey öffnet den Schlüssel relativ vom bisher geöffnetem Schlüssel. Bevor man also einen anderen Schlüssel öffnen möchte ist der Aufruf CloseKey; notwendig.



Lesen/Schreiben von Werten

Das Objekt ist jetzt bereit in die Registry Werte zu schreiben und auch aus dieser zu lesen. Dies geschieht mit der Methode WriteString bzw. mit ReadString. Die beiden Parameter, die WriteString erwartet, müssen Sie mit Angaben zum Namen (Typ String) und zum Wert (auch vom Typ String), welcher gespeichert werden soll, füllen. Ist der Name bereits vorhanden, wird dieser überschrieben.

ReadString erwartet nur einen Parameter, nämlich den Namen des zu lesenden Werts. Als Result wird der Wert mit diesem Namen zurückgegeben. Man hat auch die Möglichkeit direkt einen Integer-Wert, einen booleschen Wert oder eine Gleitkommazahl in die Registry zu schreiben/lesen. Für diese Aufgabe gibt es die Methoden WriteInteger, WriteBool und WriteFloat, bzw. ReadInteger, ReadBool und ReadFloat. Die Parameter sind bei diesen Methoden identisch mit Ihren Verwandten WriteString und ReadString. Natürlich muss der übergebene Wert bzw. der Rückgabewert vom entsprechenden Typ sein.

Da für das Objekt Speicher reserviert wurde, muss dieser mit Free wieder freigegeben werden.


Beispiel

Es folgt jetzt ein Beispiel, welches einen String (Edit1.Text) und einen Integer (SpinEdit1.Value) in den Schlüssel "HKEY_CURRENT_USER\Software\TestFirma\TestProd ukt" schreibt. Zur Sicherheit kommt das ganze in einen try-finally-Block.
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TRegistry.Create do
  begin
    try
      Rootkey:=HKEY_CURRENT_USER; //Hauptschlüssel
      OpenKey('Software\TestFirma\TestProdukt',True); //Unterschlüssel öffnen
      WriteString('TestString',Edit1.Text);
      WriteInteger('TestInteger',SpinEdit1.Value);
    finally
      Free;
    end;
  end;
end;
Tipp: Sollte der Eintrag nicht sofort in RegEdit erscheinen, einfach mal F5 drücken.

Das Lesen der Werte aus der Registry ist nicht viel schwieriger. Der Wert "TestString" wird in das Edit-Feld eingelesen und die Integer-Zahl "TestInteger" wird SpinEdit1 übergeben. Zur Speichersicherheit wird das ganze in einem try-finally-Block gekapselt.
Code:
procedure TForm1.Button2Click(Sender: TObject);
begin
  with TRegistry.Create do
  begin
    try
      Rootkey:=HKEY_CURRENT_USER;
      OpenKey('Software\TestFirma\TestProdukt',True);
      Edit1.Text:=ReadString('TestString');
      SpinEdit1.Value:=ReadInteger('TestInteger');
    finally
      Free;
    end;
  end;
end;


Weitere Befehle des Objekts TRegistry

TRegistry bietet noch viele weitere Möglichkeiten, die Registry zu bearbeiten.


Einen Wert löschen (im aktuell geöffnetem Schlüssel):
Code:
DeleteValue('NameDesWertes');
Einen Schlüssel löschen (im aktuell geöffneten Hauptschlüssel - Rootkey):
Code:
DeleteKey('Software\TestFirma\TestProdukt');
Testen, ob ein Schlüssel (relativ vom geöffnetem Schlüssel) oder ein Wert existiert:
Code:
Checkbox1.Checked:=KeyExists('TestProdukt');
Checkbox2.Checked:=ValueExists('TestString');

Weitere Befehle findest Du in der OH unter dem Stichwort "TRegistry". Es ist auch ein sehr ausfürhliches Beispiel dabei. Die Erklärungen sind größtenteils verständlich.



--
Name: Philipp Frenzel
E-Mail: webmaster@delphi-treff.de
Homepage: http://www.delphi-treff.de
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4
  Alt 20. Jul 2002, 19:32
Zitat von FuckRacism:
Hier ein kleines Tut über die Arbeit mit der Registry 1:1 aus dem EDH ...
Also, der Link hätte sicher auch gereicht. Entweder auf die Online-Version, oder auf den Download der alten EDH2000-Version.

Außerdem hat m-werk in AUQ.de bereits geschrieben, dass er die Registry-Sache wahrscheinlich auch allein hinbekommt. Nur mit dem Suchen der Datei hat er Probleme.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5
  Alt 20. Jul 2002, 22:37
Zitat von MathiasSimmack:
Außerdem hat m-werk in AUQ.de bereits geschrieben, dass er die Registry-Sache wahrscheinlich auch allein hinbekommt. Nur mit dem Suchen der Datei hat er Probleme.
Wir sind hier leider keine Hellseher und regelmäßgi die Postings auf auq.de kontrollieren wir auch nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#6
  Alt 21. Jul 2002, 00:40
Danke. Luckie.
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#7
  Alt 21. Jul 2002, 08:43
Ich bin auch kein Hellseher. Und wenn ich z.B. eine Frage habe, dann poste ich sie nicht gleichzeitig in mehreren Foren. Ich frage erst mal in einem Forum, und wenn ich dann in - sagen wir mal - einer Woche keine Antwort habe, dann wende ich mich an das nächste.

Oder (wenn es so dringend ist, dass ich doch in zwei Foren gleichzeitig frage) ich informiere die Leute in beiden Foren über den Stand der Dinge. Damit halt alle wissen, dass ich Problem A bereits gelöst habe und nun noch eine Lösung für Problem B brauche.

Das gehört IMHO zu den viel (und gern auch falsch) zitierten Netiquetten und verhindert, dass die interessierten Helfenden zu Hellsehern oder "regelmäßigen Kontrolleuren" mutieren müssen.
Außerdem verhindert es Zornesausbrüche, wenn sich jemand die Arbeit macht und dem Fragenden eine adäquate Lösung schreibt, die dieser dann mit den Worten "Ach, ich hab´ schon was aus einem anderen Forum" quittiert.

Aber bei mir ist es in der Tat so, dass bei einem Online-Ausflug auch automatisch 3 Browserfenster mit Foren zu sehen sind: die Delphi-Praxis, das Entwickler-Forum und auch AUQ.de.
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#8
  Alt 22. Jul 2002, 11:25
Hi!

Der grund, warum ich diesen Beitrag in 2 Foren gestellt habe ist der, dass das Tool schon dringenst benötigt wird. Ich komm mit dem Suchen der Datei nicht klar. Ich hab wirklich keine Ahnung, wie ich das mache. Ich habe mir mal die Hilfe angesehen und nach FindFirst usw. gesucht. Ich hab auch was gefunden, aber ich komm nicht dahinter, wie ich Daten suchen kann.
Darum bitte ich um eure hilfe!
Grüße, m-werk
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#9
  Alt 22. Jul 2002, 12:16
Zitat von m-werk:
Darum bitte ich um eure hilfe!
Kein Problem, ich kann dir meine Suchfunktion geben. Du musst nur sagen, wo du sie gern hin hättest ... ... also, ich meine jetzt die Delphi-Praxis oder AUQ. Upps, wie doppeldeutig.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#10
  Alt 22. Jul 2002, 12:31
@MathiasSimmack: Hier in der Delphi-PRAXiS wäre Deine Suchfunktion schon nicht schlecht aufgehoben...

Grüße,
Daniel
Daniel R. Wolf
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 06:21 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