Bases de données client serveur Interbase V. 2. 2. Création des tables . /. 2. 2. 1. Principe Nous allons créer une table contenant pour chaque formation ? Un code, par exemple 3 ; ? IJn Nom, par exemple « Delphi Interbase » , ? Un nombre de jours par exemple 3. ? un prix par exemple 15. 000,00 DA. Pour cela nous devons envoyer une requête de création en langage SQL vers le serveur Interbase, la syntaxe est la suivante : CREATE TABLE forma (f-numero INTEGER, f om or 13 f-jours INTEGER, f-Pr N Il suffit donc de chois colonne le nom de chaque avec son type.
Parmi les types autorisés par Interbase : INTEGER pour les valeurs entières 32 bits. ? SMALLINT pour les valeurs entières 16 bits. ? Numeric (décimales, précision) pour une valeur numérique Flottante. ? Date pour une date. ? CHARACTER (taille) pour des caractères. Pour envoyer cette requête vers le serveur : ? Nous utilisons un TIBDatabase qui assura la connexion vers le serveur. ? Nous utilisons un TIBQuery. ? Nous le relions à TIBDatabase. Nous plaçons la CHARACTER (30), f-jours INTEGER, f- pnx NUMERIC (52)) pour construire la requête, on peut utiliser Add, ou même LoadFromFile pour lire un fichier texte ( . txt) contenant la requête • bQuery1 . Sql. LoadFromFile ( ‘Cree-formations. txt’) ; Nous pouvons entrer la requête en utilisant l’inspecteur d’objets. Septembre 2004 La mise en page n’a aucune importance pour le serveur ; la requête peut être répartie en plusieurs Lignes • lbQuerY1 . sql. AddCCREATE TABLE) ; lbQue0,’1 Sql.
Add(‘ formations’) ; lbQuerY1 -numero INTEGER, f-nom CHARACTER (30), f-jours INTEGER, Et vous pouvez taper manuellement la requête dans la partie « SQL Nous pouvons aussi créer la String en plusieurs étapes par toutes primitives de String telles que la concaténation, Insert, etc… Ma-requête : = ‘CREATETABLE’+Edit1. Text Ma-requête : = Ma-requête + Edit2. Text + ‘ )’ ; IBQuery1 SQL. Add(Ma- Requête 13 toute requête qui modifie des données du serveur (la création par exemple) ne peut se faire que par code ( .
Pas en basculent lbQuery1 Active sur True en mode conception). V. 2. 3. Suppresslon d’une base de données Pour supprimer une base de données, il suffit de spécifier son nom dans la propriété DatabaseName , et après vérification de sa Non ouverture par personne, appelez la méthode DropDataBase. V. 3. TIBTransaction, gestion des transactions En Interbase toutes les requêtes sont crées dans le cadre d’une ransaction. Les transactions sont un mécanisme qul garantit que plusieurs requêtes sont réalisées en entier ou annulées. n exemple simple est le transfert Bancaire, si nous débitons Khaled pour créditer cherif, le système doit garantir que soit les deux modifications sont réalisées on aucune ne l’est. En Delphi, les composants de bases de données utilisent par défau t des transactions transparentes pour le programmeur, cependant on peut gérer les transactions d’une manière explicite, et c’est ce qui est recommandé pour Interbase. En interbase, on utilise un composant TIBTransaction qu’on onnecte ? TIBDatabase.
DefaultTransaction. Pour cela indiquez un temps en seconde différent de O et mentionnez l’action ? remplir dans DefaultAction. DefaultAction Permet d’indiquer l’action qui sera exécutée par le composant lorsque le temps d’inactivité programmé par IdleTimer expirera, les possibilités offertes sont le commit et le Rollback. Params Permet de paramétrer finement la gestion de la transaction. On utilise généralement l’éditeur de propriété qui met à notre disposition un dialogue simplifiant la saisie.
Les paramètres de la propriété Params d’une transaction permettent de ixer le niveau d’isolation entre elle et les autres transactions. Niveaux d’isolation d’une transaction Niveau d’Isolation Description SnapShot (par défaut) (Cest le mode le plus standard) Il offre à Yapplication une photo Instantanée de la base de données telle qu’elle est au moment de rouverture de la transaction. Les autres transactions peuvent faire des 3 ou changées (Read ou Read – Write) tant que celle-ci n’aura pas pris fin ( commit ou Rollback).
Ce mode est rarement utilisé puisqu’il est bloquant et pénalise rensemble des autres transactions. Le paramètre par défaut est le niveau le plus standard à savoir SnapShot, en mode sans attente ( nowait). Face à une situation de concurrence, la transaction peut soit attendre que la ou les transactions qui lui bloquent l’accès à une ressource se terminent (mode wait qui est presque jamais utilisé), soit s’arrêter immédiatement et retourner une erreur (mode nowait c’est le mode qui est presque toujours utilisé).
Les primitives utilisées avec TIBTransaction : pour transaction avant une ou plusieurs opérations. ? TIBTransaction. StartTransaction démarrer une nouvelle ? TIBTransaction. commit pour confirmer la suite d’opérations. ? TIBTransaction. RollBack pour tout Annuler. Remarque : StartTransaction et commit ou RollBack sont souvent utilisées dans TRY.. EXCEPT ; TRY PAGF s 3 (l’explorateur de base de données, un autre exécutable, etc…. ) ne verraient pas la table. ? un autre IBQuery de notre propre application pourrait ne pas voir la table. Lorsque fermée. l’exécutable sera fermé, la transaction sera automatiquement V. 3. 1. La logique des transactions Les transactions sous Interbase sont obligatoires. C’est à dire qu’un simple SELECT pour retourner quelques enregistrements qu seront juste lus doit être compris dans une transaction. Si une transaction n’est pas débutée xplicitement par le programmeur, Interbase le fera. Si cela est parfais dans la plupart des cas pour un SELECT, il n’en va pas de même s’il s’agit d’insertions ou d’autres manipulations modifiant la base de données.
Si les modifications concernent plusieurs enregistrements ou plusieurs tables il est préférables d’entourer tout le bloc par une seule et même transaction pour en assurer la consistance. Pour Interbase une transaction porte un numéro séquentiel qui lui est attribué au moment de son activation. La plus récente des transaction portant le numéro le plus élevée. I ctue une copie des pages 3 le version de l’enregistrement qui possède le plus grand numéro parmi toutes les versions ayant été validées au démarrage de la transaction en cours.
C’est grâce à cette gestion de versions différentes pour chaque enregistrement, que le système de transactions d’Interbase s’oppose au système de verrous utilisé par la majorité des autres bases de données et permet, notamment, de pouvoir faire des sauvegardes cohérentes sans déconnecter les utilisateurs. L’arbltrage final à lieu au moment de la validation de chaque transaction. Certes les transactions d’Interbase sont plus puissantes et plus ouples, elles réclament en contrepartie des traitements plus complexes lors de leur démarrage.
Il est donc judicieux de regrouper le maximum de choses ? l’intérieur d’une transaction. 20 V. 3. 2. Les accès concurrents Avec les transaction, on doit à des moments, gérer le conflit entre cohérence des données e d’accès. Supposons que PAGF 13 peut donc que les données lues par ces requêtes différent de celles lues par les requêtes de sélection en début de traitement (enregistrements supprlmés, modifiés, Insérés). Dans un tel cas, les résultats risquent de ne plus être cohérents. Si on se lace sur le plan de la cohérence des données, il faut entourer toutes les opérations dans une seule transaction.
Mais bien entendu ce sera au détriment de la concurrence des accès. Interbase autorise que plusieurs transactions soient ouvertes en meme temps par le même client, cela s’effectue en utilisant autant de composants TIBTransaction que nécessaire. 21 V. 4. Application : V. 4. 1. Création d’un e table ? Créez une nouvelle application. ? Placez un TlbDatabase sur la Form, double cliquez sur IBDatabase1 Et renseigner le dialogue qui s’affiche. puis tester la connexion avec bouton « Tester IBQueryl . SQL. Add(‘CREATE TABLE formations 1); IBQuery1 . SQL. Add(‘(f_numero integer, f_nom varchar(30), IBQuery1 .
SQL. Add(‘f_jours integer, f_prix numeric(5,2))’); try if IBTransaction1 . lnTransaction then IBTransaction1. Com m t ; IBTransaction1. StartTransaction; IBQuerYl . ExetSQL; IBTransaction1. Commit; except on e:Exception do shawmessage(‘problème de création’); end; V. 4. 2. Vérifier la création pour vérifier que la création de la table à été effectuée, soit on utilise l’Explorateur de bases de données Delphi, soit en lisant les données de cette table dans l’application. Pour lire les données, il suffit d’envoyer la requête : SELECT * From formations ?
Ajouter un second TIBQuery sur la Form, et mettre sa propriété DatabaseName à IBDatabase1. ? Placez un second TButton sur la Form et placez-y la requête de lecture. ? Insérez un DataSource ; mettre sa propriété DataSet ? IBQuery2. Insérez un DBGrid ; initialisez sa propriété DataSource ? DataSource1. IBQueN2. Close; IBTransaction1 . StartTransa c t o n ; IBQue0J3. ExetSQL’ IBTransaction1. Commit, showmessage(‘Problème de Suppression’); Remarques : ? Nous avons utilisé trois IBQuery, nous aurions pu utiliser le ême. On à utilisé un IBQuery au lieu du IBSql, car c’est le premier qui permet ? la fois la modification de données du serveur (Create, Drop, etc…. ) lecture de données depuis le serveur ( SELECT). ? pour envoyer requête de modification fa ut utiliser TIBQuery. ExecSql, et pour la lecture c’est TIBQuery. Open (qui est équivalent à TIBQuery. Active : = True 😉 ? On ne peut pas créer une table à partir de l’inspecteur d’objets en mode conception (il faut exécuter du code). V. 4. 4. Ajouter des données Pour aiouter un enreeistr e table, l’instruction SQL
