Autor Beitrag
biohazard
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Do 09.10.03 14:49 
Hallo,

ich versuche anhand von fields[i].datatyp den Datentyp eines Feldes in einer MySql-Datenbank herauszubekommen. Das Problem ist nur, daß ich für die meisten Datentypen immer ein und denselben werd angezeigt bekomme. z.B. int, smallint, mediumint und tinyint sind bei Datatyp alle int.

Bei MyAdmin zeigt er z.B. tinyint(1) an. Wie funzt das? Mit der Eigenschaft fields[i].size hab ich schon probiert. Da steht bei den INT-feldern überall 0.

Woher soll ich nun wissen welcher Datentyp dahinterliegt?
Gibt es da noch ne andere Möglichkeit oder hab ich nur was vergessen?

_________________
LIVE FAST, DIE YOUNG
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Do 09.10.03 15:49 
Hallo,

wie wäre es mit Fields[i].DataSize?

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
biohazard Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Do 09.10.03 16:14 
Jetzt gibt er mir zwar Grössen an. Das Problem ist nur, dass diese z.B. bei allen Integerbereichen gleich sind. Also bin ich da wo ich vorher war. Irgendwie muß das Programm doch wissen welches Feld welchen Wertebereich hat. Kann doch nicht immer den Größten nehmen.

Wenn ich z.B. ein Feld vom Typ Bool anlege wird das ja als tinyint(1) abgespeichert. Wenn ich dies jetzt auslese, wird es als int angezeigt.

Will ich jetzt den Namen der Spalte mit meinem Prog ändern weiß ich nicht welcher Wertebereich jetzt genau dahinter liegt. Kann ihn demzufolge nicht zwischenspeichern und müsste jedesmal wenn ich einen Spaltennamen ändere den Wertebereich per Hand eingeben.

Ich werd hier noch verrückt. :?

_________________
LIVE FAST, DIE YOUNG
biohazard Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Do 09.10.03 16:25 
achso,

was ich vergessen habe zu erwähnen. Ich benutzt die ZEOS-Komponenten. Könnte es sein, dass das etwas damit zu tun hat.

_________________
LIVE FAST, DIE YOUNG
Tana´Ri
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230



BeitragVerfasst: Do 09.10.03 16:26 
hi ich kenn mich zwar noch nicht so mit db´s aus aber ich test gerade selbst den zugriff auf mysql, vielleicht hilft dir das etwas weiter:

(cb = combobox)
SetColTypInf = Procedure in der ich den typ (longword) in ner case auswerte und je nach fall dem labfieldtyp die entsprechende caption verpasse. funzt weitesgehend bei mir. wobei ich hier anmerken möchte das ich im PSDK mehr bzw. andere Const noch gefúnden hab die weder in der ADODB.pas noch in der ADOInt.pas zu finden sind (die fallen bei mir untern den else case ).

mit ADO
ausblenden Delphi-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:
25:
procedure TForm1.cbcolChange(Sender: TObject);
 var RSet  : OleVariant;
 begin
   Labfieldtyp.Caption := '';
   if cbtable.text <> '' then
    begin

     RSet := CreateOleObject('ADODB.recordset');
     RSet.ActiveConnection := conn;

     RSet.open('show columns From '+cbtable.text);

     while not RSet.EOF do
      begin
       if RSet.Fields.item[0].Value = cbcol.Text then
       // wenn field = aktuell column dann schreib typ in labfieldtyp
        begin
         SetColTypInf(RSet.Fields.item[0].type);
         Break;
       end;
       RSet.MoveNext;
     end;
     RSet := unassigned;
   end;
end;



Zitat:

achso,

was ich vergessen habe zu erwähnen. Ich benutzt die ZEOS-Komponenten. Könnte es sein, dass das etwas damit zu tun hat.

nachtrag: das haste zuspät erwähnt ;)

_________________
mfg
Tana´Ri
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Mo 13.10.03 11:06 
Hallo,

mach doch einfach in einer weiteren Abfrage einen DESC Tabellenname. In den Spalten der Ergebnismenge stehen dann Feldname, Typ, extras, etc... alles mit drin.

Viele Grüße,

Matthias

_________________
Ha! Es compiliert! Wir können ausliefern!