Problème asp - oracle

Signaler
Messages postés
8
Date d'inscription
lundi 27 septembre 2004
Statut
Membre
Dernière intervention
25 mars 2005
-
Messages postés
8
Date d'inscription
lundi 27 septembre 2004
Statut
Membre
Dernière intervention
25 mars 2005
-
Bonjour à tous,



Lors du développement d'une application en asp pour la gestion d'un économat hospitalier, je rencontre le problème suivant:



Un encodeur crée une commande dans un écran de sélection des produits. Il clique ensuite sur le bouton "sauver".



La commande est traitée au niveau serveur et l'encodeur reçoit un message comme quoi sa commande est bien sauvegardée.



Au niveau du serveur, au lieu
d'avoir une seule commande, j'en ai deux: une qui est la copie conforme
de ce que l'encodeur a entré, et l'autre, qui contient une commande
avec le même nombre de produits, la même quantité mais des id produit
totalement différents.



Cette situation arrive de façon aléatoire.



Ma question est la suivante: est ce
qu'un développeur a déjà rencontré ce genre de situation, est il
possible que ce soit un problème hardware au niveau du serveur (mémoire
paginée ou autre)?



Je suis dans le flou absolu, quelqu'un peut il m'aider?



Je tiens à la disposition de tous les codes et fichiers de résultats.



D'avance un grand merci à tous et toutes qui posteront une réponse...



O. D.

2 réponses

Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour

Faudrait effectivement voir les codes, car là ...
Cause "classique" : l'enregistrement des données en bdd se fait sur la même page que l'affichage (de la confirmation, par exemple) . Résultat : si l'utilisateur clique sur actualiser, ou appuie sur F5, on a un enregistrement en double ( ou une erreur de clé en doublon, c'est selon. Il faudrait voir comment est déterminé ton id produit)
Je ne pense pas à un pb matériel

Cordialement
Roro webDev
Messages postés
8
Date d'inscription
lundi 27 septembre 2004
Statut
Membre
Dernière intervention
25 mars 2005

Voici le code brut retiré du fichier... C'est la fonction de sauvegarde des valeurs commandées.



En fait, l'encodeur a créé une commande à 8:53:56. Une autre commande,
avec exactement les mêmes quantité, les mêmes prix unitaire mais avec
des produits différents est arrivée dans la db à 8:56:00.



Pour le cas du bouton F5 ou Actualiser, l'utilisateur est directement
redirigé sur une autre page lors de la commande, il ne peut donc pas
passer deux fois dans le script.



Ce qui m'inquiete, ce sont ces 2 minutes entre les deux commandes.



L'encodeur est seul sur le serveur, il n'a jamais encodé deux commandes et ferme son browser après chaque commande.



Je reste à votre disposition pour toute informaiton complémentaire et attend vos réactions sur ce sujet,



O.D.



'******************************************************************



Private Sub ParSave(pNbrPrdo)



dim Sql

dim Id_Demand

dim id_DemandsDet

dim i

dim coutTotal

dim varPriceUnit

dim swError

dim swPrixNul



swError =false





'Response.Write ""

'Response.Write "alert('passe')"

'Response.Write "CursorWait();"

'Response.write "document.FormCommande.btnCom2.disabled = true;"

'Response.Write ""



couTotal = 0



for i = 1 to pNbrPrdo

varPriceUnit = request("c" & i)

'-- Prix Total du produit

if request("c" & i) "" then

varPriceUnit =
replace(request("c" & i ), "." , ",")


coutTotal =
cdbl(coutTotal) + cdbl(varPriceUnit)


end if

next





if coutTotal "" and coutTotal "0" then

coutTotal = replace(coutTotal,",",".")

else

CoutTotal =0

end if



Response.Write "CoutTotal = " & coutTotal



' WriteTraceLine ("coutotal =" & coutTotal)



swPrixNul = false

'-- Test le cas où une commande n'aurait que des prix nuls

for i = 1 to pNbrPrdo

If tabquantite(i) "0" then

swPrixNul = True

exit for

End if

next





if coutTotal "0" or swPrixNul = True then



Response.write ""

Response.write "document.FormCommande.btnCom2.disabled = true;"

' document.FormCommande.btnCom4.disabled = true;

Response.Write ""



id_Demand = GetNextSequenceNr("Demands")



sql = "INSERT INTO Demands ("

sql = sql & " DemandsId, Demandsdate, ServiceId, Status, Read,"

sql = sql & " Type, Servicedest, ReccreId, Recmodid, TotalCommand )"

sql = sql & " VALUES (" & id_Demand & ", "

sql = sql & "'" & now() & "', "

sql = sql & Session("ServiceId") & ", "

sql = sql & " '1', "

sql = sql & " 'N', "

sql = sql & " 'D', "

sql = sql & " Null, "

sql = sql & Session("UserId") & ", "

sql = sql & Session("UserId") & ", "

sql = sql & CoutTotal & " ) "



' Response.Write "
sql = " & sql



on error resume next

OraSession.BeginTrans



if OraExecsql(sql) < 0 then

OraSession.DbRollback

' call Msg2("Valeurs non sauvées","red")



Else

OraSession.DbCommitTrans

' call Msg2("Valeurs sauvées","green")



for i = 1 to
pNbrPrdo





'-- Sauve les produits qui ont
une quantite et un prix >=
0

If
Session("tabQuantite1")(i) "0" then ' and
(request("b" & i )) "0"


id_DemandsDet =
GetNextSequenceNr("DemandsDet")


sql = "INSERT INTO Demandsdet ("


sql = sql & " DemandsDetId,
DemandsId, SigpharmId, Status, Qty,"


sql = sql & " Qtydelivered,
ReccreId, Cond, Unitprice )"





sql = sql & " VALUES (" &
id_DemandsDet & ", "



sql = sql & Id_demand &
", "

'
sql = sql & tabSigPharmId(i)
& ", "


sql = sql & Session("tabSigPharmId1")(i) & ", "

sql = sql & " '1', "

'
sql = sql & tabquantite(i) *
tabConditionnement(i) & ", "


sql = sql & Session("tabQuantite1")(i) *
Session("tabConditionnement1")(i) & ", "

sql = sql & 0 & ", "


sql = sql & Session("UserId")
& ", "


'
sql = sql &
tabConditionnement(i) & ", "



sql = sql &
session("tabConditionnement1")(i) & ", "


varPriceUnit =
replace(request("b" & i ), "," , ".")




sql = sql & varPriceUnit
& " )"



on error resume next



OraSession.BeginTrans




if
OraExecsql(sql) < 0 then


OraSession.DbRollback

'
Response.Write "Valeurs non
sauvées

"
'


swError = true

Else



OraSession.DbCommitTrans


end if

end if

next



'
Response.Write "Valeurs
sauvées

"


if swError = true then

call
Msg2("Valeurs non sauvées","Red")


else

call Msg2("Valeurs sauvées","Green")

end if



End If

'''else

''' Response.write ""

''' Response.write "document.FormCommande.btnCom2.disabled = false;"

''' Response.Write ""

Session.Contents.Remove("tabQuantite1")

Session.Contents.Remove("tabConditionnement1")

Session.Contents.Remove("tabSigPharmId1")



End if





End Sub