Zum Inhalt springen

Metadaten in Delphi


DerWolf

Empfohlene Beiträge

Hallo Leute!

Ich habe ein Problem in Delphi! Ich soll ein Datenbank-Explorer erstellen.

Dafür muß ich, nachdem ich eine DB-Verbindung hergestellt habe, die Metadaten der Datenbank auslesen und in ein TreeView ausgeben.

Wie mache ich das? :confused:

Kann mir da jemand helfen?

Danke schonmal im voraus!!

MfG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Metadaten? Das hängt wohl zum einen von der Datenbank ab, zum anderen empfehle ich dir die Einarbeitung in die BDE-Api, mit der BDE-Api bekommst du Infos über die Tabellen und Felder etc.. Ich hab das mal gemacht um eine Art Datapump zu programmieren, also Daten von einer Tabelle in eine beliebige andere, auch mit unterschiedlichen Felder über Mapping usw. Ist aber schon etwas her, alles was ich dir sagen kann, BDE-Api...

(auslesen aller Tabellen die zu einem Alias gehören und so ist wohl das was du meinst, das geht über die BDE auch)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also irgendwie klappt das nicht. :(

Oder ich bin einfach zu dumm dazu! :(

Ich bekomme immer `ne Fehlermeldung, wenn ich den Datenbakntyp bzw. Tabellennamen auslesen möchte.

Alleine bei SQLConnection1.GetTableNames(*****,***); bekomme ich ne Fehlermeldung.

Und falls das mal klappen sollte, wie kann ich das dann schreiben, das ich die ausgelesenen Daten in den TreeView mittels AddChild übergeben kann?

I need Help! Bitte!

Link zu diesem Kommentar
Auf anderen Seiten teilen

nicht SQLConnection sondern

// Kombobox der Tabellennamen füllen

Session.GetTableNames(UsedDatabase.DatabaseName,

'', True, False, cbTable.Items);

wobei UsedDatabase eine TDatabase ist und cbTable die combobox mit den Tabellen

Items ist in diesem Fall vom Typ TStrings, die kannst du durchlaufen mit einer for schleife.

ich mach das jetzt mal aus dem Kopf (also keine Garantie):


var i:Integer

      Strings: TStrings;


  for i:= 0 to Strings.count -1 do

  begin 

    TreeView.Add(nil, Strings[i]);      

  end;

ging doch schneller als zuerst gedacht ;) So müsstest du eine Liste der Tabellen bekommen, wenn du Strings vorher mit GetTableNames gefüllt hast. Du könntest es auch mit AddObject machen und an jeden Knoten ein Objekt mit Infos zur Tabelle hängen, wäre eleganter als die jedesmal beim Klicken erst wieder holen zu müssen ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja Danke nochmal!!

Ich werde es damit jetzt mal versuchen und hoffe, das es diesmal funktioniert!!

Wollte es erst ohne Combobox machen, per Click auf den Knoten die Datenbank auswählen und dann die Tabellen usw.!

Mal sehen was mein Chef dazu sagt, wenn ich es mit`ner Combobox mache!

MfG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, trotzdem Danke!

Danke für jeden Tip, denn ich bin in Delphi ein blutiger Anfänger und dieser DB-Explorer ist mein Projekt für die Prüfung! Für manche scheint dieses Programm recht "einfach" zu sein, aber für mich ist es echt schwierig, einen vernünftigen Anfang hinzukriegen!

MfG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also willst du einen DB-Explorer machen willst, der aufgebaut ist wie der, der bei Delphi dabei ist? ;)

Wenn du noch keine Erfahrungen mit dem TTreeView hast solltest du vielleicht erstmal ein kleines Projekt damit machen, zum Testen.

Ich würde wie gesagt die AddObject Methode wählen, damit hat jeder Knoten einen Pointer auf ein TObject Object (bzw. beim Erzeugen kannst du das Object gleich dranhängen). Da TObject die Grundklasse aller Klassen in Delphi ist, kannst du damit also alle Objekte dranhängen, du musst sie beim Ansprechen später nur wieder als das eigentliche Objekt Casten

Beispiel

AObject:= TMyObject.Create;

ANode.Data:= AObject;

AText:= TMyObject(ANode.Data).Text;

mal als kleines Beispiel.

Als Klasse zum dranhängen machst du eine eigene Klasse, in die du alles reinschreiben kannst, was dort für dich interessant ist.

z.B.


TMyTableData = Class

private

  FName: String;

  //Alles was du sonst noch brauchen kannst

  procedure SetName(AName);

public

  // vielleicht ein constructor bzw destrucor

  property Name: String read FName write SetName;

end;

Beim OnChange vom TreeView kannst du dann die Daten des Knoten abfragen und entsprechend nebendran dann bestimmte Daten anzeigen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja Danke nochmal. :)

Stimmt, "mein" DB-Explorer ist ähnlich dem von Delphi.

Meiner soll aber eigenständig sein und später halt in unsere Anwendungen mit eingebunden werden. Die Firma soll ja auch ein Nutzen davon haben!

Wo wir schonmal dabei sind, ich weiß nicht ob ich für diese Frage nen neuen Thread eröffnen soll? :confused:

Wie kann ich ne Zählschleife aufbauen, das der Knoten im Tree nur einmal angezeigt wird und nicht nach mehreren Clicks mehrfach im Tree vorhanden ist?

MfG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by DerWolf

Wie kann ich ne Zählschleife aufbauen, das der Knoten im Tree nur einmal angezeigt wird und nicht nach mehreren Clicks mehrfach im Tree vorhanden ist?

Wieso nach mehreren Klicks mehrfach angezeigt? Ich schliesse daraus, das du die Knoten im Tree erst nach einem Click einfügst... Am einfachsten ist vielleicht, du machst dir eine StringListe mit den Captions der Knoten (oder was immer du passend findest) und falls ein neuer Knoten eingefügt werden soll überprüfst du, ob der schon in der Liste steht. Oder aber du du machst eine rekursive Funktion (so eine hab ich irgendwo rumliegen), mit der du alle Knoten bzw. Unterknoten durchgehst und die Knoten so überprüfst. Du kannst die Knoten auch über den AbsoluteIndex und den NodeCount (gibt es AFAIR im TreeView) ansprechen (for x:= 0 to TreeView.NodeCount-1), aber der AbsoluteIndex ist langsam und sollte eigentlich nicht verwendet werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hm, das kann ich so versuchen. Ich muß aber an die Anweisungen meines Chefs halten(Aufgabenstellung!)

jaja, kaum ein problem gelöst, habe ich schon wieder welche! :(

Aber so geht es ja jedem Programmierer!:)

Nochmal zu GetTableNames - geht das nur, wenn man `ne Combobox oder ne Listbox mit eingebaut hat, geht das nicht auch ohne?

Immerhin habe ich es geschafft, den Datenbanknamen ohne so einer Box auszulesen. Kann ich das mit den Tabellen, Indexes usw. auch machen?

Nochmals Danke!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn du dir das Beispiel oben nochmal ankuckst wirst du merken, das nicht die ComboBox, sondern nur ComboBox.Items übergeben wird. Wie auch erwähnt sind die Items einfach ein TStrings-Objekt. ein einfaches

var

Tables: TStrings;

GetTableNames(....., Tables);

würde also genügen.

Nochwas zu TStrings. TStrings sind eine Basisklasse und normalerweise verwendet man die nicht direkt, sondern man nutzt eine TStringList, die ein direkter Nachfahre von TStrings ist und noch ein paar Dinge mehr anbietet.

var

Tables: TStringList;

Tables:= TStringList.create;

GetTableNames(... Tables.Strings); // heisst glaub ich so

wäre also die Version

Tables.free; aber nicht vergessen, kann auch ganz am Ende geschehen, aber es sollte geschehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Yo, ich Danke dir erstmal!

Oh Mann, ich bin soooo deprimiert! :(

Wenn man gerade eine Sprache erlernt, kann man es garnicht alleine schaffen, obwohl man ja das Projekt ganz alleine hinkriegen soll.

Wenn ich mir das so anschaue, komme ich garnicht mit den 70 Std aus. :confused:

Aber das liegt wohl eher an mir! :(

MfG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde dir nicht raten, ein Projekt in einer Sprache, die du erst kurz davor angefangen hast zu machen... Selbst wenn du die Aufgabe schaffst, bei der Prüfung gibt es das sog. Fachgespräch, da Fragen dich die Prüfer einiges zum Projekt, es kann aber auch allgemeiner sein z.B. zur Sprache o.ä.. Wenn man sich damit auskennt ist das dann überhaupt kein Problem (ich fand das Gespäch lächerlich ;) ), wenn man aber gerade so sein Projekt geschafft hat kann das nach Hinten losgehen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das stimmt schon. Aber ich möchte mich nicht jetzt schon wegen der Prüfung verrückt machen. Ich denke und hoffe vor allem, das ich es bis dahin drauf habe.

Nicht wie jetzt - jetzt könnte ich direkt nach 5 Minuten den Kopf auf die Tastatur klatschen! :)

Aber das ist schon nett gemeint!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...