|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Membre confirmé
![]() Inscription : août 2003 Messages : 354 ![]() |
Hello!
Je vous soumets ici un probleme (peut être certains diront tiré par les cheuveux, mais dont j'ai besoin d'une solution...) qui pourrait être un bug du framework... Et c'est un peu la question. Je vais essayé de résumé de façon simple la situation: Dans un évènement Delphi (par exemple XMLModule.BeforeDispatch, mais peu importe en faite), j'ai une dacquery toute simple qui va checker une donnée dans la base. (un simple select sur une table X) A coter, j'ai un xmlservice, avec un DBExtract qui contient une template (select champ1 from tableY where {$param} ). Si param est corretement renseigné, toute mon execution se déroule normalement. (Pour le test, je renseigne ma template directement depuis le navigateur... pour le test seulement A présent, je place volontairement une erreur sql dans ma template param (par exemple une colonne qui n'existe pas)... Mon service en question me donne une erreur: logique. (Erreur SQL machin, invalid column name...) Lors du prochain appel, je rétablis mon param avec une valeur sql correct... tout devrait rentrer dans l'ordre! Eh bien non! Ma DacQuery placée dans mon XMLModule, refuse de se reconnecter comme si j'avais perdu la connexion à la BDD et on obtient une "défaillance irrémédiable"... Il faut iisreseter ! En gros, dès qu'une erreur SQL apparait sur un XMLModule, celui-ci semble perdre la connexion et part complètement en carafe. Est ce que vous pouvez reproduire ce phénomène ? Comment faire pour ne pas déstabiliser tout le module apres une templace mal renseignée? Michael PS: voici un test-case simple sur la base de démo de SQLServer: Code :
Code :
Code :
Code :
|
||||||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() |
en fait tu as de la chance que ca marche dans un cas, parce que le DacQuery ne tient pas compte des templates properties, c'est seulement dans le DBExtract !
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Inscription : août 2003 Messages : 354 ![]() |
De la chance?
Je n'utilise pas de template dans mon dacquery, et la n'est pas mon probleme. Mon probleme c'est qu'apres une erreur SQL dans le DBExtract (là où il y a le template), ma dacquery (elle, classique) ne fonctionne plus! Est ce que je suis dans un fonctionnement particulier ? Mais comment faire autrement alors!? Alors, c'est un bug? Michael |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() |
ah zut j'avais lu en diagonale
non c'est pas un bug. Si tu es dans un XMLApplicationEvents, c'est normal, aucune XMLCollection n'est alloué pour ton gestionnaire d'événement donc pas de Database, et je réitère mon coup de chance, car en fait le DacQuery doit avori une des Databases qui doit trainer dans une des XMLCollections. Donc c'est à toi de récupérer une Database d'un XMLcollection et de l'assigner au DacQuery et bien sur de gérer les transactions !
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Inscription : août 2003 Messages : 354 ![]() |
Si je comprends bien alors, j'ai de la chance que ma DacQuery fonctionne, c ca ?
Mais a vrai dire, je ne comprends pas trop pkoi ca fonctionne tres bien dans tout les cas (j'ai plusieurs modules), mais une fois qu'un dbextract fait une erreur, le database du module en question par en vrille... Ceci dit, je vais essayer d'assigner systématiquement une database à mes DacQuery, tu me dis que ca corrigera le pb! Je reviendrais ici donner des nouvelles Michael |
|
|
00
|
|
|
#6 | ||
|
Membre confirmé
![]() Inscription : août 2003 Messages : 354 ![]() |
Je ne voudrais pas paraître pessimiste, mais j'ai toujours le même probleme!
J'ai rajouter ca dans mon test-case: Code :
-> Défaillance irremmédiable ! (que ce soit dans le module.beforedispatch ou l'xmlapplication.beforedispatch, et quelque soit la position de l'affectation du database) Y a pas de solution, c ca, hein! Michael |
||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() |
Si il y en a une, toute simple.
je viens de reproduire le problèmeet j'ai debuggé pour comprendre ce qui se passait. suite a l'erreur, la gestion d'erreur du Framework deconnecte la base de données effectivement. Ce mécanisme et la au cas ou l'on a une perte de connexion. donc lors de la prochaine requête, lau moment de l'execution du XMLGram, le framework vérifie que la base de donéne est connecté, sinon elle ouvre la connexion. le problème ici c'est que c'est à toi de vérifier qu ela connexion à la base de donnée est bien effective et, le cas échéant, l'ouvrir. autrement tout marche parfaitement !
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
00
|
|
|
#8 | |
|
Membre confirmé
![]() Inscription : août 2003 Messages : 354 ![]() |
Voilà une bonne nouvelle
Mais pourtant je ne parviens toujours pas à resoudre mon soucis Code :
if not DacQuery1.Database.Connected then DacQuery1.Database.Open; Sinon par quoi entends tu Citation:
Michael |
|
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() |
bon d'abord tu es dans quel dispatch ? XMLApplcaitionEvent.BeforeDispatch
ou bien XMLCollection.beforeDispatch ? Je te préviens tout de suite, il faut être dans XMLCollectionEvents.BeforeDispatch. ensuite tu as le code suivant Code :
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
||
|
|
00
|
|
|
#10 |
|
Membre confirmé
![]() Inscription : août 2003 Messages : 354 ![]() |
NICKEL
Ca fonctionne super! 8) Merci beaucoup! Michael |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com