Compartir por


Estructura de intervalo de C

Cada uno de los tipos de datos de intervalo de C enumerados en la sección Tipos de datos de C usa la misma estructura para contener los datos del intervalo. Cuando se llama a SQLFetch, SQLFetchScroll o SQLGetData , el controlador devuelve datos en la estructura de SQL_INTERVAL_STRUCT, usa el valor especificado por la aplicación para los tipos de datos de C (en la llamada a SQLBindCol, SQLGetData o SQLBindParameter) para interpretar el contenido de SQL_INTERVAL_STRUCT y rellena el campo interval_type de la estructura con el valor de enumeración correspondiente al tipo C. Tenga en cuenta que los controladores no leen el campo interval_type para determinar el tipo del intervalo; recuperan el valor del campo descriptor SQL_DESC_CONCISE_TYPE. Cuando la estructura se usa para los datos de parámetros, el controlador usa el valor especificado por la aplicación en el campo SQL_DESC_CONCISE_TYPE del APD para interpretar el contenido de SQL_INTERVAL_STRUCT, incluso si la aplicación establece el valor del campo interval_type en otro valor.

Esta estructura se define de la siguiente manera:

typedef struct tagSQL_INTERVAL_STRUCT  
{  
   SQLINTERVAL interval_type;   
   SQLSMALLINT interval_sign;  
   union {  
         SQL_YEAR_MONTH_STRUCT   year_month;  
         SQL_DAY_SECOND_STRUCT   day_second;  
         } intval;  
} SQL_INTERVAL_STRUCT;  
typedef enum   
{  
   SQL_IS_YEAR = 1,  
   SQL_IS_MONTH = 2,  
   SQL_IS_DAY = 3,  
   SQL_IS_HOUR = 4,  
   SQL_IS_MINUTE = 5,  
   SQL_IS_SECOND = 6,  
   SQL_IS_YEAR_TO_MONTH = 7,  
   SQL_IS_DAY_TO_HOUR = 8,  
   SQL_IS_DAY_TO_MINUTE = 9,  
   SQL_IS_DAY_TO_SECOND = 10,  
   SQL_IS_HOUR_TO_MINUTE = 11,  
   SQL_IS_HOUR_TO_SECOND = 12,  
   SQL_IS_MINUTE_TO_SECOND = 13  
} SQLINTERVAL;  
  
typedef struct tagSQL_YEAR_MONTH  
{  
   SQLUINTEGER year;  
   SQLUINTEGER month;   
} SQL_YEAR_MONTH_STRUCT;  
  
typedef struct tagSQL_DAY_SECOND  
{  
   SQLUINTEGER day;  
   SQLUINTEGER hour;  
   SQLUINTEGER minute;  
   SQLUINTEGER second;  
   SQLUINTEGER fraction;  
} SQL_DAY_SECOND_STRUCT;  

El campo interval_type del SQL_INTERVAL_STRUCT indica a la aplicación qué estructura se mantiene en la unión y también qué miembros de la estructura son relevantes. El campo interval_sign tiene el valor SQL_FALSE si el campo inicial del intervalo no está firmado; si es SQL_TRUE, el campo inicial es negativo. El valor del propio campo inicial siempre no tiene signo, independientemente del valor de interval_sign. El campo interval_sign actúa como un bit de signo.