SQL Datentypen der Felder auslesen mit VB6/ADO/OpenSchema

Nossi

Captain
Registriert
Okt. 2002
Beiträge
3.893
Servus,

ich stehe vor einem kleineren Problem und sehe vielleicht den Wald vor lauter Bäumen nicht.
Ich greife auf eine Sybase-Datenbank zu und möchte mit Hilfe von OpenSchema die Datentypen der Felder auslesen. Das funktioniert auch. Folgender Code:

Code:
     Set rsType = gConnection.OpenSchema(adSchemaColumns, Array(Empty, Empty, TableName.Tag, Empty))
      
      Do While Not rsType.EOF
          Debug.Print rsType!DATA_TYPE
          rsType.MoveNext
      Loop
TableName.Tag ist hierbei ein Knotenpunkt in einem Treeview. Jetzt werden diejenigen die sich damit auskennen sicherlich schon wissen, worauf es hinaus läuft:

Ich erhalte als Ausgabe nur die datenbank-interne Enumerierung. So erhalte ich bei einem Integerfeld die "3" als Ausgabe, bei einem String die "129". Die Frage ist nun:

Wie komme ich in Klarschrift an den Datentyp ?
Gibt es eine andere Methode als das ganze intern über einen Select...Case zu unterscheiden zu müssen ? Das würde ich ungern tun, weil ich dann immerhin noch eine Fallunterscheidung für verschiedene Datenbanken einfügen müsste, da sich die Enumerierungen vermutlich stark von Hersteller zu Hersteller unterscheiden.

Falls nicht, kennt jemand eine Übersicht, welche die Codierung aufschlüsselt ? Für den Sybase SQL Anywhere würde erstmal genügen. Ich habe bereits im Referenzhandbuch und im Handbuch für Programmierer nachgeschlagen, dort aber nichts enddecken können.

MfG Nossi

Nachtrag:
Ok, ich habe nun die Lösung:

Code:
Dim recColName As ADODB.Recordset
Dim recColType As ADODB.Recordset
Set recColName = gConnection.OpenSchema(adSchemaColumns, Array(Empty, Empty, tablename.Tag, Empty))
Set recColType = gConnection.OpenSchema(adSchemaProviderTypes, Array(Empty, Empty))

Do Until recColName.EOF
recColType.MoveFirst
recColType.Find ("DATA_TYPE = " & recColName("DATA_TYPE"))
Debug.Print "Spaltenname: " & recColName("COLUMN_NAME") _
& ", Felddatentyp: " & recColType("TYPE_NAME")
recColName.MoveNext
Loop
 
Zurück
Oben