|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : avril 2004 Messages : 121 ![]() |
Bonjour
J'ai un problème qui semble tout bête mais pour lequel je n'arrive pas à trouver de solution ni même déterminer les causes exactes. J'ai une base firebird 2.0 avec plusieurs tables que je manipule avec un programme écrit avec C++Builder et les composants SQLDirect. Pour une table, j'ai des erreurs "Record changed by another user" dès que j'essaie d'y écrire... Or, je travaille en local, et je suis bien certain qu'aucune autre application n'accède à cette table. gfix ne me trouve aucune "limbo transaction", je ne comprends pas la raison de cette erreur... Quelqu'un l'a déjà rencontrée ? Quelle solution ? J'ai tenté sans succès de passer l'update mode en upWhereKeyOnly...
__________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi ! Albert Einstein. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
houlala ...
il faut aprendre à gérer tes transactions et tu n'as pas de limbo (limbo c'est seulement pour les commit deux phases entre deux bases) SQLDirect n'est pas forcément le meilleur choix en tout cas manifestement tu le manies mal c'est plus une question SQLDIRECT qu'une question Firebird
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#3 | ||
|
Membre du Club
![]() Inscription : avril 2004 Messages : 121 ![]() |
Merci pour ta réponse.
Un problème de transactions ? Je m'en doutais un peu. Mais j'ai du mal à comprendre ce qui ne va pas... Une transaction est bien en cours, aucune autre opération d'écriture n'a été effectuée avant ! Bon, je vais faire quelques essais simples pour tenter de comprendre ce qui pourrait ne pas aller... Citation:
Citation:
__________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi ! Albert Einstein. |
||
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
en l'espèce ce n'est pas un bug sqldirect
sqldirect est très bien quand on doit travailler avec differents sgdb si tu ne dois travailler qu'avec Firebird, autant prendre des outils spécialisés Firebird pour C++, il y a IBPP, mais aussi UIB qui fonctionnent avec C++Builder mais c'est une autre logique il faut que tu isoles tes traitements ou que tu fonctionnes en read committed à la manière du BDE ou alors que tu isoles tes traitements, travailles avec des select qui rapatrient les choses dans un dataset en mémoire et qui ferment leur transaction et faire des update, insert, delete dans une autre transaction
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : avril 2004 Messages : 121 ![]() |
Effectivement, ce ne doit pas être un bug SQLDirect, puisque tout fonctionne bien avec d'autres tables, et qu'un essai simple avec celle-ci fonctionne egalement. C'est bien un code assez m**dique qui doit être à l'origine du problème.
Mais comme en fouillant un peu j'étais tombé sur ceci et que j'ai effectivement sur cette table plusieurs index numériques et composés, je me demandais un peu s'il y avait une astuce... En fait, c'est une appli que je reprends, qui avait été écrite il y a longtemps en utilisant BDE, puis est passée sous FlashFiler pour finir avec Firebird... Autant dire que le code n'est pas très génial ! Mais comme elle fonctionne à 80% dans l'état actuel, et que je ne suis chargé que de mettre au point les 20% qui ne l'ont pas été lors de la migration depuis FlashFiler, j'hésite un peu à tout reprendre... Je connais IBPP qui est bien, mais ce ne sont pas des composants => une philosophie assez différente et réécriture totale des parties concernées, et au final manque de cohérence avec le reste de l'appli... J'ai découvert UIB il y a quelque temps au hasard de mes interrogations de google, mais n'ai pas étudié de près. Serait-ce assez facile de (tout) repasser de SQLDirect à UIB sans trop modifier de code ? Serait-ce intéressant ? J'en doute un peu, si on garde une approche de type BDE... A moins que cela facilite nettement la mise au point de la partie que je dois faire fonctionner ? J'apprécierai tout conseil, mais j'ai bien peur d'être condamné à me débrouiller avec ce qui existe
__________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi ! Albert Einstein. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com