OVH Cloud OVH Cloud

CancelUpdate

7 réponses
Avatar
SAISAS
Les utilisateurs de ADO et Visual Basic savent peut-être que CancelUpdate
plante lorsque les règles d'intégrité ne sont pas respectées ... Ils savent
peut-être aussi que lorsqu'on ouvre une liste déroulante pour ne finalement
pas choisir d'élément, celà déclanche tout de même une événement de
modification de données : donc cette action, suivie d'une annulation plante
...

Le bogue est répertorié par MicroSoft et la solution proposée est de forcer
une valeur numérique correcte pour que CancelUpdate fonctionne correctement.

Mon problème : une zone de liste déroulante (datacombo) avec du texte dans
la liste et une valeur numérique dans le champs "BoundColumn".

Le code :
' forcer une valeur numérique si rien dans la liste
If Not IsNumeric(Me.Questionnaire.BoundText) Then
Me.Questionnaire = 0
' Note : cela ne marche pas plus avec Me.Questionnaire.BoundText = 0
End If
' annuler la mise à jour
Conso.rsAnalyses.CancelUpdate
' => je plante là avec "Opération annulée"

Mystère des mystères : lorsque je regarde la valeur contenue dans
Me.questionnaire, l'ai une valeur vide, comme si l'instruction ne s'exécutait
pas (en tout cas, on passe bien dessus).

Quelqu'un aurait-il quelque chose sur le sujet?

7 réponses

Avatar
Jean-Marc
"SAISAS" a écrit dans le message de
news:
Les utilisateurs de ADO et Visual Basic savent peut-être que


CancelUpdate
plante lorsque les règles d'intégrité ne sont pas respectées ... Ils


savent
peut-être aussi que lorsqu'on ouvre une liste déroulante pour ne


finalement
pas choisir d'élément, celà déclanche tout de même une événement de
modification de données : donc cette action, suivie d'une annulation


plante
...

Le bogue est répertorié par MicroSoft et la solution proposée est de


forcer
une valeur numérique correcte pour que CancelUpdate fonctionne


correctement.

Mon problème : une zone de liste déroulante (datacombo) avec du texte


dans
la liste et une valeur numérique dans le champs "BoundColumn".

Le code :
' forcer une valeur numérique si rien dans la liste
If Not IsNumeric(Me.Questionnaire.BoundText) Then
Me.Questionnaire = 0
' Note : cela ne marche pas plus avec Me.Questionnaire.BoundText = 0
End If
' annuler la mise à jour
Conso.rsAnalyses.CancelUpdate
' => je plante là avec "Opération annulée"

Mystère des mystères : lorsque je regarde la valeur contenue dans
Me.questionnaire, l'ai une valeur vide, comme si l'instruction ne


s'exécutait
pas (en tout cas, on passe bien dessus).




Hello,

est ce qu'en ADO tu ne peux pas faire ton statement dans une
transaction,
trapper l'erreur "Opération annulée" et faire juste une sortie de
procédure
sans Commit ?

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Gloops
Bonjour,

Sans avoir approfondi, par curiosité, ça donne quoi avec ça ?

If Not(IsNumeric(Me.Questionnaire)) Then
Me.Questionnaire = 0
End If
________________
SAISAS a écrit :
Les utilisateurs de ADO et Visual Basic savent peut-être que CancelUpdate
plante lorsque les règles d'intégrité ne sont pas respectées ... Ils savent
peut-être aussi que lorsqu'on ouvre une liste déroulante pour ne finalement
pas choisir d'élément, celà déclanche tout de même une événement de
modification de données : donc cette action, suivie d'une annulation plante
...

Le bogue est répertorié par MicroSoft et la solution proposée est de forcer
une valeur numérique correcte pour que CancelUpdate fonctionne correctement.

Mon problème : une zone de liste déroulante (datacombo) avec du texte dans
la liste et une valeur numérique dans le champs "BoundColumn".

Le code :
' forcer une valeur numérique si rien dans la liste
If Not IsNumeric(Me.Questionnaire.BoundText) Then
Me.Questionnaire = 0
' Note : cela ne marche pas plus avec Me.Questionnaire.BoundText = 0
End If
' annuler la mise à jour
Conso.rsAnalyses.CancelUpdate
' => je plante là avec "Opération annulée"

Mystère des mystères : lorsque je regarde la valeur contenue dans
Me.questionnaire, l'ai une valeur vide, comme si l'instruction ne s'exécutait
pas (en tout cas, on passe bien dessus).

Quelqu'un aurait-il quelque chose sur le sujet?


Avatar
SAISAS
Voila une séquence qui marche, mais ne me demandez pas pourquoi !

If Not IsNumeric(Me.Questionnaire.BoundText) Then
Conso.rsAnalyses!Questionnaire = 0
Set Me.Questionnaire.DataSource = Conso
Me.Questionnaire = 0
End If

Note : Conso = lDataEnvironment, Analyse = la table!

"Gloops" a écrit :

Bonjour,

Sans avoir approfondi, par curiosité, ça donne quoi avec ça ?

If Not(IsNumeric(Me.Questionnaire)) Then
Me.Questionnaire = 0
End If
________________
SAISAS a écrit :
> Les utilisateurs de ADO et Visual Basic savent peut-être que CancelUpdate
> plante lorsque les règles d'intégrité ne sont pas respectées ... Ils savent
> peut-être aussi que lorsqu'on ouvre une liste déroulante pour ne finalement
> pas choisir d'élément, celà déclanche tout de même une événement de
> modification de données : donc cette action, suivie d'une annulation plante
> ...
>
> Le bogue est répertorié par MicroSoft et la solution proposée est de forcer
> une valeur numérique correcte pour que CancelUpdate fonctionne correctement.
>
> Mon problème : une zone de liste déroulante (datacombo) avec du texte dans
> la liste et une valeur numérique dans le champs "BoundColumn".
>
> Le code :
> ' forcer une valeur numérique si rien dans la liste
> If Not IsNumeric(Me.Questionnaire.BoundText) Then
> Me.Questionnaire = 0
> ' Note : cela ne marche pas plus avec Me.Questionnaire.BoundText = 0
> End If
> ' annuler la mise à jour
> Conso.rsAnalyses.CancelUpdate
> ' => je plante là avec "Opération annulée"
>
> Mystère des mystères : lorsque je regarde la valeur contenue dans
> Me.questionnaire, l'ai une valeur vide, comme si l'instruction ne s'exécutait
> pas (en tout cas, on passe bien dessus).
>
> Quelqu'un aurait-il quelque chose sur le sujet?



Avatar
Gloops
Il faut avouer qu'il faut cogiter quelques minutes avant de comprendre,
mais l'essentiel est que ça marche.

SAISAS a écrit :
Voila une séquence qui marche, mais ne me demandez pas pourquoi !

If Not IsNumeric(Me.Questionnaire.BoundText) Then
Conso.rsAnalyses!Questionnaire = 0
Set Me.Questionnaire.DataSource = Conso
Me.Questionnaire = 0
End If

Note : Conso = lDataEnvironment, Analyse = la table!


Avatar
SAISAS
Franchement, je serais intéressé par un début d'explication (appel à tous).

Quelques précisions :

D'abord que je n'arrive pas à comprendre pourquoi dans une de mes
applications, il suffit de mettre à 0 la zone questionnaire, et que dans
l'autre (code quasi identique, même description du dataenvironnement, tables
très similaires) il faut faire cette contorsion. Pour être encore plus
complet, dans l'application ou cela fonctionne, c'est une autre zone qui
génère le même problème, alors qu'elle fonctionne très bien dans la seconde!

Ensuite, les explications données par MicroSoft signalent le déclenchement
d'un événement de modification de données lorsqu'on survole une liste
déroulante sans en changer la valeur, et que les contraintes (ici Null not
allowed) sont vérifiées même si la mise à jour est annulée (CancelUpdate).
Donc, j'ai survolé la liste sans choisir un élément, ce qui provoque un
événement "Mise à Null de la valeur", et le CancelUpdate vérifie la
contrainte et plante. Note : je n'ai aucun souci lorsque je ne survole pas la
liste déroulante.

Enfin, les effets secondaires : j'ai essayé d'ignorer (On Error Resume Next)
le problème, sauf que si on ignore la prochaine mise à jour reprend la ligne
ignorée et plante!

Et donc, si je trouvais du code plus propre!

"Gloops" a écrit :

Il faut avouer qu'il faut cogiter quelques minutes avant de comprendre,
mais l'essentiel est que ça marche.

SAISAS a écrit :
> Voila une séquence qui marche, mais ne me demandez pas pourquoi !
>
> If Not IsNumeric(Me.Questionnaire.BoundText) Then
> Conso.rsAnalyses!Questionnaire = 0
> Set Me.Questionnaire.DataSource = Conso
> Me.Questionnaire = 0
> End If
>
> Note : Conso = lDataEnvironment, Analyse = la table!



Avatar
Gloops
Rappelle voir, la zone Questionnaire, c'est une liste déroulante ?
De même type dans les deux applications ?

SAISAS a écrit :
Franchement, je serais intéressé par un début d'explication (appel à tous).

Quelques précisions :

D'abord que je n'arrive pas à comprendre pourquoi dans une de mes
applications, il suffit de mettre à 0 la zone questionnaire, et que dans
l'autre (code quasi identique, même description du dataenvironnement, tables
très similaires) il faut faire cette contorsion. Pour être encore plus
complet, dans l'application ou cela fonctionne, c'est une autre zone qui
génère le même problème, alors qu'elle fonctionne très bien dans la seconde!

Ensuite, les explications données par MicroSoft signalent le déclenchement
d'un événement de modification de données lorsqu'on survole une liste
déroulante sans en changer la valeur, et que les contraintes (ici Null not
allowed) sont vérifiées même si la mise à jour est annulée (CancelUpdate).
Donc, j'ai survolé la liste sans choisir un élément, ce qui provoque un
événement "Mise à Null de la valeur", et le CancelUpdate vérifie la
contrainte et plante. Note : je n'ai aucun souci lorsque je ne survole pas la
liste déroulante.

Enfin, les effets secondaires : j'ai essayé d'ignorer (On Error Resume Next)
le problème, sauf que si on ignore la prochaine mise à jour reprend la ligne
ignorée et plante!

Et donc, si je trouvais du code plus propre!

"Gloops" a écrit :

Il faut avouer qu'il faut cogiter quelques minutes avant de comprendre,
mais l'essentiel est que ça marche.

SAISAS a écrit :
Voila une séquence qui marche, mais ne me demandez pas pourquoi !

If Not IsNumeric(Me.Questionnaire.BoundText) Then
Conso.rsAnalyses!Questionnaire = 0
Set Me.Questionnaire.DataSource = Conso
Me.Questionnaire = 0
End If

Note : Conso = lDataEnvironment, Analyse = la table!






Avatar
SAISAS
Oui oui ...

il faut aller chercher dans msdn les deux bogues qui provoquent l'erreur :

1. lorsqu'on survole la liste déroulante sans rien changer, cela provoque un
événement de modification de données
2. lorsqu'on effectue l'instruction CancelUpdate, cela vérifie quand même
les règles d'intégrité (et surtout ça plante si elles ne sont pas
respectées!).

"Gloops" a écrit :

Rappelle voir, la zone Questionnaire, c'est une liste déroulante ?
De même type dans les deux applications ?