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").


Anmelden zum Antworten