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

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

Reply

Marsh Posté le 17-10-2007 à 18:53:25   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed