Autor Beitrag
iltschii
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: 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! :D
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Do 10.04.03 17:47 
Hi
du kannst diese Informationen direkt aus den Systemtabellen auslesen. Bei Interbase funktioniert das so:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Fr 11.04.03 13:02 
Hi
Achtung: Es kommt der Wink mit dem Zaunpfahl :mrgreen:
Ab und zu mal einen Blick in die Hilfe werfen, würde unter Umständen schon weiterhelfen :wink:

Cells ist ein String
Size ist ein Integer
DataType ist TFieldType

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Fr 11.04.03 21:29 
Hi Lothar!

Lach, nun geht mir ein :idea: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Sa 12.04.03 09:56 
Hi
ob ein Feld gefüllt werden muss kriegst du raus mit
ausblenden Quelltext
1:
tabelle.FieldDefs[i].Required					


Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...