IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Connexion a une base de données Interbase 6.01

février 2001

Par Jean Marc Carayon

Bon, Kylix est donc le frère de Delphi, après quelques essais, je me décide à m'essayer sur une application orientée base de donnée. Mon choix se porte sur Interbase. La version bêta de Kylix étant fournit avec le nécessaire pour utiliser Interbase ou MySQL. Interbase est de plus fournit avec la version test de Kylix, mais comme j'utilise la version 6 sous windows je fais faire de même sous linux. Je télécharge donc les "rpm" nécessaires. Les "rpm" c'est assez nouveau pour moi, ne sachant pas trop comment m'y prendre, je désinstalle donc les anciens packages de IB puis, j'installe les nouveaux. Tout se déroule pour le mieux, une bizarrerie les fichiers se sont installés dans '/opt/', ce n'est pas là qu'étaient les anciens? Maintenant que j'ai installé IB6, je dois pouvoir récupérer mes bases windows. Pour un début on va faire simple, pas de transaction, ni d'insertion ou d'édition, je veux juste prendre les composants DBExpress en main pour voir. J'ai sous la main une base IB6 qui contient la liste des communes de France et le code postal associé. Donc le projet sera le suivant : Une form avec un TDBGrid et un TEdit, l'utilisateur inscrit du texte dans la zone de saisie et le DBGrid affichera le résultat de la recherche. S'il s'agit de chiffre, c'est que nous recherchons un code postal sinon c'est le nom d'une commune et la requête sera construite en conséquence. Histoire de peaufiner un peu un, clic sur les entêtes de colonne du DBGrid effectuera un tri croissant ou décroissant sur le champ correspondant de la base.

Construction de l'interface du projet

Une form, un DBGrid, un TEdit, un TStatusBar... que nous manque t'il ? Juste de quoi de connecter à la base un TDataSource, un TSQLConnect et un SQLClientDataSet. Kylix se différencie de Delphi en ce qui concerne les composants d'accès BD. Mais il ne semble pas y avoir de difficultés d'adaptation. La structure de la table est simple, juste des index descendants et ascendants sur chaque champ (CODE et COMMUNE).

Une vue de l'application dans l'IDE de Kylix:

{short description of image}

Finalement rien de bien compliqué, très peu d'éléments. Il faut maintenant tester la connection à la base, j'ai copié celle-ci de windows vers '/opt/testib.gdb' c'est à dire dans le répertoire d'installation de d'interbase. Le composant SQLConnection est là pour ça. Un double clic dessus nous ouvre une fenêtre de configuration

{short description of image}

Comme on peut le voir c'est plutôt limpide les boutons servent ajouter/supprimer des sortes de (je n'ose pas le dire) d'alias :-) vers différentes connections. La Propriété Database est garnit avec le chemin de la base, le dialect est mis à 3, c'est tout. Je teste la connection directement dans l'IDE, IMPECCABLE. Je ne le crois presque pas, je me souviens de mes débuts avec Delphi et Paradox dans un environnement windows que je connaissais pourtant mieux, j'avais beaucoup plus galéré que là :-))

Le code

Très simple :-)

On veut se connecter à la base donc à la création de la form


{short description of image}

et l'inverse dans le Close de la form.

Par défaut il ne faut rien afficher dans le DBGrid. Le code SQL suivant sera inscrit dans la propriété CommandText du SQLClientDataSet: "Select * from commune where code is null"

Une vue de l'inspecteur d'objet:

{short description of image}

Ensuite il faut détecter la saisie de l'utilisateur dans le Tedit. Là nous avons 2 possibilités, ou il s'agit de nombre et recherche portera sur un code postal, sinon se sera sur un nom de commune. Une petite fonction maison IsInteger sans chargera.

Donc a chaque touche pressé dans le TEdit nous aurons

{short description of image}

A noter NomChamp et Modetri sont des variables globales servant a stocker le mode tri et champ sur lequel il est effectué.

Tout est ok, cela ressemble, non est conforme à ce que j'aurais fait sous Delphi, à l'exception des composants DBExpress qui n'existe pas dans Delphi, du moins pas encore :-)

Au Click sur les entêtes de colonnes, on va trier le résultat de la requête dans l'ordre du champ concerné ou l'inverser si déjà trié sur ce champ

{short description of image}

Finalement dans le Tstatusbar, on affiche les informations portant sur le mode de tri

{short description of image}

Exécution

{short description of image}

Rien à dire c'est beau, pas mon projet, Kylix bien sur :-)

 

Execution hors IDE Kylix

Là, j'ai eu un soucis une histoire de lib non trouvé. Mais en examinant comment fonctionne Kylix je m' aperçois qu'il est lancé par un script « startkylix » afin de charger les lib nécessaires. Je ne vais pas m'embêter je vais pomper le script :-)

ce qui nous donne un truc de ce genre

#!/bin/bash

source /root/kylix/bin/kylixpath /root/kylix >/dev/null

/root/ibtest/ibtest $*

Sachant que mon application se trouve dans /root/ibtest/ et se nomme ibtest. La je vais me faire enguirlander parce que je fais ça en root. Promis juré, je vais changer ça. Sinon, j'ai renommé le script en « start » et l'ai placé dans le répertoire du binaire (pas de .exe) et tout fonctionne bien. Pour m'en convaincre je qui KDE et lance un WindowManager plus minimaliste, BlackBox je relance mon application à l'aide du script. Tout fonctionne très bien.

Il est évident que ce petit projet n'utilise pas toutes les ressources de Kylix ni même d'Interbase. En fait j'ai plutôt l'impression d'avoir utilisé un canon pour tuer un mouche. Maintenant que j'ai l'arme (Kylix) c'est à moi de chasser plus gros :-)

Pour la suite, il me faut passer un peu de temps sous linux, prendre le système en main, et commencer à discuter avec mon boss du futur portage de nos applications vers Linux :-))

Comme amélioration on peut aussi envisager d'incrire le path des lib en ajoutant dans ".bash_profile" la ligne suivante: source /root/kylix/bin/kylixpath /root/kylix > /dev/null

Je retourne vite à mon Kylix :-)