Partager via


Structure d’intervalle C

Chacun des types de données d’intervalle C répertoriés dans la section Types de données C utilise la même structure pour contenir les données d’intervalle. Lorsque SQLFetch, SQLFetchScroll ou SQLGetData est appelé, le pilote retourne des données dans la structure SQL_INTERVAL_STRUCT, utilise la valeur spécifiée par l’application pour les types de données C (dans l’appel à SQLBindCol, SQLGetData ou SQLBindParameter) pour interpréter le contenu de SQL_INTERVAL_STRUCT et remplit le champ interval_type de la structure avec la valeur d’énumération correspondant au type C. Notez que les pilotes ne lisent pas le champ interval_type pour déterminer le type de l’intervalle ; ils récupèrent la valeur du champ descripteur SQL_DESC_CONCISE_TYPE. Lorsque la structure est utilisée pour les données de paramètre, le pilote utilise la valeur spécifiée par l’application dans le champ SQL_DESC_CONCISE_TYPE de l’APD pour interpréter le contenu de SQL_INTERVAL_STRUCT, même si l’application définit la valeur du champ interval_type sur une valeur différente.

Cette structure est définie comme suit :

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;  

Le champ interval_type du SQL_INTERVAL_STRUCT indique à l’application quelle structure est détenue dans l’union, ainsi que les membres de la structure qui sont pertinents. Le champ interval_sign a la valeur SQL_FALSE si le champ de début d’intervalle n’est pas signé ; s’il est SQL_TRUE, le champ de début est négatif. La valeur du champ de début lui-même n’est toujours pas signée, quelle que soit la valeur de interval_sign. Le champ interval_sign agit comme un bit de signe.