Developpez.com

Plus de 14 000 cours et tutoriels en informatique professionnelle à consulter, à télécharger ou à visionner en vidéo.

Developpez.com - 4D
X

Choisissez d'abord la catégorieensuite la rubrique :


Les fonctions du catalogue dans ODBC Pro

Date de publication : Août 2005

Par Noreddine MARGOUM (Technicien Contrôle Qualité, 4D S.A.)
 


I. Introduction
II. Fonctions du catalogue
III. Modèle d’utilisation des fonctions du catalogue
Modèle général
Exemple d’implémentation
IV. Utilisation de la base de test
V. Conclusion
VI. Base exemple


I. Introduction

Cette note technique a pour but de vous montrer l'utilisation des commandes du plug-in 4D ODBC Pro qui décrivent le catalogue d'une base de données.


II. Fonctions du catalogue

info Note : On utilisera comme synonymes les termes de champ et de colonne.
Les bases de données possèdent toutes une structure telle que des informations comme la liste des tables, les privilèges sur une table donnée, puissent être obtenues. Cette structure est appelée le catalogue de la base de données ou aussi le dictionnaire des données.

A travers les commandes ODBC Pro du catalogue, on peut décrire l'intégralité de cette structure.


L'utilité principale de ces commandes est :

  • construire des requêtes SQL dynamiques au cours de l'exécution de l'application, car la liste des tables et des colonnes (champs) peut être obtenue par les fonctions du catalogue ODBC_SQLTables et ODBC_SQLColumns
  • rendre les requêtes SQL plus efficaces en exploitant les relations entre les tables et les index sur les colonnes, via les commandes ODBC_SQLPrimaryKeys, ODBC_SQLForeignKeys, et ODBC_SQLStatistics

Voici la liste des commandes du catalogue, ainsi que leur description :

Commandes Description
ODBC_SQLTables Retourne la liste des catalogues, schémas, tables et types de tables dans la source de données ;
ODBC_SQLColumns Retourne la liste des colonnes (champs) pour une ou plusieurs tables ;
ODBC_SQLStatistics Retourne une liste de statistiques (nombre d’enregistrements de la table, nombre de valeurs uniques de l’index…) pour une table ou la liste des index associés à la table ;
ODBC_SQLSpecialColumns Retourne la liste des colonnes qui identifient de manière unique un enregistrement dans une table. Retourne aussi la liste des colonnes de la table qui sont automatiquement mises à jour lorsqu’une colonne quelconque est mise à jour lors d’une transaction ;
ODBC_SQLPrimaryKeys Retourne la liste des colonnes qui composent une clé primaire* pour une table donnée. Pour rappel, la clé primaire est une colonne ou une combinaison de colonnes qui permet d’identifier de manière unique l’enregistrement d’une table ;
ODBC_SQLForeignKeys Retourne la liste des clés étrangères* pour une table donnée ou la liste des clés étrangères dans les autres tables et qui référencent une table donnée. Pour rappel, une clé étrangère dans une table donnée référence la clé primaire d’une autre table ;
ODBC_SQLTablePrivileges Retourne la liste des tables et leurs privilèges associés, notamment l’utilisateur qui accorde le privilège et l’utilisateur à qui est accordé le privilège ;
ODBC_SQLColumnPrivileges Retourne la liste des colonnes et leurs privilèges associés pour une table donnée ;
ODBC_SQLProcedures Retourne la liste des procédures stockées dans la source de données. Le terme de procédure est générique et couvre tout à la fois les concepts de procédure et de fonction ;
ODBC_SQLProcedureColumns Retourne la liste des paramètres d’entrée et sortie de l’objet procédure aussi bien que les colonnes qui peuvent constituer l’ensemble résultant de l’exécution de la procédure. Cette commande détermine aussi le type de chaque paramètre (Entrée, Entrée/Sortie, Sortie) et si le paramètre est une colonne ;
ODBC_SQLGetTypeInfo Retourne la liste des types de données supportées par la source de données. Ces types de données sont utilisés dans les requêtes SQL de définition des données comme CREATE TABLE (création d’une table) et ALTER TABLE (modification d’une table).



* pour comprendre les notions de clé étrangère et clé primaire, voici un exemple :

Pictures 0555x0230



Dans ce cas de figure très simple, la table [Employe] contient une clé primaire Employe_ID.

La table [Service] contient la clé primaire Service_ID. La clé primaire sert à identifier de manière unique l'enregistrement de la table. Il existe des systèmes de données où la clé primaire est constituée de plusieurs colonnes.

Dans notre cas, il n'y a qu'une seule clé étrangère, Service_ID, contenue dans la table [Employe]. Cette clé étrangère référence la table [Service] dans la table [Employe]. Elle marque le lien de l'employé au service. Il existe des systèmes de données où la clé étrangère est constituée de plusieurs colonnes.

Toutes les commandes du catalogue retournent le résultat sous forme d'une liste de colonnes ordonnées. Il suffira, pour récupérer les données de ces colonnes, d'associer un champ ou une variable 4D à la colonne, en se basant sur la position de la colonne.


III. Modèle d’utilisation des fonctions du catalogue


Modèle général

       `allocation du handle requête. Le handle de connexion est supposé

       `avoir déjà été alloué et valide (connexion établie)

    $vl_Status:=ODBC_SQLAllocStmt($vl_ConnexionID;$vl_StmtID)
    Au cas ou
          `exécution de la commande du catalogue
       : (ODBC_FonctionDuCatalogue($vl_StmtID;Param1 ;Param2...)=SQL_ERROR)
          `le résultat de la commande est retourné sous forme de colonnes ordonnées.
          `On associe chaque colonne du résultat avec une variable ou champ 4D

       : (ODBC_SQLBindCol($vl_StmtID;1;->VariableouChamp1)=SQL_ERROR)
       : (ODBC_SQLBindCol($vl_StmtID;2;->VariableouChamp2)=SQL_ERROR)
       : (ODBC_SQLBindCol($vl_StmtID;3;->VariableouChamp3)=SQL_ERROR)
          `.....association de la Nième colonne du résultat avec la variable ou champ N
       : (ODBC_SQLBindCol($vl_StmtID;N;->VariableouChampN)=SQL_ERROR)

       Sinon
          $vl_Status:=ODBC_SQLFetch($vl_StmtID)
          Tant que (($vl_Status#SQL_NO_DATA ) & ($vl_Status#SQL_ERROR))
                `Traitement dans les variables ou champs 4D des données remontées
             $vl_Status:=ODBC_SQLFetch ($vl_StmtID)
          Fin tant que
    Fin de cas
       `fermeture et liberation du handle-requête
    $vl_Status:=ODBC_SQLFreeStmt ($vl_StmtID; SQL_CLOSE)

    $vl_Status:=ODBC_SQLFreeStmt ($vl_StmtID;SQL_DROP)



Les appels de commandes du catalogue suivent la structure du programme donné ci-dessus.

  1. On alloue un handle (entier long) de requête, à partir du handle connexion (ODBC_SQLAllocStmt) ;

  2. On effectue l’appel à la commande du catalogue, en passant en premier paramètre le handle de requête, suivi des paramètres propres à la commande ;

  3. L’exécution de la commande du catalogue, en cas de succès, aboutit à la création d’un ensemble résultat, qui se présente sous forme d’une liste ordonnée de colonnes ;

  4. A chaque colonne de l’ensemble résultat, on associe une variable ou un champ 4D. La position de la colonne dans l’ensemble-résultat étant significative, elle doit impérativement être indiquée au moment de l’association. L’association Colonne/Champ ou variable 4D est donc réalisée par l’appel suivant : ODBC_SQLBindCol(HandleRequete;PositionColonne;->VariableouChamp4D) ;

  5. On remonte les données résultant de la commande avec la commande ODBC_SQLFetch.
    Les conditions d’arrêt de cette commande sont la production d’une erreur ou la fin de la remontée des données ;

  6. Fermeture et libération de la requête.

Exemple d’implémentation

    C_ENTIER LONG($0)   `Code retour de la méthode

    C_ENTIER LONG($1;$vl_ConnectionID)   `Identifiant de la connection
    C_TEXTE($2)   `Nom de la Table
    C_POINTEUR(${3})   `pointeurs sur les tableaux des noms colonnes, types et tailles des colonnes
    C_ENTIER LONG($vl_StmtID)   `handle requête
    C_TEXTE($vt_CatalogName)   `nom du catalogue
    C_TEXTE($vt_SchemaName)   `nom du schéma
    C_TEXTE($vt_TableName)   `nom de la table
    C_TEXTE($vt_ColumnName)   `nom de la colonne

    $vl_ConnectionID:=$1
    $vt_CatalogName:=""
    $vt_SchemaName:=""
    $vt_TableName:=$2
    $vt_ColumnName:=""

       `allocation du handle requête
    vl_Status:=ODBC_SQLAllocStmt($vl_ConnectionID;$vl_StmtID)
    vl_Status:=ODBC_SQLColumns($vl_StmtID;$vt_CatalogName;$vt_SchemaName;$vt_TableName;$vt_ColumnName)
    Si ((vl_Status=SQL_SUCCESS) | (vl_Status=SQL_SUCCESS_WITH_INFO))
       vl_Status:=ODBC_SQLBindCol($vl_StmtID;4;$3)   `noms des colonnes
       vl_Status:=ODBC_SQLBindCol($vl_StmtID;6;$4)   `types des colonnes
       vl_Status:=ODBC_SQLBindCol($vl_StmtID;8;$5)   `tailles des colonnes
       Tant que ((vl_Status#SQL_NO_DATA) & (vl_Status#SQL_ERROR))
          vl_Status:=ODBC_SQLFetch($vl_StmtID)
       Fin tant que
    Sinon
       $0:=SQL_ERROR
    Fin de si
    vl_Status:=ODBC_SQLFreeStmt($vl_StmtID;SQL_CLOSE)

    vl_Status:=ODBC_SQLFreeStmt($vl_StmtID;SQL_DROP)



Commentaires sur la méthode :

Cette méthode retourne la liste des colonnes d'une table, ainsi que leur type et leur taille.

A cette fin, elle utilise la commande ODBC_SQLColumns. On voit que cette méthode suit le modèle présenté dans la partie précédente.


IV. Utilisation de la base de test

La base de test contient l'implémentation de toutes les commandes du catalogue, listées dans la seconde partie de cette note.

Au lancement de la base, ou par l'intermédiaire du menu « //Fichier/Demo... », le dialogue principal apparaît :

Pictures 0542x0378



En choisissant le bouton « Connecter... », vous pouvez sélectionner la source de données à laquelle vous voulez vous connecter. La source de données devra avoir été préalablement configurée dans l'administrateur ODBC de Windows.

Pictures 0384x0368



Maintenant que la connexion est établie avec la source de données, vous pouvez utiliser les diverses fonctions du catalogue. Par exemple :

Pictures 0542x0379



L'image montre l'utilisation de la commande ODBC_SQLColumns telle que présentée dans l'exemple d'implémentation décrit plus haut.


V. Conclusion

Cette note vous a montré l'utilisation des commandes 4D ODBC Pro du thème du catalogue, pour décrire structurellement une source de données.


VI. Base exemple

Téléchargez la base exemple :

base exemple

__________________________________________________
Copyright © 1985-2009 4D SA - Tous droits réservés
Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible.
Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte. L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs utilisateurs que des tiers.
Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager 4D SA. La fourniture du logiciel décrit dans ce document est régie par un octroi de licence dont les termes sont précisés par ailleurs dans la licence électronique figurant sur le support du Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être utilisés, copiés ou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence.
Aucune partie de ce document ne peut être reproduite ou recopiée de quelque manière que ce soit, électronique ou mécanique, y compris par photocopie, enregistrement, archivage ou tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA.
4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension ®, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques enregistrées de 4D SA.
Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation.
Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées ou des noms commerciaux de Apple Computer,Inc.
Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc.
4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA.
XTND Copyright 1992-2002 © 4D SA. Tous droits réservés.
XTND Technology Copyright 1989-2002 © Claris Corporation.. Tous droits réservés ACROBAT © Copyright 1987-2002, Secret Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc.
Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.
__________________________________________________
 



Valid XHTML 1.1!Valid CSS!

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
Contacter le responsable de la rubrique 4D