Einzelnen Beitrag anzeigen

Gast
(Gast)

n/a Beiträge
 
#2
  Alt 20. Feb 2003, 12:38
Hallo FlatG 8)

Wie mir scheint hast Du hier mächtig vieles durcheinander gebracht ...

Wenn schon, dann die Reihenfolge Deiner Aufgabe müsste so aussehen:

1. Die Möglichkeit bieten das der Benutzer die ODBC Datenbank selbst über eine ComboBox auswählen kann ?!
2. Alle Tabellennamen automatisch auslesen können
3. Die Datensätze komplett auslesen können

Ich weiß beim besten willen nicht was Du unter ODBC Datenbank meinst. Auch in Sachen Rekursivität bin ich hier überfordert (wüsste ich leider nicht in welchem Zusammenhang zu Deiner Aufgabe diese Bemerkung steht).

Man kann z.B. via Delphi buchstäblich alles über eine Tabelle bzw. Felder Definitionen, Indizes etc... auslesen und sich dann ein SQL- Script zu recht basteln und ausführen. Dies ist aber sehr umfangreiche und schwierige Aufgabe. Da ich mich schon mit dem Problem beschäftig habe weiß ich (wie ich denke) wovon ich spreche.

Ich frage mich allerdings an dieser Stelle wozu braucht man so was? , da normalerweise verfügt man schon über ein Datebank-SQL-Script... es seitdem man möchte fremde Datenbanken samt Inhalten anzapfen...?

__________________________
Fazit: Die Aufgabe ich durchaus machbar... verlangt aber umfangreiches Wissen in Sachen Delphi und DB.

Allerdings z.B. schon bei der Trigger müsstest du auf die SQL-System Tabellen zugreifen

Da ich derzeit unter chronischem Zeit-Mangel leide zeige ich Dir für (Dein) guten Anfang wie du die ODBC- Datenquellen auflistet.


Gruß

Paul Jr.

Code:

xGetRegistryKey(HKEY_LOCAL_MACHINE, '\Software\ODBC\ODBC.INI\ODBC Data Sources', ListBox1);

(…)

(* Die Funktion xGetRegistryKey liefert (in dem Sender), anhand des Hauptschlüssels
    für das TRegistry-Objekt (hier sRootKey --> z.B.: HKEY_LOCAL_MACHINE)
    und dem Registry-Eintrag Verzeichnisses (sRootPath), alle Einträge zurück die
    sich in dem so beschriebenem Schlüssel befinden.
    Als Sender kann man hier TMemo, TListBox, TComboBox und eine TStringList eingeben.
    Allerdings muss eine StringListe vorher erzeugt werden.

    Bei erfolgreicher Ausführung von Registry.OpenKey hat diese Funktion den Rückgabe Wert = TRUE
    _________________________________
    PROGRAMMIERUNG:

    Hier ein Beispiel wie man alle Datenquellen-ODBC-Einträge ablesen kann:

    1.) Zuweisung für TListBox

         xGetRegistryKey(HKEY_LOCAL_MACHINE, '\Software\ODBC\ODBC.INI\ODBC Data Sources', ListBox3);

   2.) Hier werden die Ergebnisse an eine TSTringList übergeben. Nun dann kann man
         solche StringListe belibig weiter verwenden.

         TRY
            StringList := TStringList.Create;
            xGetRegistryKey(HKEY_LOCAL_MACHINE, '\Software\ODBC\ODBC.INI\ODBC Data Sources', StringList);
            ListBox3.Items.AddStrings(StringList);
         FINALLY
            StringList.Free;
         END;
*)

FUNCTION xGetRegistryKey(sRootKey : HKey; sRootPath : STRING; Sender : TObject) : Boolean;
VAR
   Registry: TRegistry;
BEGIN
   Result := FALSE;

   Registry := NIL;
   IF Sender Is TListBox THEN
      (Sender As TListBox).Items.Clear;

   IF Sender Is TComboBox THEN
      (Sender As TComboBox).Items.Clear;

   IF Sender Is TMemo THEN
      (Sender As TMemo).Clear;

   TRY
      // Object für die Regiestrierdatenbank von Windows wird erzeugt
      Registry := TRegistry.Create;
      // Die Eigenschaft bestimmt in einer Anwendung den Hauptschlüssel
      Registry.RootKey := sRootKey; // für das TRegistry-Objekt.
      // Die Methode OpenKey öffnet den angegebenen Schlüssel.

      IF NOT Registry.OpenKey(sRootPath, FALSE) THEN
         Exit;

      IF Sender Is TListBox THEN
         BEGIN
            Registry.GetValueNames((Sender As TListBox).Items);
          (Sender As TListBox).Sorted := TRUE;
         END;
      IF Sender Is TComboBox THEN
         BEGIN
            Registry.GetValueNames((Sender As TComboBox).Items);
            (Sender As TComboBox).Sorted := TRUE;
         END;

      IF Sender Is TMemo THEN
         Registry.GetValueNames((Sender As TMemo).Lines);

      IF Sender Is TStringList THEN
         BEGIN
            Registry.GetValueNames(Sender As TStringList);
            (Sender As TStringList).Sorted := TRUE;
         END;
      Result := TRUE;
   FINALLY
      Registry.Free;
   END;
END;
  Mit Zitat antworten Zitat