SQL à C : Intervalles de jours-heures
Les identificateurs des types de données ODBC SQL d’intervalle de jour sont les suivants :
- SQL_INTERVAL_DAY
- SQL_INTERVAL_DAY_TO_MINUTE
- SQL_INTERVAL_HOUR
- SQL_INTERVAL_DAY_TO_SECOND
- SQL_INTERVAL_MINUTE
- SQL_INTERVAL_HOUR_TO_MINUTE
- SQL_INTERVAL_SECOND
- SQL_INTERVAL_HOUR_TO_SECOND
- SQL_INTERVAL_DAY_TO_HOUR
- SQL_INTERVAL_MINUTE_TO_SECOND
Le tableau suivant montre les types de données ODBC C dans lesquels les données SQL d’intervalle de jour peuvent être converties. Pour obtenir une explication des colonnes et des termes de la table, consultez Conversion de données sql en types de données C.
Identificateur de type C | Test | *TargetValuePtr | *StrLen_or_IndPtr | SQLSTATE |
---|---|---|---|---|
Tous les types d’intervalleS C de jour | Partie des champs de fin non tronquée Partie tronquée des champs de fin La précision de pointe de la cible n’est pas assez grande pour contenir des données provenant de la source |
Données Données tronquées Indéfini |
Longueur des données Longueur des données Indéfini |
n/a 01S07 22015 |
SQL_C_STINYINT[b] SQL_C_UTINYINT[b] SQL_C_USHORT[b] SQL_C_SHORT[b] SQL_C_SLONG[b] SQL_C_ULONG[b] SQL_C_NUMERIC[b] SQL_C_BIGINT[b] | La précision d’intervalle était un champ unique et les données ont été converties sans troncation La précision d’intervalle était un champ unique et fractionné tronqué La précision d’intervalle était un champ unique et tronqué La précision d’intervalle n’était pas un seul champ |
Données Données tronquées Données tronquées Indéfini |
Taille du type de données C Longueur des données Longueur des données Taille du type de données C |
n/a 01S07 22003 07006 |
SQL_C_BINARY | Longueur d’octet des données <= BufferLength Longueur d’octet de la mémoire tampon des données > |
Données Indéfini |
Longueur des données Indéfini |
n/a 22003 |
SQL_C_CHAR | Mémoire tampon de longueur <d’octet de caractère Nombre de chiffres entiers (par opposition à des chiffres fractionnaires<) BufferLength Nombre de chiffres entiers (par opposition à des chiffres fractionnaires >) = BufferLength |
Données Données tronquées Indéfini |
Taille du type de données C Taille du type de données C Indéfini |
n/a 01004 22003 |
SQL_C_WCHAR | Longueur de caractères <BufferLength Nombre de chiffres entiers (par opposition à des chiffres fractionnaires<) BufferLength Nombre de chiffres entiers (par opposition à des chiffres fractionnaires >) = BufferLength |
Données Données tronquées Indéfini |
Taille du type de données C Taille du type de données C Indéfini |
n/a 01004 22003 |
[a] Un type SQL d’intervalle de jour peut être converti en n’importe quel type C d’intervalle de jour.
[b] Si la précision de l’intervalle est un seul champ (jour, heure, minute ou deuxième), le type SQL d’intervalle peut être converti en n’importe quel type numérique exact (SQL_C_STINYINT, SQL_C_UTINYINT, SQL_C_USHORT, SQL_C_SHORT, SQL_C_SLONG, SQL_C_ULONG ou SQL_C_NUMERIC).
La conversion par défaut d’un type SQL d’intervalle est le type de données d’intervalle C correspondant. L’application lie ensuite la colonne ou le paramètre (ou définit le champ SQL_DESC_DATA_PTR dans l’enregistrement approprié de l’ARD) pour qu’il pointe vers la structure SQL_INTERVAL_STRUCT initialisée (ou passe un pointeur vers la structure SQL_ INTERVAL_STRUCT en tant qu’argument TargetValuePtr dans un appel à SQLGetData).
L’exemple suivant montre comment transférer des données d’une colonne de type SQL_INTERVAL_DAY_TO_MINUTE vers la structure de SQL_INTERVAL_STRUCT afin qu’elles reviennent sous forme d’intervalle de DAY_TO_HOUR.
SQL_INTERVAL_STRUCT is;
SQLINTEGER cbValue;
SQLUINTEGER days, hours;
// Execute a select statement; "interval_column" is a column
// whose data type is SQL_INTERVAL_DAY_TO_MINUTE.
SQLExecDirect(hstmt, "SELECT interval_column FROM table", SQL_NTS);
// Bind
SQLBindCol(hstmt, 1, SQL_C_INTERVAL_DAY_TO_MINUTE, &is, sizeof(SQL_INTERVAL_STRUCT), &cbValue);
// Fetch
SQLFetch(hstmt);
// Process data
days = is.intval.day_second.day;
hours = is.intval.day_second.hour;