utilisation d'une procedure stockée TSQL depuis access

utilisation d'une procedure stockée TSQL depuis access - VB/VBA/VBS - Programmation

Marsh Posté le 31-03-2008 à 17:11:06    

Bonjour à tous!
 
d'abord merci d'avance de votre aide!
 
voilà mon problème:
je realise une copie des horaires depuis access et pour cela j'utilise de procedures stockées qui se trouvent sur mon serveur SQL donc, elles sont codées en TSQL.
 
pour l'appel de ses procedures j'utilise une fonction en VBA(module Access) qui va affecter une requête sur access pour executer la procedure stockee.
 
voila le problème est quand je clique sur le bouton de copie, la requête contient les bons valeurs mais cela ne s'execute pas... et ça fonctionne quand je clique la 2eme fois sur le bouton :S
 
un peu de code:
 
requête sur access "HorairesCopie_CopieUneSemaine_Optimized_180208" (contient l'appel de la procedure qui se trouve sur mon srv):
 
EXEC HorairesCopie_CopieUneSemaine_Optimized_180208 @NumFormation=4003 , @dateDebutSource='28.01.2008', @dateDebutCible='04.02.2008'
 
fonction access de copie(appel fonction qui va affecter la requête):
 
Call cnip_parametreRequeteSqlDirecte("HorairesCopie_CopieUneSemaine_Optimized_180208", "EXEC HorairesCopie_CopieUneSemaine_Optimized_180208 @NumFormation=" & NumFormation & " , @dateDebutSource='" & dateDebutSemaineSourceFormate & "', @dateDebutCible='" & dateDebutSemaineCibleFormate & "'" )
 
 
fonction
Public Function cnip_parametreRequeteSqlDirecte(ByVal reqSqlDirect As String, ByVal strSql As String)
 
'Appel                : depuis toute fonction ou évenement en ayant besoin (quasi toujours depuis les fonctions de création de critères de filtre)
'Description          : Permet de modifier une requête SQL Directe.
 
 
Dim cat As New ADOX.Catalog
Dim cmd As ADODB.Command
 
cat.ActiveConnection = CurrentProject.Connection
 
Set cmd = cat.Procedures(reqSqlDirect).Command
cmd.CommandText = strSql
 
Set cat.Procedures(reqSqlDirect).Command = cmd
 
 
End Function
 
la fonction sur mon srv s'appelle aussi HorairesCopie_CopieUneSemaine_Optimized_180208 et elle fonctionne correctement
 
je ne comprend pas pourquoi cela fonctionne quand on clique 2 fois de suite sur le bouton de copie qui se trouve sur un formulaire et pas dès la 1ere fois
 
je vous remercie!!!
 
et j'att vos nouvelles avec impatience!
 
merci!
 
Cristina


Message édité par roblescriso le 04-04-2008 à 20:45:17
Reply

Marsh Posté le 31-03-2008 à 17:11:06   

Reply

Marsh Posté le 03-04-2008 à 20:09:45    

J'ai pas tout pigé ton problème à vrai dire...
 
Ta fonction "Function cnip_parametreRequeteSqlDirecte" affecte une commande à ton objet "cat.Procedures(reqSqlDirect)" sans l'exécuter.
 
C'est pas ça le souci ?
 
J'ai l'impression qu'il te manque juste une instruction "cat.Procedures(reqSqlDirect).Execute" à la fin de ta fonction.

Reply

Marsh Posté le 04-04-2008 à 17:33:01    

je crois que c'est bien cela qu'il manque mais je l'ajoute simplement à la fin comme ceux-ci:
 
Public Function cnip_parametreRequeteSqlDirecte(ByVal reqSqlDirect As String, ByVal strSql As String)
 
 
Dim cat As New ADOX.Catalog
Dim cmd As ADODB.Command
 
cat.ActiveConnection = CurrentProject.Connection
 
Set cmd = cat.Procedures(reqSqlDirect).Command
cmd.CommandText = strSql
 
Set cat.Procedures(reqSqlDirect).Command = cmd
cat.Procedures(reqSqlDirect).Execute
 
End Function
 
car il me donne un erreur comme quoi "Membre de méthode ou de données introuvable"
 
est-ce que je dois faire qqch comme "set cat.Procedures(reqSqlDirect).Execute= cmd" ???
 
je suis dsl mais je ne comprend pas très bien ses objets ADO :S

Reply

Marsh Posté le 04-04-2008 à 18:07:57    

et est-ce que tu sais comment je peux recuperer la valeur de retour d'une procedure stockée, car ma procedure stockée sur mon srv sql reçoit une variable optionel passé par référence donc "OUTPUT" et j'aimerais la recuperer depuis access:
 
Call cnip_parametreRequeteSqlDirecte("HorairesCopie_CopieUneSemaine_Optimized_180208", "EXEC HorairesCopie_CopieUneSemaine_Optimized_180208 @NumFormation=" & NumFormation & ", @dateDebutSource='" & dateDebutSemaineSourceFormate & "', @dateDebutCible='" & dateDebutSemaineCibleFormate & "', @compteurNbPeriodesVides= " & compteurNbPeriodesVides)
 
voilà, j'aimerais que compteurNbPeriodesVides soit affecté par la procédure stockée mais cela n'est pas affecté :S

Reply

Marsh Posté le 04-04-2008 à 20:32:14    

En fait, je connais pas du tout le modèle objet de données d'Access, notamment cet ADOX.Catalog
 
A mon avis, il faut faire un cat.Execute en lui passant en paramètre de quoi retrouver la procédure à exécuter du coup, mais j'ai aucune idée de comme il faut faire. :spamafote:

Reply

Marsh Posté le 04-04-2008 à 20:32:47    

PS : T'auras plus de chances si ton sujet est déplacé dans la catégorie VB/VBA, là c'est pas du SGBD à proprement parler...

Reply

Marsh Posté le 04-04-2008 à 20:43:40    

ok merci! je vais le déplacer :S
euh.. si je trouve comme on fait :D

Reply

Marsh Posté le 04-04-2008 à 22:53:26    

Je crois que tu dois demander à un admin :D

Reply

Sujets relatifs:

Leave a Replay

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