DerWolf Geschrieben 1. Februar 2003 Geschrieben 1. Februar 2003 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 Zitieren
geloescht_JesterDay Geschrieben 2. Februar 2003 Geschrieben 2. Februar 2003 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) Zitieren
DerWolf Geschrieben 2. Februar 2003 Autor Geschrieben 2. Februar 2003 Jo, ich Danke dir! Das werde ich mir dann mal anschauen! Mal sehen ob ich damit klar komme! MfG Zitieren
DerWolf Geschrieben 3. Februar 2003 Autor Geschrieben 3. Februar 2003 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! Zitieren
geloescht_JesterDay Geschrieben 3. Februar 2003 Geschrieben 3. Februar 2003 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 Zitieren
DerWolf Geschrieben 3. Februar 2003 Autor Geschrieben 3. Februar 2003 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 Zitieren
geloescht_JesterDay Geschrieben 3. Februar 2003 Geschrieben 3. Februar 2003 Das ist kein Vorschlag es so zu machen Bei "meinem" Programm war es so, und da hab ich es rauskopiert... die Items bei einer ComboBox sind vom Typ TStrings, d.h. eine Liste von Strings... die kannst du nehmen und daraus deinen TreeView aufbauen, wie in meinem Beispiel gezeigt (grob) Zitieren
DerWolf Geschrieben 3. Februar 2003 Autor Geschrieben 3. Februar 2003 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 Zitieren
geloescht_JesterDay Geschrieben 4. Februar 2003 Geschrieben 4. Februar 2003 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... Zitieren
DerWolf Geschrieben 4. Februar 2003 Autor Geschrieben 4. Februar 2003 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 Zitieren
geloescht_JesterDay Geschrieben 4. Februar 2003 Geschrieben 4. Februar 2003 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. Zitieren
DerWolf Geschrieben 4. Februar 2003 Autor Geschrieben 4. Februar 2003 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!! Zitieren
geloescht_JesterDay Geschrieben 4. Februar 2003 Geschrieben 4. Februar 2003 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. Zitieren
DerWolf Geschrieben 4. Februar 2003 Autor Geschrieben 4. Februar 2003 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 Zitieren
geloescht_JesterDay Geschrieben 4. Februar 2003 Geschrieben 4. Februar 2003 Originally posted by DerWolf Wenn man gerade eine Sprache erlernt, Ich denke auch nicht, dass das Ganze ein Anfänger-Projekt ist Zumindest nicht als erstes Projekt. Hast du den Antrag schon eingereicht? Könntest du das nicht vielleicht ändern? Zitieren
DerWolf Geschrieben 4. Februar 2003 Autor Geschrieben 4. Februar 2003 Ja, der Antrag ist schon eingereicht! Da ist nix mehr zu machen! Zitieren
geloescht_JesterDay Geschrieben 4. Februar 2003 Geschrieben 4. Februar 2003 Ist er auch schon durch? Setzt dich vielleicht mal mit der IHK in Verbindung, wenn du ihnen die Situation schilderst (gerade angefangen mit der Sprache...) ist es vielleicht möglich, das Projekt nachträglich zu ändern... Zitieren
DerWolf Geschrieben 4. Februar 2003 Autor Geschrieben 4. Februar 2003 Nee, durch ist er noch nicht! Nur von der Firma aus soll ich das Projekt auf jeden Fall machen, war noch das einfachste! Deswegen auch als Projekt für die Prüfung! Mal sehen, vielleicht bekomme ich ja noch einen Geistesblitz! Trotzdem Danke für den Tip! MfG Zitieren
geloescht_JesterDay Geschrieben 4. Februar 2003 Geschrieben 4. Februar 2003 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... Zitieren
DerWolf Geschrieben 4. Februar 2003 Autor Geschrieben 4. Februar 2003 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! 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.