void StorageHomeBaseImpl::ValuePaser( std::map<std::string, CORBA::Any>& valueMap ) { int nType, nLen; unsigned char szColName[256]; unsigned char szData[1024]; // SQL_CHAR or SQL_VARCHAR -> SQL_C_CHAR; SQL_BINARY -> SQL_C_BINARY unsigned char ucData; // SQL_BIT -> SQL_C_BIT char cData; // SQL_TINYINT -> SQL_C_TINYINT short siData; // SQL_SMALLINT -> SQL_C_SHORT long lData; // SQL_INTEGER -> SQL_C_LONG float fData; // SQL_REAL -> SQL_C_FLOAT double dData; // SQL_DOUBLE or SQL_FLOAT -> SQL_C_DOUBLE //struct tm* strctData = new struct tm(); // SQL_TYPE_TIMESTAMP -> SQL_C_TYPE_TIMESTAMP(3.x); SQL_TIMESTAMP -> SQL_C_TIMESTAMP(2.x) for(int iCol=0; iCol<GetFieldCount(); iCol++) { std::string strColName; CORBA::Any anyData; memset(szColName, '\0', 256); GetFieldAttributes(iCol, szColName, nType, nLen); strColName = (char*)szColName; switch(nType) { case SQL_CHAR: // also for CORBA::Boolean case SQL_VARCHAR: memset(szData, '\0', 1024); GetFieldValue(iCol, szData); anyData <<= (const char*)szData; break; case SQL_BIT: GetFieldValue(iCol, &ucData); anyData <<= CORBA::Any::from_octet(ucData); break; case SQL_TINYINT: GetFieldValue(iCol, cData); anyData <<= CORBA::Any::from_char(cData); break; case SQL_SMALLINT: GetFieldValue(iCol, &siData); anyData <<= (CORBA::Short)siData; break; case SQL_INTEGER: GetFieldValue(iCol, &lData); anyData <<= (CORBA::Long)lData; break; case SQL_REAL: GetFieldValue(iCol, &fData); anyData <<= (CORBA::Float)fData; break; case SQL_DOUBLE: case SQL_FLOAT: GetFieldValue(iCol, &dData); anyData <<= (CORBA::Double)dData; break; //case SQL_TYPE_TIMESTAMP: //case SQL_TIMESTAMP: // GetFieldValue(iCol, strctData); // anyData <<= (CORBA::StructDef)strctData; // break; //case SQL_NUMERIC: //case SQL_DECIMAL: // GetFieldValue(iCol, fltIncome); // break; default: assert("This data type is unknown!"); break; } valueMap[strColName] = anyData; } }
BOOL CODBCRecordset::GetFieldName(int nField, CHAR *szFieldName) { int nType, nLength; return GetFieldAttributes(nField, szFieldName, nType, nLength); }