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;