IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Appel a une procedure stockée en vba [À faire]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 53
    Points : 26
    Points
    26
    Par défaut [RESOLU] Appel a une procedure stockée en vba
    Bonjour,

    Dans un projet Access, comment faire appel, dans le code VBA, a cette procedure stockée?

    Code:


    Alter Procedure Proc_projet
    As
    Select * from projets




    Sachant que je veux en fait recuperer que certain champs renvoyé par la procedure et que je veus la parametrer en fonction d'un parametre choisie dans une premiere listbox...?

  2. #2
    Membre confirmé
    Avatar de Etienne Bar
    Homme Profil pro
    Consultant indépendant
    Inscrit en
    Octobre 2002
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Consultant indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2002
    Messages : 282
    Points : 593
    Points
    593
    Par défaut
    Peux tu, STP, préciser ta demande ? les procédures stockées n'existent pas sous Access !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    oups sorry...en fait mon projet access est connecté à sql server (ou plutot msde...je ne suis qu'en phase de test pour l'instant...)

  4. #4
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    pas de bump s'il te plait
    Utilises l'objet Command ADO

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Apres moultes recherches je suis parvenu a ecrire cette portion de code :
    (le nom de la procedure stockée SQL server est "Prcom" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    sub ()
    Dim conn As New ADODB.Connection
    Dim cmdExeproc As New ADODB.Command
    Dim RS As New ADODB.Recordset
     
    Set conn = New ADODB.Connection
    Set cmdExeproc = New ADODB.Command
     
    conn.Open CurrentProject.Connection
     
    Set cmdExeproc.ActiveConnection = conn
    cmdExeproc.CommandType = adCmdStoredProc
    cmdExeproc.CommandText = "Prcom"
     
     
    Set RS = cmdExeproc.Execute
     
    Me.MaListBox.Value = RS
     
     
     
    RS.Close
    Set RS = Nothing
     
    conn.Close
    Set conn = Nothing
    end sub
    Malheuresement ca ne marche pas....jai beau cherché, je ne trouve pas d'ou vient l'erreur....


  6. #6
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    visiblement il manque le parametre

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Oui et c'est volontaire...je veux deja arriver a afficher toute la requete (je ne la restreins pas encore avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where saison =" & Form_Formulaire1.ListSaison.Value
    Vu la simplicité de l'instruction sql, faut il plutot placer la procedure stockée dans une vue?

    Et surtout comment recuperer dans un liste box, CERTAINS champs issus d'un recordset...??

  8. #8
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    il y a une faute dans le code
    c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim conn As ADODB.Connection 
     
    Set conn = CurrentProject.Connection

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    merci pour ta reponse mais rien n'y fait....

  10. #10
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 64
    Points : 57
    Points
    57
    Par défaut
    Pour appeler une procedure stockee depuis un project Access, voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Cmd As ADODB.Command
     
        Set Cmd = New ADODB.Command
        Cmd.ActiveConnection = CurrentProject.Connection
        Cmd.CommandType = adCmdStoredProc
        Cmd.CommandText = "Nom de ta Procedure"
        Cmd.Execute
     
        Set Cmd = Nothing
    Avec des parametres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Dim Cmd As ADODB.Command
    Dim Prm1 As ADODB.Parameter, Prm2 As ADODB.Parameter
     
        Set Cmd = New ADODB.Command
        Cmd.ActiveConnection = CurrentProject.Connection
        Cmd.CommandType = adCmdStoredProc
        Cmd.CommandText = "Nom de ta Procedure"
     
        Set Prm1 = Cmd.CreateParameter("@NomDuParametre1danstaSP", adInteger, adParamInput)
        Set Prm2 = Cmd.CreateParameter("@NomDuParametre2danstaSP", adInteger, adParamInput)
     
        Cmd.Parameters.Append Prm1
        Prm1.Value = LaValeurQueTuVeux
        Cmd.Parameters.Append Prm2
        Prm2.Value = LaValeurQueTuVeux
     
        Cmd.Execute
     
        Set Cmd = Nothing
        Set Prm1 = Nothing
        Set Prm2 = Nothing

  11. #11
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 64
    Points : 57
    Points
    57
    Par défaut
    OK, j'avais pas tout lu, je suis pas sur que ce que y'a ci dessus reponde a ta question...
    Enfin vu ta requete, je ne vois pas pourquoi tu fais une procedure stockee.

    Tu peux tres bien faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim CodeSQL as String
     
    CodeSQl= "Select * from projets WHERE saison =" & Form_Formulaire1.ListSaison.Value 
     
    Me.MaListBox.Rowsource = CodeSQL
    Pour repondre a ta question, avec VBA, il n'est aps possible d'affecter le resultat d'un recordset a une ListBox.
    Tu peux a la rigueur definir la propriete RowSourceType de ta listbox a "Value List", et ensuite ecrire une petite function qui te cree une chaine de caractere de ton recordset avec toute les valeur a la suite. Et enfin tu affecte cette chaine de caractere a la propriete rowsource de ta listbox.

    Enfin, derniere chose que j'ai trouve pour affecter le resultat d'une procedure parametre a une listbox, tu ecris cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim CodeFonctiun as String
     
    CodeFonctiun = "ALTER PROCEDURE  Procedure1 AS 
    CodeFonctiun=CodeFonctiun & " EXEC TaProcedureParametre '" & ValeurParametre1 & "'"
    CodeFonctiun=CodeFonctiun & ", '" & ValeurParametre2 & "'"
     
    CurrentProject.Connection.Execute CodeFonctiun
     
    Me.MaListBox.Rowsource = "Procedure1"
    Voila, mais ce qui m'emebte dans cette derniere possibilite, c'est que on est plus en C/S, etant donne que a chaque tu modifie la Procedure1, qui est partage par tout le monde.

    Bref si tu trouve une meilleur solution, hesites pas a m'envoyer un mail pour me le dire.

  12. #12
    Membre confirmé
    Avatar de Etienne Bar
    Homme Profil pro
    Consultant indépendant
    Inscrit en
    Octobre 2002
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Consultant indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2002
    Messages : 282
    Points : 593
    Points
    593
    Par défaut
    Bref si tu trouve une meilleur solution, hesites pas a m'envoyer un mail pour me le dire.
    NON !

    Tu fais un post sur ce forum pour que tout le monde en profite...

    On est sur un forum d'entraide et quand on a un débat sur un sujet interessant, autant le faire jusqu'au bout, ça servira à d'autres.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Merci pour ton aide Mouse,
    j'ai utiliser ton exemple de code pour appeler ma procedure stockée avec un parametre en ADO...resultat, ca marche!!!

    Par contre j'en viens à me poser d'autres questions :

    Comment choisir entre cette methode (appel en ADO à la proc. stockée + parametre), et la methode "classique" VBA (declaration d'une variable de type chaine que l'on alimente avec une requete parametree...le tout ecrit dans le code)

    Pour ma part, il me semble que il vaut mieux conserver toute les requetes parametrées dans des proc. stockées, plutot que des les inclure dans le code VBA....

    :

  14. #14
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 64
    Points : 57
    Points
    57
    Par défaut
    Pour repondre a notre bon petit vieux, je voulais juste dire que je voudrais savoir aussi. Et bien sur qu'il faut mettre un post, mais je suis pas tous les jours sur ce forum, et je pourrai le louper, voila voila...

    Bref...

    enfin Howard, concernant ta question, mon experience en SQL Server + projet Access est relativement jeune, mais suite a ce qu'a dit SQLPro plusieurs fois, je pense que a chaque fois que tu utilises une clause SELECT, tu peux le faire en chaine de caractere, les procedures stockees etant utilisee pour la mis a jours de une ou plusieur table..

    Mais bon j'en suis pas sur....

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Bien recu mouse,

    en ce qui concerne mon projet, je pense que je vais stocker toutes les requetes dans des proc. stockées ou des vues sur SQL server...je pense que ca simplifiera la gestion de ces requetes (sans avoir a se replonger dans le code VBA pour des modifs...)

    en tout cas merci encore pour ton aide

    ciao

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Je ne sais pas si je suis censé ouvrir un nouveau message dans ce cas?...mais mon probleme ressemble beaucoup a celui que j'avais deja ouvert...

    Pour resumer j'ai cette procedure stockée sur MSDE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Alter Procedure PS_Rec_Cli
    	@Criteria varchar(50)
    As
    	SELECT [T-CLIENT].NOMC, [T-CLIENT].ADRESSEC1 FROM [T-CLIENT] WHERE [T-CLIENT].NOMC = @Criteria
    return
    Dans mon projet Access.adp, voila le code VBA-ADO que j'ai ecris et qui fait appel à la proc. stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Private Sub Bt_Recherche_Click()
     
    Dim Conn As ADODB.Connection
    Dim Cmd As ADODB.Command
    Dim Prm_Criteria As ADODB.Parameter
     
        Set Conn = New ADODB.Connection
        Conn.Open CurrentProject.Connection
     
        Set Cmd = New ADODB.Command
        Cmd.ActiveConnection = CurrentProject.Connection
        Cmd.CommandType = adCmdStoredProc
        Cmd.CommandText = "PS_Rec_Cli"
     
        Set Prm_Criteria = Cmd.CreateParameter("@Criteria", adVarChar, adParamInput)
     
        Cmd.Parameters.Append Prm_Criteria
        Prm_Criteria.Value = Txt_Criteria.Text
        Cmd.Execute
     
        Lst_Resultat.RowSource = "PS_Rec_Cli"
     
        Set Cmd = Nothing
        Set Prm_Criteria = Nothing
     
        Conn.Close
        Set Conn = Nothing
     
    End Sub
    Lorsque je test, j'ai le message d'erreur suivant :

    "erreur d'execution 3708 : Objet Parameter défini de manière incorrect. Des informations incoherentes ou imcomplètes ont été fournies."

    Lorsque je clique sur Deboguage, le debogueur me place sur la ligne : Cmd.Parameters.Append Prm_Criteria

    J'ai l'impression que c'est un probleme de type de variable. J'ai verifié que le champ NOMC de la table [T-CLIENT] est bien declaré en varchar...
    Toutes suggestion sera bienvenue!


    Re bon week end!

  17. #17
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    il manque la valeur size de ton paramètre.
    Avec l'utilisation du type advarchar, tu es obligé de définir une taille

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Cher bidou, comment dire...euh ...les mots me manquent....
    MERCI !!!!!!!!!!!!!!!!!!

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    ...je suis confus...mais j'ai encore une petite question...


    Lorsque je lance la procedure, au lieu d'aller recuperer la valeur de la variable dan Txt_Criteria, Access me demande de saisir la valeur a la main dans un msgbox. Il m'affiche ensuite ce que je veux dans Lst_Resultat mais il me semble que dans le code je lui precise bien d'aller la chercher dans le txtbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Cmd.Parameters.Append Prm_Criteria
        Prm_Criteria.Value = Me.Txt_Criteria
    Je n'y comprend plus rien...pourquoi me demande-t-il de saisir la valeur du parametre dans une msgbox?
    A quoi sert exactement le principe de la methode Append??

    Merci encore d'avance
    et
    RE re re Bon week end!

  20. #20
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 64
    Points : 57
    Points
    57

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [WD9] Appel d'une procedure stockée Oracle
    Par flora_vig dans le forum WinDev
    Réponses: 21
    Dernier message: 16/10/2008, 17h43
  2. je veux appeler une procedure stockée PLSQL
    Par mahmoud_mahmoud dans le forum JDBC
    Réponses: 3
    Dernier message: 10/03/2008, 16h26
  3. Réponses: 2
    Dernier message: 22/06/2006, 11h26
  4. Réponses: 7
    Dernier message: 16/12/2005, 10h15
  5. Réponses: 3
    Dernier message: 21/09/2004, 07h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo