|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 2 ![]() |
Bonjour,
J'utilise une base de donnée firebird 1.5.2 et j'ai un petit probleme presque amusant mais assez embêtant lors de la suppression d'enregistrements... Je peux faire des insertions dans la BD de deux manières. A partir du programme principal ou d'un module qui permet de gérer le contenu de la BD. L'affichage des clients et des produits associés se fait donc dans le module, à partir duquel on peut créer, modifier ou supprimer de nouveaux clients. Situation ordinaire pour une BD!! Depuis le programme principal, il est également possible d'insérer un nouveau client.... Mais ce sont surtout des enregistrements concernant l'association entre les clients et les produits achetés qui sont insérés dans la BD à ce niveau. Mon problème est le suivant: Lorsque je surpprime un client depuis ce module deux cas sont possible: 1. le client a été inséré depuis le module (interface graphique). 2. le client a été inséré depuis le programme principal. lorsque je supprime un client du cas 1 il n'y a pas de problème, l'enregistrement est supprimé et tout va bien, je peux recommencer et supprimer tous les enregistrements insérés de cette manière sans le moindre problème. Lorsque je supprime un enregistrement qui a été inséré suivant le cas 2, si cet enregistrement n'est pas le seul à avoir été inséré par la méthode du point 2, alors tout va bien aussi. Mais lorsqu'on arrive au dernier enregistrement inséré suivant la méthode du point 2, même s'il reste des enregistrements insérés par la méthode du point 1, ils ne veulent plus s'afficher dans la datagrid lorsque après la suppression du dernier enregistrement de type point 2 je réexécute le select adéquat pour afficher les données dans la datagrid. Et je précise bien que les enregistrements qui ne veulent plus s'afficher se trouvent TOUJOURS dans la base de donnée. Ils se réafficheront uniquement lorsqu'un nouvel enregistrement de type point 2 aura été effectué. En effet dès qu'un enregistrement aura été effectué depuis le programme principal, tout les enregistrements qui avaient disparu seront de nouveau sélectionné et affiché. BIZZARE non!? COMPOSANTS utilisés: Du coté du programe principal, j'utilise un TIBDataBase et une TIBTransaction et un TIBQuery pour effectuer les insertions lorsqu'il le faut. Du coté du module, j'utilise également un TIBDataBase et une TIBTransaction, des TIBQuery pour l'ajout, la modification, suppression et un TIBDataSource pour lier les données à un TIBDataGrid et d'autres contrôles. Je précise encore que les valeurs des propriétés de chaques TIBDataBase et TIBTransaction d'un côté ou de l'autre sont pareilles. des commits sont mis en oeuvres lors des opérations d'insertion, suppression et modifications... Je me demande à quel niveau ce situe le problème: 1. Le fait d'utiliser un fichier base de donnée avec deux composants database, 2. mauvaise utilisation des transactions, 3. mauvaise utilisation des TibQuery, 4. mauvaise configuration des propriétés du DataSource 5. ou encore mauvaise configuration des propriétés de la TIBDataGrid.....!!!!????? Si qqun à tenu le coup jusqu'au bout en lisant mon message et qu'en plus il aurait une solution, ou une autre idée pouvant faire avancer le schmilblick, son aide sera la bienvenue... |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
un simple pb de refresh du select et la sale mani pour ces composant d'utiliser une seule transaction persistante pour gérer les select
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 2 ![]() |
Merci pour la réponse mais je ne vois pas exactement ce que je dois faire pour y remédier et je ne suis vraiment pas sûr qu'il s'agisse d'un problème de transaction 'persistente' car le problème peut survenir lors d'une autre session alors que la base de donnée a été 'commité...' et fermée....
Je me demande s'il ne pourrait pas plutot s'agir d'un problème d'instance car FireBird est en mode superserver. Comme les insertions peuvent se faire depuis le programme principal ou depuis le module, j'ai donc deux composants TDataBase qui sont comme j'ai cru le comprendre connectés chacun à une instance du serveur de base de donné. la question reste la même. Pourquoi et oh grand dieu pourquoi ce problème se passe-t-il lorsque je supprime le dernier enregistrement ayant été inséré depuis le programme principal et que lorsqu'il y en a plus d'un, on peut très bien les effacer sans que cela perturbe l'affichage. Tant qu'il reste au moins un enregistrement inséré depuis le prog. principal, la grid affiche très bien tous les enregistrement, autant ceux insérés depuis le module que le prog. principal, mais lorsque le dernier inséré depuis le prog. principal est supprimé, ces par ex. 1000 autres enregistrements ne sont plus affiché...! |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
quel type de transaction est utilisé, quand les transactions de select sont elles ouvertes ...
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
Copyright © 2000-2012 - www.developpez.com