Transformer des bouts de codes vb en fonctions ou procédures sql serve
Transformer des bouts de codes vb en fonctions ou procédures sql serve - SQL/NoSQL - Programmation
MarshPosté le 17-10-2007 à 18:53:25
Je sais que vous n'avez pas le temps , mais j'ai un petit problème à vous poser , j'ai une fonction écrite en vb 6.0 que j'aimerai transformer en ps ou fonction seleon le cas le plus adapté.
J'ai lu l'article qui parlais d'éviter les curseurs , mais je me demande comment faire sans utilisation des curseurs: Car une fois déja j'avais utiliser les curseurs mais cela mettait trop de temps avant d'envoyer un résultat.
Je me permet de vous mettre ici le code vb que si vous avez le temps ou la patience vs regarderez, sinon ce n'est pas grave . Je sis entrain d'essayer de le faire moi même petit à petit, mais un coup de mais serai le bien venu. C'est une partie de fonction permettant de calculer le cump.
Merci pour votre compréhension et votre sollicitude. Voici le bout de code:
Public Function CalculVeille(DateVeille As Date, Optional ArticleDeDebut As String, Optional ArticleDeFin As String) As Boolean
Dim DateFinVeille As Date CalculVeille = False
ActiveBase.Execute "DELETE * FROM VALEUR" If ArticleDeDebut = "" Then
Set RstM_Valeur = New ADODB.Recordset RstM_Valeur.Open "select * from Valeur order by codprod,datemvt,typemvt", ActiveBase, adOpenDynamic, adLockOptimistic
If RstM_Valeur.EOF Then 'fo continuer le traitement meme s'il y a pas de mouvements pour la période de veille End If First = True If Not RstM_Valeur.EOF Then RstM_Valeur.MoveFirst: Cdd = RstM_Valeur.Fields("codprod" )
While Not RstM_Valeur.EOF
While RstM_Valeur.Fields("codprod" ) = Cdd If Not First Then If RstM_Valeur.Fields("typemvt" ) = "E" Then Ccump = (LastQte * LastCump + (RstM_Valeur.Fields("prixunit" ) * RstM_Valeur.Fields("qte" ))) / (LastQte + RstM_Valeur.Fields("qte" )) LastQte = LastQte + RstM_Valeur.Fields("qte" ) LastCump = Ccump Else LastCump = Ccump LastQte = LastQte - RstM_Valeur.Fields("qte" ) End If
Marsh Posté le 17-10-2007 à 18:53:25
Je sais que vous n'avez pas le temps , mais j'ai un petit problème à vous poser , j'ai une fonction écrite en vb 6.0 que j'aimerai transformer en ps ou fonction seleon le cas le plus adapté.
J'ai lu l'article qui parlais d'éviter les curseurs , mais je me demande comment faire sans utilisation des curseurs:
Car une fois déja j'avais utiliser les curseurs mais cela mettait trop de temps avant d'envoyer un résultat.
Je me permet de vous mettre ici le code vb que si vous avez le temps ou la patience vs regarderez, sinon ce n'est pas grave .
Je sis entrain d'essayer de le faire moi même petit à petit, mais un coup de mais serai le bien venu.
C'est une partie de fonction permettant de calculer le cump.
Merci pour votre compréhension et votre sollicitude.
Voici le bout de code:
Public Function CalculVeille(DateVeille As Date, Optional ArticleDeDebut As String, Optional ArticleDeFin As String) As Boolean
Dim DateFinVeille As Date
CalculVeille = False
ActiveBase.Execute "DELETE * FROM VALEUR"
If ArticleDeDebut = "" Then
ActiveBase.Execute "INSERT INTO VALEUR ( CODEMVT, CODPROD, QTE, PRIXUNIT, MONTANT, DEMANDEUR, DESTINATION, ORIGINE, UTILISATION, NUMOBJET, NUMFABRIC, CODEMACH, CUMP, VALEUR, QTEDISP,TYPEMVT,DATEMVT,CODEFAMIL,CODESFAM,BONENTRESORTIE) SELECT DETAILMOUVEMENTS.CODEMVT, DETAILMOUVEMENTS.CODPROD, DETAILMOUVEMENTS.QTE, DETAILMOUVEMENTS.PRIXUNIT, DETAILMOUVEMENTS.MONTANT, DETAILMOUVEMENTS.DEMANDEUR, DETAILMOUVEMENTS.DESTINATION, DETAILMOUVEMENTS.ORIGINE, DETAILMOUVEMENTS.UTILISATION, DETAILMOUVEMENTS.NUMOBJET, DETAILMOUVEMENTS.NUMFABRIC, DETAILMOUVEMENTS.CODEMACH, DETAILMOUVEMENTS.CUMP, DETAILMOUVEMENTS.VALEUR, DETAILMOUVEMENTS.QTEDISP, MOUVEMENTS.TYPEMVT, MOUVEMENTS.DATEMVT, ARTICLES.CODEFAMIL, ARTICLES.CODESFAM,MOUVEMENTS.BONENTRESORTIE " & _
"FROM (MOUVEMENTS INNER JOIN DETAILMOUVEMENTS ON MOUVEMENTS.CODEMVT = DETAILMOUVEMENTS.CODEMVT) INNER JOIN ARTICLES ON DETAILMOUVEMENTS.CODPROD = ARTICLES.CODPROD " & _
"WHERE (MOUVEMENTS.DATEMVT)>=#" & DebutExo & "# And (MOUVEMENTS.DATEMVT)<#" & DateVeille & "#"
Else
ActiveBase.Execute "INSERT INTO VALEUR ( CODEMVT, CODPROD, QTE, PRIXUNIT, MONTANT, DEMANDEUR, DESTINATION, ORIGINE, UTILISATION, NUMOBJET, NUMFABRIC, CODEMACH, CUMP, VALEUR, QTEDISP,TYPEMVT,DATEMVT,CODEFAMIL,CODESFAM,BONENTRESORTIE) SELECT DETAILMOUVEMENTS.CODEMVT, DETAILMOUVEMENTS.CODPROD, DETAILMOUVEMENTS.QTE, DETAILMOUVEMENTS.PRIXUNIT, DETAILMOUVEMENTS.MONTANT, DETAILMOUVEMENTS.DEMANDEUR, DETAILMOUVEMENTS.DESTINATION, DETAILMOUVEMENTS.ORIGINE, DETAILMOUVEMENTS.UTILISATION, DETAILMOUVEMENTS.NUMOBJET, DETAILMOUVEMENTS.NUMFABRIC, DETAILMOUVEMENTS.CODEMACH, DETAILMOUVEMENTS.CUMP, DETAILMOUVEMENTS.VALEUR, DETAILMOUVEMENTS.QTEDISP, MOUVEMENTS.TYPEMVT, MOUVEMENTS.DATEMVT, ARTICLES.CODEFAMIL, ARTICLES.CODESFAM,MOUVEMENTS.BONENTRESORTIE " & _
"FROM (MOUVEMENTS INNER JOIN DETAILMOUVEMENTS ON MOUVEMENTS.CODEMVT = DETAILMOUVEMENTS.CODEMVT) INNER JOIN ARTICLES ON DETAILMOUVEMENTS.CODPROD = ARTICLES.CODPROD " & _
"WHERE (MOUVEMENTS.DATEMVT)>=#" & DebutExo & "# And (MOUVEMENTS.DATEMVT)<#" & DateVeille & "# and DETAILMOUVEMENTS.CODPROD>='" & ArticleDeDebut & "' and DETAILMOUVEMENTS.CODPROD<='" & ArticleDeFin & "'"
End If
Set RstM_Valeur = New ADODB.Recordset
RstM_Valeur.Open "select * from Valeur order by codprod,datemvt,typemvt", ActiveBase, adOpenDynamic, adLockOptimistic
If RstM_Valeur.EOF Then 'fo continuer le traitement meme s'il y a pas de mouvements pour la période de veille
End If
First = True
If Not RstM_Valeur.EOF Then RstM_Valeur.MoveFirst: Cdd = RstM_Valeur.Fields("codprod" )
While Not RstM_Valeur.EOF
While RstM_Valeur.Fields("codprod" ) = Cdd
If Not First Then
If RstM_Valeur.Fields("typemvt" ) = "E" Then
Ccump = (LastQte * LastCump + (RstM_Valeur.Fields("prixunit" ) * RstM_Valeur.Fields("qte" ))) / (LastQte + RstM_Valeur.Fields("qte" ))
LastQte = LastQte + RstM_Valeur.Fields("qte" )
LastCump = Ccump
Else
LastCump = Ccump
LastQte = LastQte - RstM_Valeur.Fields("qte" )
End If
RstM_Valeur.Fields("cump" ) = Round(LastCump, 2)
RstM_Valeur.Fields("qtedisp" ) = LastQte
RstM_Valeur.Update
End If
If First Then
First = False
UneCommande.ActiveConnection = ActiveBase
UneCommande.CommandType = adCmdStoredProc
UneCommande.CommandText = "PS_EXISTENCE_ARTICLE"
Set mParam = New ADODB.Parameter
Set mParam = UneCommande.CreateParameter("@Article", adChar, adParamInput, 9, Trim(Cdd))
UneCommande.Parameters.Append mParam
Set rst = New ADODB.Recordset
Set rst = UneCommande.Execute
If Not rst.EOF Then
'If Not RstArticles.EOF Then
'Pui = RstArticles!PRIXUNIT
'Qti = RstArticles!qteIni
Pui = rst!PRIXUNIT
Qti = rst!qteIni
Else
Pui = 0
Qti = 0
End If
If (Qti + RstM_Valeur.Fields("qte" )) <> 0 Then
If RstM_Valeur.Fields("typemvt" ) = "S" Then
Ccump = Pui
LastQte = Qti - RstM_Valeur.Fields("qte" )
Else
Ccump = ((Pui * Qti) + (RstM_Valeur.Fields("prixunit" ) * RstM_Valeur.Fields("qte" ))) / (Qti + RstM_Valeur.Fields("qte" ))
LastQte = Qti + RstM_Valeur.Fields("qte" )
End If
Else
Ccump = 0
End If
LastCump = Ccump
RstM_Valeur.Fields("cump" ) = Round(LastCump, 2)
RstM_Valeur.Fields("qtedisp" ) = LastQte
RstM_Valeur.Update
End If
RstM_Valeur.MoveNext: If RstM_Valeur.EOF Then GoTo fin
Wend
First = True
Cdd = RstM_Valeur.Fields("codprod" )
Wend
fin:
CalculVeille = True
If ArticleDeDebut = "" Then Call CumulStk1 Else Call CumulStk1(ArticleDeDebut, ArticleDeFin): Exit Function
Call CumGene1
End Function