| Autor |
Beitrag |
iltschii
      
Beiträge: 32
|
Verfasst: Do 10.04.03 17:14
Hallöle!
Ich programmier grad eine Anwendung um Datenbanken zu erstellen(Firebird) und will mir aber auch die Eigenschaften von bereits existierenden Tabellen (Feldname, Feldtyp,Größe, Indizes,ob Feld gefüllt ist oder gefüllt sein muss usw.) in einem StringGrid anzeigen lassen.
Aus einer Liste kann ich mir die Tabelle der ausgewählten Datenbank in einem DBGrid anzeigen lassen und von dieser Tabelle will ich dann die Eigenschaften haben.
Ich hab schon DataSize usw versucht bekomm das aber net so hin
Im Vorraus schon mal vielen Dank! 
|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Do 10.04.03 17:24
hallo,
wenn du die tabelle connectest steht in den properties wie field und so alles drin. Also sehr interessant ist wie gesagt fields..
Gruß
Ken
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Do 10.04.03 17:47
Hi
du kannst diese Informationen direkt aus den Systemtabellen auslesen. Bei Interbase funktioniert das so:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| select R.RDB$FIELD_NAME, R.RDB$FIELD_SOURCE, R.RDB$FIELD_POSITION, F.RDB$FIELD_LENGTH, F.RDB$FIELD_SCALE, F.RDB$FIELD_TYPE, F.RDB$FIELD_SUB_TYPE, F.RDB$CHARACTER_LENGTH, F.RDB$FIELD_PRECISION, C.RDB$CHARACTER_SET_NAME, S.RDB$COLLATION_NAME, D.RDB$LOWER_BOUND, D.RDB$UPPER_BOUND, R.RDB$NULL_FLAG AS FIELD_NULL_FLAG, F.RDB$NULL_FLAG AS DOMAIN_NULL_FLAG, R.RDB$DESCRIPTION from RDB$Relation_Fields R Left join RDB$FIELDS F on (R.RDB$FIELD_SOURCE = F.RDB$FIELD_NAME) Left join RDB$Character_sets C on (F.RDB$Character_SET_ID = C.RDB$Character_set_id) Left join RDB$COLLATIONS S on (F.RDB$COLLATION_ID = S.RDB$COLLATION_ID and F.RDB$CHARACTER_SET_ID = S.RDB$CHARACTER_SET_ID) Left join RDB$FIELD_DIMENSIONS D on (R.RDB$FIELD_SOURCE = D.RDB$FIELD_NAME) where RDB$Relation_Name = :Tabelle order by RDB$Field_Position |
Ich denke mal das sollte auch bei Firebird funktionieren.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
iltschii 
      
Beiträge: 32
|
Verfasst: Fr 11.04.03 00:03
Supi, danke für die Hinweise! Mit den Feldnamen und Indizes klappt das ja schon, aber Feldgröße usw noch net!!!! 
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Fr 11.04.03 06:52
Hi
wenn du die Fields-Liste der Tabelle verwendest ist das die Eigenschafte Size. Dazu solltest du die die Onlinehilfe zu TField mal anschauen.
Wenn du die Systemtabellen verwendest stehen die Informationen in RDB$FIELDS.RDB$FIELD_LENGTH bzw. RDB$FIELDS.RDB$CHARACTER_LENGTH. Dazu solltest du dann mal einen Blick in die Beschreibung der Systemtabellen der IB Doku werfen.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
iltschii 
      
Beiträge: 32
|
Verfasst: Fr 11.04.03 12:37
Hallo Lothar!
Das habe ich mir schon angeschaut. ich habe mich schon mit TField auseinandergesetzt und mit den Eigenschaften wie SIZE und DATATYPE und so, aber ich bekomme das net umgesetzt.
Bei den Feldnamen habe ich z.B. folgenden Quelltext stehen:
Cells[3,1] := IBTable1.FieldDefs[0].Name;
aber mit den Eigenschaften SIZE und DATATYPE funktioniert das net!
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Fr 11.04.03 13:02
Hi
Achtung: Es kommt der Wink mit dem Zaunpfahl
Ab und zu mal einen Blick in die Hilfe werfen, würde unter Umständen schon weiterhelfen
Cells ist ein String
Size ist ein Integer
DataType ist TFieldType
Quelltext 1: 2:
| Cells[3,1] := IntToStr(ibtable1.FieldDefs[i].Size); Cells[3,1] := IntToStr(Ord(ibtable1.FieldDefs[i].DataType)); |
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
iltschii 
      
Beiträge: 32
|
Verfasst: Fr 11.04.03 21:29
Hi Lothar!
Lach, nun geht mir ein  auf! Obwohl ich die Hilfe fast schon in und auswendig kenne!
Aber super, dass du mir geholfen hast, Danke schön!Es klappt alles wunderbar!
Ich hatte es schon mit IntToStr versucht aber vergessen es in Klammern zu setzen (bin halt kein profi)
Wenn du mir vielleicht noch sagen könntest, wie ich feststellen kann ob das Feld gefüllt ist und ob es gefüllt sein muss oder net!
Das wäre Spitze!!!
Gruß iltschii
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Sa 12.04.03 09:56
Hi
ob ein Feld gefüllt werden muss kriegst du raus mit
Quelltext 1:
| tabelle.FieldDefs[i].Required |
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|