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

Macros et VBA Excel Discussion :

Exécution d'une procédure SQL Server à partir d'Excel en VBA [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut Exécution d'une procédure SQL Server à partir d'Excel en VBA
    Salut,

    j'essaye d'exécuter une procédure stockées sous SQL Server à partir d'Excel, mais ça ne veut point fonctionner.

    La-dite procédure (qui ajoute un utilisateur dans une base) :
    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
    PROCEDURE [dbo].[sps_AddUser]  
    	@ID 				uniqueidentifier OUTPUT,
    	@GRP_ID 			uniqueidentifier,
    	@CREATEUR 			varchar(255),
    	@DATE_CREATION 		datetime,
    	@USR_LOGIN 			varchar(255),
    	@USR_PWD 			varchar(255),
    	@USR_MAIL 			varchar(255),
    	@USR_PRENOM 		varchar(50),
    	@USR_NOM 			varchar(50),
    	@ENV_ID 		    uniqueidentifier,
    	@USR_GROUPE_Ids 		varchar(MAX),
    	@USR_GROUPE_PRINCIPAL 	uniqueidentifier,
    	@IS_ADMIN 			bit,
    	@IS_ALLOWED_SENDING_MAIL bit,
    	@IS_ALLOWED_MANAGE_USER bit,
    	@IS_FILTERED bit,
    	@DEFAULT_PAGE_ID uniqueidentifier
    AS
    declare @is_log int
    DECLARE @LANGUE varchar(10)
    begin
    	SET NOCOUNT ON
    	SET @ID = NEWID()
    ...
    END
    Le code VBA que j'ai tenté de créer :
    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
    Dim cnn As New ADODB.Connection
    Dim cmd As New ADODB.Command
    Dim rec As New ADODB.Recordset
     
    cnn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=xxx\xxx;User ID=xxx;Password=xxx;Trusted_Connection=False"
    cmd.ActiveConnection = cnn
    cmd.CommandType = adCmdStoredProc
     
     
    cmd.CommandText = "mabase.dbo.sps_AddUser"
     
    cmd.Parameters.Append cmd.CreateParameter("@ID", adGUID, adParamOutput, 36, Uid)
    cmd.Parameters.Append cmd.CreateParameter("@GRP_ID", adGUID, adParamInput, 36, "55555555-5555-5555-5555-555555555555")
    cmd.Parameters.Append cmd.CreateParameter("@CREATEUR", adVarChar, adParamInput, 255, "support")
    cmd.Parameters.Append cmd.CreateParameter("@DATE_CREATION", adDate, adParamInput, 10, "30/09/2011")
    cmd.Parameters.Append cmd.CreateParameter("@USR_LOGIN", adVarChar, adParamInput, 255, "moi")
    cmd.Parameters.Append cmd.CreateParameter("@USR_PWD", adVarChar, adParamInput, 255, "PKYPn9BxBmaKnK1mKjCMZQ==")
    cmd.Parameters.Append cmd.CreateParameter("@USR_MAIL", adVarChar, adParamInput, 255, "demo@demo.com")
    cmd.Parameters.Append cmd.CreateParameter("@USR_PRENOM", adVarChar, adParamInput, 50, "Robert")
    cmd.Parameters.Append cmd.CreateParameter("@USR_NOM", adVarChar, adParamInput, 50, "Dupont")
    cmd.Parameters.Append cmd.CreateParameter("@ENV_ID", adGUID, adParamInput, 36, "36cf3fd6-9962-4d10-a34a-b2ee4fae6986")
    cmd.Parameters.Append cmd.CreateParameter("@USR_GROUPE_Ids", adVarChar, adParamInput, 36, "55555555-5555-5555-5555-555555555555")
    cmd.Parameters.Append cmd.CreateParameter("@USR_GROUPE_PRINCIPAL", adGUID, adParamInput, 2048, "55555555-5555-5555-5555-555555555555")
    cmd.Parameters.Append cmd.CreateParameter("@IS_ADMIN", adBoolean, adParamInput, 1, False)
    cmd.Parameters.Append cmd.CreateParameter("@IS_ALLOWED_SENDING_MAIL", adBoolean, adParamInput, 1, True)
    cmd.Parameters.Append cmd.CreateParameter("@IS_ALLOWED_MANAGE_USER", adBoolean, adParamInput, 1, False)
    cmd.Parameters.Append cmd.CreateParameter("@IS_FILTERED", adBoolean, adParamInput, 1, False)
    cmd.Parameters.Append cmd.CreateParameter("@DEFAULT_PAGE_ID", adGUID, adParamInput, 36, "22222222-2222-2222-2222-222222222222")
     
    rec.Open cmd, , adOpenDynamic, adLockReadOnly
    Déjà je ne suis pas sûr de la syntaxe (en particulier du Output, que je n'ai pas besoin de récupérer dans Excel soit dit en passant) et des déclarations.

    Et quand j'exécute j'ai le message
    Erreur d'exécution '-2147217887 (80040e24)':
    Valeur de caractère non valide pour la spécification.
    Quelqu'un saurait ce qui coince dans mon code ?
    Au niveau de la date, des UID ou des précisions peut-être ?

    PS : quand je scanne avec SQL Server Profiler, je ne vois passer que ça :
    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
    Microsoft Office 2003 :
    -- network protocol: TCP/IP
    set quoted_identifier on
    set arithabort off
    set numeric_roundabort off
    set ansi_warnings on
    set ansi_padding on
    set ansi_nulls on
    set concat_null_yields_null on
    set cursor_close_on_commit off
    set implicit_transactions off
    set language Français
    set dateformat dmy
    set datefirst 1
    set transaction isolation level read committed

  2. #2
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Bon, j'ai recréé des tables temporaires pour tester ligne par ligne avec 10 essais à chaque fois et j'ai fini par trouver la syntaxe exacte (enfin pas exactement pour la date mais ça me convient comme ça) :
    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
    cmd.Parameters.Append cmd.CreateParameter("@ID", adGUID, adParamOutput, , Uid)
    cmd.Parameters.Append cmd.CreateParameter("@GRP_ID", adGUID, adParamInput, , "{55555555-5555-5555-5555-555555555555}")
    cmd.Parameters.Append cmd.CreateParameter("@CREATEUR", adVarChar, adParamInput, 255, "support")
    cmd.Parameters.Append cmd.CreateParameter("@DATE_CREATION", adDBDate, adParamInput, 8, Date)
    cmd.Parameters.Append cmd.CreateParameter("@USR_LOGIN", adVarChar, adParamInput, 255, "moi")
    cmd.Parameters.Append cmd.CreateParameter("@USR_PWD", adVarChar, adParamInput, 255, "PKYPn9BxBmaKnK1mKjCMZQ==")
    cmd.Parameters.Append cmd.CreateParameter("@USR_MAIL", adVarChar, adParamInput, 255, "demo@demo.com")
    cmd.Parameters.Append cmd.CreateParameter("@USR_PRENOM", adVarChar, adParamInput, 50, "Robert")
    cmd.Parameters.Append cmd.CreateParameter("@USR_NOM", adVarChar, adParamInput, 50, "Dupont")
    cmd.Parameters.Append cmd.CreateParameter("@ENV_ID", adGUID, adParamInput, , "{36cf3fd6-9962-4d10-a34a-b2ee4fae6986}")
    cmd.Parameters.Append cmd.CreateParameter("@USR_GROUPE_Ids", adVarChar, adParamInput, 2048, "55555555-5555-5555-5555-555555555555")
    cmd.Parameters.Append cmd.CreateParameter("@USR_GROUPE_PRINCIPAL", adGUID, adParamInput, , "{55555555-5555-5555-5555-555555555555}")
    cmd.Parameters.Append cmd.CreateParameter("@IS_ADMIN", adBoolean, adParamInput, , False)
    cmd.Parameters.Append cmd.CreateParameter("@IS_ALLOWED_SENDING_MAIL", adBoolean, adParamInput, , True)
    cmd.Parameters.Append cmd.CreateParameter("@IS_ALLOWED_MANAGE_USER", adBoolean, adParamInput, , False)
    cmd.Parameters.Append cmd.CreateParameter("@IS_FILTERED", adBoolean, adParamInput, , False)
    cmd.Parameters.Append cmd.CreateParameter("@DEFAULT_PAGE_ID", adGUID, adParamInput, , "{22222222-2222-2222-2222-222222222222}")

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

Discussions similaires

  1. Problèmes avec une procédure SQL server 2000
    Par verryvalentino dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/05/2012, 22h23
  2. [XL-2010] Outil pour éditer une base SQL SERVER à partir d'excel
    Par lmontout dans le forum Excel
    Réponses: 1
    Dernier message: 26/07/2011, 19h53
  3. Comment remplir une BD sql server à partir d'un formulaire?
    Par Je-cherche-pfe dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/09/2007, 17h09
  4. Récupérer les lignes d'une procédure SQL Server dans le programme VB.NET
    Par Mikelester12 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 30/07/2007, 12h33
  5. Réponses: 2
    Dernier message: 15/07/2006, 13h29

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