Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Tablenames aus einem Dataset (https://www.delphipraxis.net/172474-tablenames-aus-einem-dataset.html)

Nico93 5. Jan 2013 23:37

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBConnection

Tablenames aus einem Dataset
 
Hallo zusammen,

leider komme ich wieder nicht weiter.
Mein Problem besteht darin, dass ich zur Laufzeit aus einem TSimpleDataset oder TSqlDataset die Tabellennamen extrahieren möchte.
Leider konnte ich bis jetzt nichts passendes finden.

Ich habe zwar schon versucht die Tabellennamen aus dem SQL Statement des Datasets zu filter.
Bei einer oder mehreren Tabellen die hinter dem "From" aufgelistet sind ist das noch möglich, aber wenn Joins ins Spiel kommen wirds aber auch schon schwierig.

Hat hierzu jemand eine Idee?

Vielen Dank für die Hilfe

Sir Rufo 6. Jan 2013 08:25

AW: Tablenames aus einem Dataset
 
Wenn du dir die Fields des DataSets anschaust, dann ist dort (abhängig von der Komponente/Query) auch der TableName enthalten.

Problematisch kann es bei Feldern aus SubSelects werden.

Alle beteiligten Tabellen herauszufinden wird schwierig, weil sich das DataSet nur um den CommandText kümmert ohne diesen zu verstehen (wird einfach nur an die Connection/Datenbank geschickt) und die zurückgelieferten Felder und Datensätze bereitstellt.

Ist also eine Tabelle beteiligt, aus der keine Felder im Resultset auftauchen, dann weiß das DataSet nicht, dass diese Tabelle beteiligt ist (ist dem DataSet auch relativ egal).

Du müsstest die Datenbank fragen, welche Tabellen bei der Query im Spiel sind.

Nico93 6. Jan 2013 11:08

AW: Tablenames aus einem Dataset
 
Hallo,

ich habe mal mehrere Komponenten ausprobiert (TSimpleDataset, TSQlDataset, TClientDataset, TSqlQuery) und konnte leider bei keiner dieser Komponenten die Eigenschaft "TableName" finden.

Mein Aufruf sieht wie folgt aus:
Komponente.Fields[0]. <- und dann steht keine Eigenschaft "Tablename" zur Verfügung.

Danke für die Hilfe

Sir Rufo 6. Jan 2013 11:28

AW: Tablenames aus einem Dataset
 
Ich meinte Delphi-Referenz durchsuchenTField.Origin

Nico93 6. Jan 2013 12:07

AW: Tablenames aus einem Dataset
 
leider ist die Eigenschaft "origin" bei mir immer leer

TBx 6. Jan 2013 13:32

AW: Tablenames aus einem Dataset
 
Hmm, magst Du mal erkläutern, wozu Du diese Tablenames brauchst? Vielleicht kann man Dein Problem ja auf einem anderen Weg lösen.

Nico93 6. Jan 2013 14:17

AW: Tablenames aus einem Dataset
 
ja also,
ich habe ein DataDictionary welches alle Informationen über die Datenbanktabelle und dessen Felder beinhaltet.
Das ist dazu gedacht um zur Laufzeit Datenbanken nach dieser Struktur zu erstellen, kaputte Datenbanken zu reparieren, und vieles mehr.

Jetzt habe ich ein DBGrid welches eine Datenmenge anzeigt.
Jedoch heißen die Titelzeilen der einzelnen Spalten im DBGrid natürlich immer noch wie die Felder in der Datenbank.
Da das DataDicionary auch die Eingenschaft "DisplayLabel" beinhaltet, war mein Ziel beim öffnen des Datasets das Displaylabel für die jeweilige Spalte aus dem DataDictionary abzurufen und diese im DBGrid als Titelzeile für die jeweilige Spalte zu setzen.

Da man jedoch zum abrufen der Feldinformation aus dem Datadictionary die Tabelle in dem sich das Feld befindet benötigt, suche ich eine Möglichkeit die Tabelle zu ermitteln.
Falls jemand eine andere Idee hat, wäre ist sehr dankbar.

Danke für die Hilfe

sx2008 7. Jan 2013 02:17

AW: Tablenames aus einem Dataset
 
Also "normalerweise" ist es ja so:
Man wählt die Feldnamen so wie man Variablennamen wählen würde (bevorzugt in englischer Sprache).
Also z.B. TotalPrice, CustomerNo, ZipCode, NettoWeight,...
Diese Feldnamen müssen irgendwie in sprechende Namen der Zielsprache umgesetzt werden
(Gesamtpreis, Kundennr, PLZ, Netto-Gewicht,...)
Wenn ein bestimmter Feldname in versch. Tabellen enthalten ist, dann sollte man eigentlich davon ausgehen, dass das DiplayLabel gleich bleibt.
Zwischen Feldname und DisplayLabel besteht also eine 1:1 Beziehung.
Nun gibt es aber auch noch berechnete Felder (calculated fields).
Diese Felder tauchen in keiner Tabelle auf aber sie benötigen denoch ein eigenes DisplayLabel.

Daher ist dein bisheriger Ansatz eh unvollständig.
Ich würde eine eigene Liste/Tabelle für die Umsetzung vorsehen:
Code:
DsFieldName  | DisplayLabel
============================
TotalPrice   | Gesamtpreis
CustomerNo   | Kundennr
AvgPrice     | Durchschnittsspreis     <= Beispiel für ein berechnetes Feld
....
Falls du das mehrsprachig benötigst, müsste man noch den Language Code mit dazunehmen.

Nico93 9. Jan 2013 19:57

AW: Tablenames aus einem Dataset
 
ja ich glaube es gibt dann wohl keine andere Möglichkeit als das so zu machen.

Danke für die Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:33 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