Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Auslesen von Feldname, Feldtypen, deren Größe und default werte einer Tabelle (https://www.delphipraxis.net/206124-auslesen-von-feldname-feldtypen-deren-groesse-und-default-werte-einer-tabelle.html)

erich.wanker 20. Nov 2020 15:30

Datenbank: mySQL • Version: 5.7.29 - MySQL Community Server (GPL) • Zugriff über: Zeos 7.2.6-stable

Auslesen von Feldname, Feldtypen, deren Größe und default werte einer Tabelle
 
Hallo,

in Delphi xe4, mit libmysql.dll für die ZConnection zeige ich mir alle Tabellen einer Datenbank in einem DBGrid mit folgendem SQL Statement an


Delphi-Quellcode:
Z_TABELLEN.SQL.Clear;
Z_TABELLEN.SQL.append('show tables');
Z_TABELLEN.Open;
Die Felder lasse ich mir in einem 2. DBGrid anzeigen

Delphi-Quellcode:
tabellenname := Z_TABELLEN.FieldByName('tables_in_'+MainModule.UniMainModule.ZConnection1.Database).AsString;

Z_FELDER.SQL.Clear;
Z_FELDER.SQL.append('SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'+MainModule.UniMainModule.ZConnection1.Database+'" AND TABLE_NAME = "' + tabellenname + '"');
Z_FELDER.Open;

Somit bekomme ich Feldnamen und feldtyp (varchar, int date..) in meiner 2. DBGrid

ist es möglich - auch die Größe (varchar = 200) oder (int = 6) und die default-werte darzustellen?

Vielen Dank für Infos
Erich

Bernhard Geyer 20. Nov 2020 15:34

AW: Auslesen von Feldname, Feldtypen, deren Größe und default werte einer Tabelle
 
Das müsste doch alles gewünschte Liefern:
https://dev.mysql.com/doc/refman/8.0...w-columns.html

Delphi.Narium 20. Nov 2020 15:36

AW: Auslesen von Feldname, Feldtypen, deren Größe und default werte einer Tabelle
 
In dem man sich die Definiton von INFORMATION_SCHEMA.COLUMNS anschaut, die entsprechenden Spalten mit selektiert und ins 2. DBGrid mit ausgibt?

himitsu 21. Nov 2020 11:37

AW: Auslesen von Feldname, Feldtypen, deren Größe und default werte einer Tabelle
 
Joar, Views ala INFORMATION_SCHEMA.COLUMNS gibt es in vielen SQL-DBMS.

Und schau mal, ob die Zeos-Komonenten das nicht auch direkt liefern.
Die TField's haben den Delphi-Typen (DataType) für die Felder drin
und z.B. bei Devart gibt es in den Query-Komponenten passende Informationen zum aktuell geladenen ResultSet.
> Quell-Tabelle, Quell-Field (nach einem AS) sowie die datenbankseitigenen Typen (eventuell hat Zeos sowas auch drin)

Delphi.Narium 21. Nov 2020 12:01

AW: Auslesen von Feldname, Feldtypen, deren Größe und default werte einer Tabelle
 
Das information schema ist ein ANSI-Standard, der aber nicht von allen Datenbanken unterstützt wird. MySQL unterstützt ihn.

Bei einem
Delphi-Quellcode:
tabellenname := Z_TABELLEN.FieldByName('tables_in_'+MainModule.UniMainModule.ZConnection1.Database).AsString;

Z_FELDER.SQL.Clear;
Z_FELDER.SQL.append('SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'+MainModule.UniMainModule.ZConnection1.Database+'" AND TABLE_NAME = "' + tabellenname + '"');
Z_FELDER.Open;
wäre es eigentlich naheliegend, es mal mit einem
Delphi-Quellcode:
tabellenname := Z_TABELLEN.FieldByName('tables_in_'+MainModule.UniMainModule.ZConnection1.Database).AsString;

Z_FELDER.SQL.Clear;
Z_FELDER.SQL.append('SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'+MainModule.UniMainModule.ZConnection1.Database+'" AND TABLE_NAME = "' + tabellenname + '"');
Z_FELDER.Open;
zu versuchen und nach Begutachtung des Ergebnisses den * durch die tätsächlich benötigten Spalten zu ersetzen.

Und da TZQuery und TZTable von TDataSet abgeleitet sind, hat man hier natürlich auch mindestens auf alle Spalteninformationen, die TDataSet bietet, Zugriff.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz