Share via


Estrutura de intervalo do C

Cada um dos tipos de dados de intervalo C listados na seção Tipos de Dados C usa a mesma estrutura para conter os dados de intervalo. Quando SQLFetch, SQLFetchScroll ou SQLGetData é chamado, o driver retorna dados para a estrutura SQL_INTERVAL_STRUCT, usa o valor especificado pelo aplicativo para os tipos de dados C (na chamada para SQLBindCol, SQLGetData ou SQLBindParameter) para interpretar o conteúdo de SQL_INTERVAL_STRUCT e preenche o campo interval_type da estrutura com o valor de enumeração correspondente ao tipo C. Observe que os drivers não leem o campo interval_type para determinar o tipo do intervalo; eles recuperam o valor do campo descritor SQL_DESC_CONCISE_TYPE. Quando a estrutura é usada para dados de parâmetro, o driver usa o valor especificado pelo aplicativo no campo SQL_DESC_CONCISE_TYPE da APD para interpretar o conteúdo de SQL_INTERVAL_STRUCT, mesmo que o aplicativo defina o valor do campo interval_type como um valor diferente.

Essa estrutura é definida da seguinte maneira:

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;  

O campo interval_type do SQL_INTERVAL_STRUCT indica ao aplicativo qual estrutura é mantida na união e também quais membros da estrutura são relevantes. O campo interval_sign tem o valor SQL_FALSE se o campo à esquerda do intervalo não estiver assinado; se for SQL_TRUE, o campo à esquerda será negativo. O valor no próprio campo à esquerda é sempre sem sinal, independentemente do valor de interval_sign. O campo interval_sign atua como um bit de sinal.