Entwickler-Ecke
Datenbanken - Datatyp bei MySql zu ungenau???
biohazard - Do 09.10.03 14:49
Titel: Datatyp bei MySql zu ungenau???
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?
smiegel - Do 09.10.03 15:49
Hallo,
wie wäre es mit Fields[i].DataSize?
biohazard - 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. :?
biohazard - 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.
Tana´Ri - 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
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 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 ;)
neojones - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!