Wie kann ich die Beschreibung der Tabelle (Felder und Datentypen) von Firebird mit dbExpress
Habe ich ein tool geschrieben für die Anzeige von Datenbank-Strukturen mit dem GetTableNames und GetFieldNames Methoden der TSQLConnection. Wie bekomme ich den Typen der einzelnen Felder Namen wie die folgende Liste (die ist Teil der DDL erforderlich, um das erstellen der Tabelle)?
TABLE: ARTICLES
ID INTEGER NOT NULL
PRINTED SMALLINT DEFAULT 0
ACADEMIC SMALLINT
RELEVANCE SMALLINT
SOURCE VARCHAR(64) CHARACTER SET WIN1251 COLLATE WIN1251
NAME VARCHAR(128) CHARACTER SET WIN1251 COLLATE WIN1251
FILENAME VARCHAR(128) CHARACTER SET WIN1251 COLLATE WIN1251
NOTES VARCHAR(2048) CHARACTER SET WIN1251 COLLATE WIN1251
Versuchen Sie,
Die detaillierte Tabelle Feld info gab mir die nötigen Hinweise - sicherlich viel besser, Durchlaufen Sie das system-Tabellen als öffnen Sie eine Abfrage mit einem Datensatz und bestimmen Sie die Feldtypen aus der Abfrage. Wie kann ich Sie belohnen? Vielleicht drehen Sie Ihren Kommentar in eine Antwort mit einem code Beispiel.
Danke! Würde ich per post die Antwort, aber ich konnte nicht überprüfen, das Ergebnis (ich habe nur gehofft, die Abfrage aus dem Artikel funktioniert :-), das ist, warum ich habe es einen Kommentar. Fühlen Sie sich frei zu veröffentlichen und zu akzeptieren, Ihre eigene Antwort. Es wird hilfreich sein, um Sie hier zu halten, da wir nicht wissen, wie lange die Seiten, die ich geworben haben, am Leben sein wird.
DBX wird über die Kompatibilität zu verschiedenen Motoren... TBXTable hat die Eigenschaft ValueType[const Ordnungszahl: TInt32]: TDBXValueType Lesen GetValueType; Konvertieren von reault auf DB-spezifische Skript könnte eine gesonderte Aufgabe. Für die grundlegende FB-Typen wahrscheinlich TIBExtract Komponente funktionieren würde.
wenn Sie möchten, machen Sie es unbedingt mit "SELECT * FROM rdb$ ..." , die folgende Lösung ist nicht für Sie. Aber wenn Sie möchten, eine einfache und schnelle Methode, die Sie verwenden können isql.exe mit "CreateProcess(nil, Pchar('isql.exe' +' '+ Params)" und Params auf eine Datei z.B. myTableFieldinfo.sql. Alle Informationen, die Sie brauchen, ist verfügbar in der Datei myTableFieldinfo.sql
Detailed table field info
oder schauen Sie unter this FAQ
.Die detaillierte Tabelle Feld info gab mir die nötigen Hinweise - sicherlich viel besser, Durchlaufen Sie das system-Tabellen als öffnen Sie eine Abfrage mit einem Datensatz und bestimmen Sie die Feldtypen aus der Abfrage. Wie kann ich Sie belohnen? Vielleicht drehen Sie Ihren Kommentar in eine Antwort mit einem code Beispiel.
Danke! Würde ich per post die Antwort, aber ich konnte nicht überprüfen, das Ergebnis (ich habe nur gehofft, die Abfrage aus dem Artikel funktioniert :-), das ist, warum ich habe es einen Kommentar. Fühlen Sie sich frei zu veröffentlichen und zu akzeptieren, Ihre eigene Antwort. Es wird hilfreich sein, um Sie hier zu halten, da wir nicht wissen, wie lange die Seiten, die ich geworben haben, am Leben sein wird.
DBX wird über die Kompatibilität zu verschiedenen Motoren... TBXTable hat die Eigenschaft ValueType[const Ordnungszahl: TInt32]: TDBXValueType Lesen GetValueType; Konvertieren von reault auf DB-spezifische Skript könnte eine gesonderte Aufgabe. Für die grundlegende FB-Typen wahrscheinlich TIBExtract Komponente funktionieren würde.
wenn Sie möchten, machen Sie es unbedingt mit "SELECT * FROM rdb$ ..." , die folgende Lösung ist nicht für Sie. Aber wenn Sie möchten, eine einfache und schnelle Methode, die Sie verwenden können isql.exe mit "CreateProcess(nil, Pchar('isql.exe' +' '+ Params)" und Params auf eine Datei z.B. myTableFieldinfo.sql. Alle Informationen, die Sie brauchen, ist verfügbar in der Datei myTableFieldinfo.sql
InformationsquelleAutor No'am Newman | 2012-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser unvollständig ist (da habe ich noch nie genutzt Firebird array-Datentypen), und nicht viel getestet, aber vielleicht wird es geben Ihnen einen guten Ausgangspunkt:
Das ist wahrscheinlich, weil Firebird 1.5 nicht unterstützt
IIF
. Sie können ersetzen es mit funktional gleichwertigen,CASE
- Anweisung:CASE COALESCE(RF.RDB$NULL_FLAG, 0) WHEN 0 NULL ELSE 'NOT NULL' END
.Ich bin der Annahme Ihrer Antwort, mit zwei Einschränkungen: (1) Die Zeile zitiert oben fehlt das Wort "DANN" vor "NULL" und "NULL" sollte notiert werden; (2) Es gibt auch keine TRUNC-Funktion bin ich also löschen, das Schlüsselwort und die Durchführung der Rumpf im Programm selbst.
InformationsquelleAutor Ondrej Kelle
Verwenden Sie den direkten Zugriff auf RDB$ - Tabellen. Zum Beispiel:
wird Ihnen eine Liste aller Tabellen in einer Datenbank.
wird im Ergebnis eine Liste aller Felder der Tabelle
mit Informationen von Feld-Typ. Param RN ist ein name der Tabelle.
Verwendung von Informationen aus RDB$ - Tabellen kann man leicht konstruieren DDL
- Anweisung. Die folgende Abfrage gibt Ihnen einen Hinweis, wie es zu tun:
Es ist nur eine kleine Rechtschreibfehler nach dem Wort JOIN - sollte rdb$fields. Trotzdem, die Abfrage kam nicht zurück, was ich suchte. Ich werde upvote die Antwort, aber es war nicht DIE Antwort.
Ich erweiterte meine Antwort.
InformationsquelleAutor Andrej Kirejeŭ
Mithilfe des Links, TLama zur Verfügung gestellt, fand ich meine eigene Lösung, das ist etwas ähnlich wie die oben genannten Lösungen, aber einfacher.
p1 ist der name der Tabelle, die als parameter übergeben wird, die Abfrage.
Im Kontext, ich habe ein treeview, dessen Knoten die Namen der Tabellen einer bestimmten Datenbank; für jeden Knoten, die untergeordnete Knoten sind die Felder zusammen mit Ihren Definitionen.
Hier ist ein screenshot von dem Programm in Aktion. Mir ist klar, dass das format nicht das gleiche wie der von DDL, die ich zitierte, aber es ist offensichtlich, was jeder Feld bedeutet (zumindest für mich, und dies ist ein Programm für meinen privaten Gebrauch).
was ist falsch? Vielleicht unvollständig. Was falsch ist, IST, dass der Zeichensatz sollte Win1255, aber ich wusste nicht besser, wenn ich die Datenbank und ich verstehe, dass es ist zu spät, um sich jetzt ändern.
Vergleichen Sie mit meiner Antwort. Bekommen Sie falsche Daten geben in einigen Fällen, und die falsche Länge mit multi-byte-Zeichensatz Felder. Es könnte Berichts richtigen Werte für Ihren speziellen Fall durch Zufall obwohl.
InformationsquelleAutor No'am Newman
Machte ich eine kleine änderung für die erste option zur Unterstützung der berechnet wird, indem Sie Felder hinzufügen field_position und machte eine Ansicht zu machen, mehr einfach.
InformationsquelleAutor Pablo T.