The following code fragment sets the ODSUSERTYPE structure for a few common cases:
#define odstype ODSUSERTYPE //*********************************************************** // Initialize ODSUSERTYPE //*********************************************************** if (col_p-> fNullAllowed) odstype.fNullable = TRUE; else odstype.fNullable = FALSE; odstype.fCaseSensitive = TRUE; odstype.fUpdateable = SQL_ATTR_READWRITE_UNKNOWN; odstype.fUnused = 0 odstype.fNew = NEWODBCTYPE; odstype.cbPrecision = 0; //*********************************************************** // Switch based on column type //*********************************************************** switch (col_p->uiType) { //******************************************************* // fixed-length character //******************************************************* case GW_FIXCHAR: odstype.cbPrecision = col_p->uiLen; odstype.fType = SQL_CHAR; break; //******************************************************* // variable-length character //******************************************************* case GW_VARCHAR: odstype.cbPrecision = col_p->uiLen; odstype.fType = SQL_VARCHAR; break; //******************************************************* // integer //******************************************************* case GW_INT: odstype.fCaseSensitive = FALSE; odstype.num.cbPrecision = 10; odstype.fType = SQL_INTEGER; break; //******************************************************* // decimal //******************************************************* case GW_DECIMAL: odstype.fCaseSensitive = FALSE; odstype.num.cbPrecision = (BYTE)col_p->uiPrecision; odstype.num.ibScale = (BYTE)col_p->uiScale; odstype.fType = SQL_DECIMAL; break; //******************************************************* // float //******************************************************* case GW_FLOAT: odstype.fCaseSensitive = FALSE; odstype.num.cbPrecision = 15; odstype.fType = SQL_FLOAT; break;