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

Access Discussion :

Appel d'une store proc avec paramètres


Sujet :

Access

  1. #1
    Membre averti Avatar de mcdotta
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 292
    Points : 324
    Points
    324
    Par défaut Appel d'une store proc avec paramètres
    Bonjour,


    Après avoir fait un tour dans la FAQ et avoir appliqué et adapté le code fourni, j'ai un problème lors de l'exécution de ma store proc. Quelqu'un a-t-il déjà rencontré ce problème ?

    Objectif de la stored proc : faire un Truncate d'une table dont le nom est passé en paramètre.

    Environnement : un fichier mdb qui utiliser une base SQL ; j'ai besoin de faire un truncate d'une table à la place d'un delete * car la table contenant plus de 2 millions de lignes, j'ai un time out qui survient.

    Code Stored Proc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ALTER PROCEDURE [dbo].[TruncateTable]
    	-- Add the parameters for the stored procedure here
    	@strTableName varchar(255)
    AS
     
    SET NOCOUNT ON
     
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	TRUNCATE TABLE [dbo].[@strTableName]
    END
    Appel de ma procédure dans Access 2003 :
    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
     
    Sub TruncateTable()
        Dim Cmd As ADODB.Command
        Dim conConnection As ADODB.Connection
        Dim strConnection As String
        Dim Prm1 As ADODB.Parameter
     
        Set conConnection = New ADODB.Connection
        strConnection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=Toto;Data Source=VM-SQL"
        conConnection.Open strConnection
     
        Set Cmd = New ADODB.Command
        Cmd.ActiveConnection = strConnection
        Cmd.CommandType = adCmdStoredProc
        Cmd.CommandText = "TruncateTable"
     
        Set Prm1 = Cmd.CreateParameter("@strTableName", adVarChar, adParamInput, 100, "tblToto")
        Cmd.Parameters.Append Prm1
        Prm1.Value = "tblToto"
     
     
        Cmd.Execute
     
        Set Cmd = Nothing
     
    End Sub
    Erreur retournée au niveau de la ligne Cmd.Execute :

    Run-time error '-2147217865(80040e37)': Cannot find the object "@strTableName" because it does not exist or you do not have permissions....

    D'avance merci....

  2. #2
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    841
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 841
    Points : 919
    Points
    919
    Par défaut
    Salut,

    Tu es sûr que "@strTableName" doit être entre guillemets ?

    Si c'est un paramètre, moi je les virerais bien....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set Prm1 = Cmd.CreateParameter(@strTableName, adVarChar, adParamInput, 100, "tblToto")
    Ils ne savaient pas que c'était impossible, alors il le réalisèrent (Mark Twain)

  3. #3
    Membre averti Avatar de mcdotta
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 292
    Points : 324
    Points
    324
    Par défaut
    Merci pour votre réponse.


    Oui, il doit être entre guillemets, en tout cas dans tous les exemples que j'ai consulté il y est et si je les enlève, j'ai une erreur....

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    As-tu essayé de créer le paramètre sans utiliser le caractère @ ?
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Prm1 = Cmd.CreateParameter("strTableName", adVarChar, adParamInput, 100, "tblToto")
    _

  5. #5
    Membre averti Avatar de mcdotta
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 292
    Points : 324
    Points
    324
    Par défaut
    Bonjour,


    Oui, oui, ca a fait partie des tests avant de poster.....

    Mais je viens de comprendre :

    they (les paramètres) cannot be used instead of table names, column names, or the names of other database objects. For more information, see EXECUTE (Transact-SQL).

    C'est ce que je tentais de faire, passer le nom d'une table en paramètre.

    Je vais donc faire x storedproc pour mes x tables.

    Merci à tous

    Marie-Catherine

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour mcdotta !

    Vu ton environnement (un fichier MDB qui utilise une base SQL), je pourrais aussi te conseiller l'utilisation d'une requête SQL Direct.
    Ce type de requête, qu'on qualifie aussi de "SQL passthrough", fait partie du modèle DAO.

    Il s'agit d'une requête SQL écrite dans le "dialecte" du serveur SQL cible.
    Elle est directement envoyé pour exécution sur le serveur, sans interprétation ni exécution du côté client: c'est donc très efficace.

    Et nul besoin de créer autant de procédures stockées qu'il existe de tables à nettoyer...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim oDB As DAO.Database, strSQL As String, strTableName As String
     
    ' On peut travailler à partir de la BD Jet courante.
    Set oDB = CurrentDb
     
    ' Adapter la chaîne de connexion
    oDB.Connect = "ODBC;DSN=????;UID=????;PWD=????;DATABASE=????"
     
    strTableName="tblToto"
    strSQL = "TRUNCATE TABLE [dbo].[" & strTableName & "]"
     
    ' Appel de la méthode Execute en mode SQL direct (pass-through)
    oDB.Execute strSQL, dbSQLPassThrough
    Si tu préfères ADO, tu as aussi la possibilité d'envoyer au serveur une requête à exécuter.
    J'imagine que l'objet ADODB.Command est approprié.
    Un lien vers le tutoriel ADO maison ?
    >> 4. Réaliser des requêtes avec l'objet Command
    _

  7. #7
    Membre averti Avatar de mcdotta
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 292
    Points : 324
    Points
    324
    Par défaut
    JBO, tu es un magicien..... Je te décerne le prix de la meilleure aide du jour... Si si... Médaille à l'appui.


    Merci beaucoup beaucoup

    Marie-Cath



  8. #8
    Membre averti Avatar de mcdotta
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 292
    Points : 324
    Points
    324
    Par défaut
    A tous,


    La solution données par =JBO= fonctionne à merveille.


    Si on veut rester dans ma direction initiale (cf mon premier post), voici le contenu de la stored proc à créer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE PROCEDURE [dbo].[TruncateTable]
    	-- Add the parameters for the stored procedure here
    	@strTableName varchar(255)
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	exec ('TRUNCATE TABLE ' + @strTableName)
    END
    Le code VBA reste le même que celui de mon premier post.

    Voilà, bon boulot à tous

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    mcdotta, merci d'avoir traité le sujet jusqu'au bout !

    A une prochaine fois.
    _

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Appel d'une procédure stockée avec paramètre en output
    Par Malainet dans le forum Linq
    Réponses: 5
    Dernier message: 11/02/2013, 17h26
  2. [Débutant] Appel d'une procédure stockée avec paramètres
    Par Bakkach dans le forum VB.NET
    Réponses: 6
    Dernier message: 09/10/2012, 17h41
  3. Réponses: 5
    Dernier message: 09/07/2012, 10h06
  4. Réponses: 5
    Dernier message: 11/07/2006, 16h54
  5. [ASE][T-SQL] Appel d'une sous-proc avec des conditions
    Par metheorn dans le forum Sybase
    Réponses: 1
    Dernier message: 19/05/2006, 19h38

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