Datentyp von Datenbank-Spalte herausfinden
-
Hi,
wie einige vielleicht schon mitbekommen haben, experimentiere ich mit einer ADO-Verbindung zu einer Access-DB. Dabei erstelle ich nun eine neue Tabelle wie folgt:this->ADOCommand1->CommandText = "CREATE TABLE " + NewTable + " (Eins INT, Zwei INT, Drei INT)"; this->ADOCommand1->Execute();
Statt fest vorgegebener Spaltennamen und Typen möchte ich diese nun anhand einer vorgegebenen Tabelle wählen. Die Spaltennamen erhalte ich wie folgt:
this->ADOConnection1->GetFieldNames(CloneTable, MyList);
Aber wie komm ich an die Typen?
-
Hallo,
versuch's doch mal mit DataType. Hier ein kleines Beispiel:
for( j=0; j<theTable->FieldCount; j++ ) { theSourceField = theTable->Fields->Fields[j]; if( !theSourceField->IsNull ) { theSourceType = theSourceField->DataType; switch( theSourceType ) { case ftFixedChar: case ftString: case ftMemo: case ftOraClob: { STRING value = theSourceField->AsString.c_str(); fStream << value.csvString(); break; } case ftSmallint: case ftLargeint: case ftInteger: case ftAutoInc: fStream << theSourceField->AsInteger; break; case ftFloat: fStream << theSourceField->AsFloat; break; case ftDateTime: fStream << theSourceField->AsDateTime.DateTimeString().c_str(); break; default: doLogValue( "%d", (int)theSourceType ); doLogValue( "%x", (int)theSourceType ); throw( new Exception( "Unbekannter Typ" ) ); } } if( j<theTable->FieldCount-1 ) fStream << ','; }
mfg Martin
-
Ja, sowas in der Art hab ich zwischenzeitlich auch gefunden. Schöner wär es aber bestimmt, den Access-Typen direkt auszulesen (a la "INT").