|
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:
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
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
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:
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
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
Finalement dans le Tstatusbar, on
affiche les informations portant sur le mode de tri
Exécution
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 :-)
|