Firebird connexion

Soyez le premier à donner votre avis sur cette source.

Vue 9 780 fois - Téléchargée 2 533 fois

Description

Compte tenu des nombreuses questions relatives aux bases de données, j'avais, il y a déjà pas mal de temps l'intention de faire ce programme.
Ayant le choix entre un tuto ou un source, j'ai choisi la deuxième solution celle-ci me semblant plus démonstrative :

C'est un exercice de base relatif à la création puis la gestion d'une base de données.
Pour illustrer cette étude, j'ai pris un projet comprenant 4 tables dont trois en relation 1-N.

Vous trouverez donc une modélisation :

- Mcd.er1 (fichier du programme Erwin Data Modeler pour ceux qui possèdent cet outil)
- ImageMCD.bmp

La construction de ce modèle ne faisant pas partie de ce programme, je joins deux scripts SQL :

- ScriptWithData.sql (création de la base avec ses données fictives pouvant être exécuté directement à partir d'un gestionnaire de base de données style EMS For Interbase or Firebird)

- ScriptWithoutData.sql (création de la structure seule pouvant être exécuté directement à partir de l'utilitaire isq.exe fourni avec Firebird dans le dossier bin :

La commande est la suivante : IN c:\ ScriptWithoutData.sql ;

Puis le source permettant l'utilisation de celle-ci.

J'avais souhaité montrer plus de choses avec mes composants préférés (TIBO de Jason Wharston) mais ces derniers ne sont pas free.
Je me suis donc rabattu sur les composants ZEOS libres (ZEOSDBO-7.0.3-stable sur SourceForge)
Ceux-ci sont moins intuitifs que TIBO, notamment pour mettre en place les générateurs, mais au final, on s'en sort quand même.

Vous trouverez dans ce programme :

- La mise en place d'un alias
- Les paramètres de connexion à la base
- Toutes les initiations :
o Gestion des menus
o Gestion des boutons
o Gestion d'un menu contextuel
o Gestion des générateurs
o Gestion du mode transactionnel
o Gestion des bookmarks
o Etc.

Tous les composants sont posés bruts sur la forme sans toucher à leurs propriétés.

Développé sous Delphi7 il fonctionne sous environnement XP et SEVEN.

Vous constaterez que ce source est très court mais reste suffisant pour gérer correctement cette base.

Cet exemple simple peut constituer l'ossature de base d'un logiciel plus complexe et peut facilement être adapté en mode réseau.

Bien entendu, il reste encore beaucoup de points à coder comme par exemple
Les contrôles de saisie, les cascades, les formulaires des tables annexes, un écran d'entrée de protection, la création des états de sortie etc. etc.

Je ferais peut-être une suite si un intérêt se fait sentir.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
voilà, j'ai réintroduit la procédure SetGenerator
que j'ai supprimée du AddRecord et replacée au bon endroit dans le SaveRecord.

Il n'y aucune autre modification à effectuer (rien à toucher aux scripts)
je n'ai pas constaté de double incrémentation.

tout marche bien !
Messages postés
23
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
9 avril 2016

je vous félicite pour ce grand don merci
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
ne marche plus..

en mode ajout seulement..
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
@fabmc2:
ma dernière remarque était pour castordev64..
mais pour ton souci de déconnexion wifi, j'ai bien compris la difficulté
bien que de mon côté, je n'ai pas rencontré ce genre d'inconvénient.

A noter, par exemple, que les composants TIBO évoqués dans ma présentation ont des paramètres
de TimeOut et disposent de tests afin de savoir sur la connexion est active sans qu'il soit nécessaire de lancer une requête.
Autrement dit, il suffit dans le cas d'une déconnexion intempestive de ré-activer la connexion.
il faut aussi prévoir une déconnexion automatique au bout d'un certain laps de temps d'inactivité sinon cela empêcherait une opération BackUp/Restore.
(j'ai eu le cas de quelqu'un parti en congés en laissant sa connexion à une base..)

Pour la gestion des curseurs, oui, les bookmarks règlent cette difficulté mais dans le cas d'une déconnexion, il faut néanmoins tester si la sauvegarde du pointeur reste toutefois active.

Je viens d'ailleurs de m'apercevoir qu'il y a une erreur dans mon programme..
En effet, du fait que la gestion des incréments est confiée au SGBD,

la ligne : SavePlace := TZQUERY(DatasetInProgress).GetBookmark; { sauvegarde du pointeur pour conserver la position }

ne marche plus..

il faut la placer au dessus de l'append, mais dans ce cas, on ne récupère pas encore la future incrémentation et la sauvegarde positionne le curseur sur le précédent !

je vais devoir faire une maj..
Messages postés
8
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
28 août 2009

@cantador
Tu m'as mal compris. Je ne te dis pas que Firebird se déconnecte de manière intempestive, il est au contraire particulièrement stable. Mais imaginez un programme client/serveur connecté en wifi (ou cablé mais la perte de connexion est beaucoup plus rare)
et que le wifi se coupe puis se reconnecte. La connexion à la base Firebird est perdue et ne se reconnecte pas automatiquement.
Depuis mon dernier message (comme quoi le fait d'en parler ça m'a inspiré) j'ai imaginé (mais pas encore testé) une méthode répondant à ce problème, voici l'idée :
- envoyer périodiquement une requete la plus "légère" possible(exemple chaque seconde + ou - à voir)
- si une erreur est renvoyée (notamment Client lost connection to FB server )
alors c'est que la connexion au serveur a été perdue. Dans ce cas, reconnecter la base de données.
Le seul point genant c'est la perte des curseurs avant la deconnexion et comment les récupérés . peut être les bookmarks mais je ne connais pas cette fonction (je vais m'y atteler)
voilà , dans l'attente de vos commentaires...
Afficher les 20 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.