Einzelnen Beitrag anzeigen

Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#1

Firebird Feldtypen richtig benennen

  Alt 8. Jul 2009, 22:33
Datenbank: Firebird • Zugriff über: IBDAC
Nabend liebe DPler!

Ich möchte gerne eine Datenbank-Update-Funktion in mein Programm einbauen, so, dass ich die META-Daten (Tabellennamen, Feldnamen, Feldtypen, max. längen usw.) aus MEINER Datenbank auslese, in eine bestimmte Datei abspeichere, die die Datei dann weitergeben kann.
Beim Anwender soll das Programm dann die META-Daten mit der Datenbank des Anwenders vergleichen und ggf. die Datenbank anpassen. (neue Tabellen anlegen, Felder ändern, neue Felder anlegen, Felder löschen etc.)

Jetzt zur Frage: Wie kann ich die META-Daten sauber auslesen?
im Moment bin ich auf dieses hier gestoßen:
SQL-Code:
SELECT r.RDB$FIELD_NAME AS field_name,
r.RDB$RELATION_NAME AS tablename,
r.RDB$DEFAULT_VALUE AS field_default_value,
r.RDB$NULL_FLAG AS field_not_null_constraint,
f.RDB$FIELD_LENGTH AS field_length,
t.RDB$TYPE_NAME as field_type
FROM RDB$RELATION_FIELDS r
LEFT JOIN RDB$FIELDS f ON r.RDB$FIELD_SOURCE = f.RDB$FIELD_NAME
LEFT JOIN RDB$TYPES t on f.RDB$FIELD_TYPE = t.RDB$TYPE
LEFT JOIN RDB$COLLATIONS coll ON f.RDB$COLLATION_ID = coll.RDB$COLLATION_ID
LEFT JOIN RDB$CHARACTER_SETS cset ON f.RDB$CHARACTER_SET_ID = cset.RDB$CHARACTER_SET_ID
WHERE r.RDB$SYSTEM_FLAG=0
AND t.RDB$FIELD_NAME = 'RDB$FIELD_TYPE'
ORDER BY r.RDB$FIELD_POSITION;
ergibt folgendes Ergebnis:
Code:
FIELD_NAME   TABLENAM   FIELD_DEFAULT_VALUE   FIELD_NOT_NULL_CONSTRAINT   FIELD_LENGTH   FIELD_TYPE
TABELLE      TABELLEN   NULL                                          1             255    VARYING
FELD         TABELLEN   NULL                                                        255    VARYING
TYP          TABELLEN   NULL                                                        255    VARYING
LAENGE       TABELLEN   NULL                                                          4    LONG
OPTIONEN     TABELLEN   NULL                                                        255    VARYING
Die Feldtypen machen mir nun ein bisschen Probleme... Eigentlich sind die Felder als VARCHAR(255) deklariert, was intern anscheinend als VARYING verarbeitet wird. Gibt es eine saubere Möglichkeit, diese Feld_typen nun SQL-Komform zu benennen? Schließlich erstelle ich die Tabelle ja so:
SQL-Code:
CREATE TABLE TABELLEN (
  TABELLE VARCHAR(255) NOT NULL,
  FELD VARCHAR(255),
  TYP VARCHAR(255),
  LAENGE INTEGER,
  OPTIONEN VARCHAR(255)
);
Hoffe ihr versteht mein Problem...
Vielen Dank im Voraus
  Mit Zitat antworten Zitat