SQLSetDescRec, fonction
conformité
Version introduite : Conformité aux normes ODBC 3.0 : ISO 92
résumé
La fonction SQLSetDescRec définit plusieurs champs descripteur qui affectent le type de données et la mémoire tampon liés à une colonne ou à des données de paramètre.
Syntaxe
SQLRETURN SQLSetDescRec(
SQLHDESC DescriptorHandle,
SQLSMALLINT RecNumber,
SQLSMALLINT Type,
SQLSMALLINT SubType,
SQLLEN Length,
SQLSMALLINT Precision,
SQLSMALLINT Scale,
SQLPOINTER DataPtr,
SQLLEN * StringLengthPtr,
SQLLEN * IndicatorPtr);
Arguments
DescriptorHandle
[Entrée] Descripteur handle. Il ne doit pas s’agir d’un handle IRD.
RecNumber
[Entrée] Indique l’enregistrement de descripteur qui contient les champs à définir. Les enregistrements de descripteur sont numérotés de 0, avec le numéro d’enregistrement 0 étant l’enregistrement de signet. Cet argument doit être égal ou supérieur à 0. Si RecNumber est supérieur à la valeur de SQL_DESC_COUNT, SQL_DESC_COUNTis remplacé par la valeur de RecNumber.
type
[Entrée] Valeur à laquelle définir le champ SQL_DESC_TYPE pour l’enregistrement du descripteur.
sous-type
[Entrée] Pour les enregistrements dont le type est SQL_DATETIME ou SQL_INTERVAL, il s’agit de la valeur à laquelle définir le champ SQL_DESC_DATETIME_INTERVAL_CODE.
longueur
[Entrée] Valeur à laquelle définir le champ SQL_DESC_OCTET_LENGTH pour l’enregistrement du descripteur.
Précision
[Entrée] Valeur à laquelle définir le champ SQL_DESC_PRECISION pour l’enregistrement du descripteur.
mettre à l’échelle
[Entrée] Valeur à laquelle définir le champ SQL_DESC_SCALE pour l’enregistrement du descripteur.
dataPtr
[Entrée ou sortie différée] Valeur à laquelle définir le champ SQL_DESC_DATA_PTR pour l’enregistrement du descripteur.
DataPtr peut être défini sur un pointeur Null.
L’argument DataPtr
stringLengthPtr
[Entrée ou sortie différée] Valeur à laquelle définir le champ SQL_DESC_OCTET_LENGTH_PTR pour l’enregistrement du descripteur.
StringLengthPtr peut être défini sur un pointeur Null pour définir le champ SQL_DESC_OCTET_LENGTH_PTR sur un pointeur Null.
IndicatorPtr
[Entrée ou sortie différée] Valeur à laquelle définir le champ SQL_DESC_INDICATOR_PTR pour l’enregistrement du descripteur.
IndicatorPtr peut être défini sur un pointeur Null pour définir le champ SQL_DESC_INDICATOR_PTR sur un pointeur Null.
Retourne
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR ou SQL_INVALID_HANDLE.
Diagnostic
Lorsque
SQLSTATE | Erreur | Description |
---|---|---|
01000 | Avertissement général | Message d’information spécifique au pilote. (La fonction retourne SQL_SUCCESS_WITH_INFO.) |
07009 | Index de descripteur non valide | L’argument RecNumber a été défini sur 0, et la DescriptorHandle a fait référence à un handle IPD. L’argument RecNumber était inférieur à 0. L’argument RecNumber était supérieur au nombre maximal de colonnes ou de paramètres que la source de données peut prendre en charge, et l’argument DescriptorHandle était un argument APD, IPD ou ARD. L’argument RecNumber était égal à 0, et l’argument DescriptorHandle fait référence à un APD implicitement alloué. (Cette erreur ne se produit pas avec un descripteur d’application alloué explicitement, car il n’est pas connu si un descripteur d’application explicitement alloué est un APD ou ARD jusqu’au moment de l’exécution.) |
08S01 | Échec du lien de communication | Le lien de communication entre le pilote et la source de données à laquelle le pilote a été connecté a échoué avant l’achèvement du traitement de la fonction. |
HY000 | Erreur générale | Une erreur s’est produite pour laquelle il n’y avait aucun SQLSTATE spécifique et pour lequel aucun SQLSTATE spécifique à l’implémentation n’a été défini. Le message d’erreur retourné par SQLGetDiagRec dans la mémoire tampon *MessageText décrit l’erreur et sa cause. |
HY001 | Erreur d’allocation de mémoire | Le pilote n’a pas pu allouer de mémoire nécessaire pour prendre en charge l’exécution ou l’achèvement de la fonction. |
HY010 | Erreur de séquence de fonction | (DM) L'DescriptorHandle a été associé à un StatementHandle pour lequel une fonction en cours d’exécution asynchrone (et non celle-ci) a été appelée et s’exécutait quand cette fonction était appelée. (DM) (DM) Une fonction en cours d’exécution asynchrone a été appelée pour le handle de connexion associé au descripteur de DescriptorHandle. Cette fonction asynchrone était toujours en cours d’exécution lorsque la fonction SQLSetDescRec a été appelée. (DM) SQLExecute, SQLExecDirectou SQLMoreResults a été appelé pour l’un des handles d’instruction associés au DescriptorHandle et retourné SQL_PARAM_DATA_AVAILABLE. Cette fonction a été appelée avant la récupération des données pour tous les paramètres diffusés en continu. |
HY013 | Erreur de gestion de la mémoire | L’appel de fonction n’a pas pu être traité, car les objets de mémoire sous-jacents n’ont pas pu être accessibles, éventuellement en raison de conditions de mémoire insuffisantes. |
HY016 | Impossible de modifier un descripteur de ligne d’implémentation | L’argument DescriptorHandle a été associé à un IRD. |
HY021 | Informations de descripteur incohérentes | Le champ Type, ou tout autre champ associé au champ SQL_DESC_TYPE dans le descripteur, n’était pas valide ou cohérent. Les informations de descripteur vérifiées lors d’une vérification de cohérence n’ont pas été cohérentes. (Consultez « Vérifications de cohérence », plus loin dans cette section.) |
HY090 | Longueur de la chaîne ou de la mémoire tampon non valide | (DM) Le pilote était un pilote ODBC 2.x, le descripteur était un ARD, l’argument ColumnNumber était défini sur 0 et la valeur spécifiée pour l’argument BufferLength n’était pas égale à 4. |
HY117 | La connexion est suspendue en raison d’un état de transaction inconnu. Seules les fonctions de déconnexion et de lecture seule sont autorisées. | (DM) Pour plus d’informations sur l’état suspendu, consultez fonction SQLEndTran. |
HYT01 | Expiration du délai d’expiration de la connexion | La période d’expiration de la connexion a expiré avant que la source de données ne réponde à la demande. La période d’expiration de la connexion est définie via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
IM001 | Le pilote ne prend pas en charge cette fonction | (DM) Le pilote associé au DescriptorHandle |
Commentaires
Une application peut appeler SQLSetDescRec pour définir les champs suivants pour une seule colonne ou paramètre :
SQL_DESC_TYPE
SQL_DESC_DATETIME_INTERVAL_CODE (pour les enregistrements dont le type est SQL_DATETIME ou SQL_INTERVAL)
SQL_DESC_OCTET_LENGTH
SQL_DESC_PRECISION
SQL_DESC_SCALE
SQL_DESC_DATA_PTR
SQL_DESC_OCTET_LENGTH_PTR
SQL_DESC_INDICATOR_PTR
Note
Si un appel à SQLSetDescRec échoue, le contenu de l’enregistrement de descripteur identifié par l’argument RecNumber n’est pas défini.
Lors de la liaison d’une colonne ou d’un paramètre, SQLSetDescRec vous permet de modifier plusieurs champs affectant la liaison sans appeler SQLBindCol ou SQLBindParameter ou effectuer plusieurs appels à SQLSetDescField. SQLSetDescRec pouvez définir des champs sur un descripteur non actuellement associé à une instruction. Notez que SQLBindParameter définit plus de champs que SQLSetDescRec, peut définir des champs sur une APD et un IPD dans un appel et ne nécessite pas de handle de descripteur.
Note
L’attribut d’instruction SQL_ATTR_USE_BOOKMARKS doit toujours être défini avant d’appeler SQLSetDescRec avec un argument RecNumber de 0 pour définir les champs de signet. Bien que cela ne soit pas obligatoire, il est fortement recommandé.
Vérifications de cohérence
Une vérification de cohérence est effectuée automatiquement par le pilote chaque fois qu’une application définit le champ SQL_DESC_DATA_PTR d’une application APD, ARD ou IPD. Si l’un des champs est incohérent avec d’autres champs, SQLSetDescRec retourne SQLSTATE HY021 (informations de descripteur incohérentes).
Chaque fois qu’une application définit le champ SQL_DESC_DATA_PTR d’un champ APD, ARD ou IPD, le pilote vérifie que la valeur du champ SQL_DESC_TYPE et les valeurs applicables à ce champ SQL_DESC_TYPE sont valides et cohérentes. Cette vérification est toujours effectuée lorsque SQLBindParameter ou SQLBindCol est appelée ou lorsque SQLSetDescRec est appelé pour un APD, ARD ou IPD. Cette vérification de cohérence inclut les vérifications suivantes sur les champs de descripteur :
Le champ SQL_DESC_TYPE doit être l’un des types SQL ou C ODBC valides ou un type SQL spécifique au pilote. Le champ SQL_DESC_CONCISE_TYPE doit être l’un des types ODBC C ou SQL valides ou un type C ou SQL spécifique au pilote, y compris les types datetime et intervalle concis.
Si le champ d’enregistrement SQL_DESC_TYPE est SQL_DATETIME ou SQL_INTERVAL, le champ SQL_DESC_DATETIME_INTERVAL_CODE doit être l’un des codes datetime ou intervalle valides. (Consultez la description du champ SQL_DESC_DATETIME_INTERVAL_CODE dans SQLSetDescField.)
Si le champ SQL_DESC_TYPE indique un type numérique, les champs SQL_DESC_PRECISION et SQL_DESC_SCALE sont vérifiés comme valides.
Si le champ SQL_DESC_CONCISE_TYPE est un type de données time ou timestamp, un type d’intervalle avec un composant en secondes ou l’un des types de données d’intervalle avec un composant de temps, le champ SQL_DESC_PRECISION est vérifié comme étant une précision de seconde valide.
Si le SQL_DESC_CONCISE_TYPE est un type de données d’intervalle, le champ SQL_DESC_DATETIME_INTERVAL_PRECISION est vérifié comme une valeur de précision de début d’intervalle valide.
Le champ SQL_DESC_DATA_PTR d’un IPD n’est normalement pas défini ; Toutefois, une application peut le faire pour forcer une vérification de cohérence des champs IPD. Une vérification de cohérence ne peut pas être effectuée sur un IRD. La valeur à laquelle le champ SQL_DESC_DATA_PTR de l’ADRESSE IPD n’est pas réellement stockée et ne peut pas être récupérée par un appel à SQLGetDescField ou SQLGetDescRec; le paramètre est effectué uniquement pour forcer la vérification de cohérence.
Fonctions associées
Pour plus d’informations sur | Voir |
---|---|
Liaison d’une colonne | fonction SQLBindCol |
Liaison d’un paramètre | fonction SQLBindParameter |
Obtention d’un seul champ de descripteur | fonction SQLGetDescField |
Obtention de plusieurs champs de descripteur | fonction SQLGetDescRec |
Définition de champs de descripteur unique | fonction SQLSetDescField |
Voir aussi
informations de référence sur l’API ODBC
fichiers d’en-tête ODBC