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 :

Probleme de syntaxe SQL-VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    pharmacien
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Pérou

    Informations professionnelles :
    Activité : pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 21
    Points
    21
    Par défaut Probleme de syntaxe SQL-VBA
    Bonjour à tous,

    J´effectue des requêtes a mon serveur depuis VBA-Excel, mon problème et que j´ai une table qui contient le signe @... et lors de ma connexion il ne reconnait pas ma table, le problème est certainement que ce signe est une variable a la fois en sql et en vba.

    En sql pour palier a ceci on met le nom de la table entre crochet: [@OBOE ], pour le définir en texte

    En vba ma requête sql est entre " ", ce qui ne devrait pas me poser de problème car définit comme un texte...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sql = "select * from [@OBOE ]"
    Mais cela ne marche pas, peut être que le vba me retire les crochets et ce qui fait que l'@ n´est plus comme texte en Sql...

    Enfin j´ai fait des tests dans tous les sens et rien de concluant, et je n´ai rien trouvé sur le net. Donc si klk un a une piste voir la solution je lui en serait très reconnaissant!!

    Je tiens a préciser que j´ai fait le test avec une table qui s´appelle OBOE et cela fonctionne (Sql = "select * from [OBOE ]") et que en début de module j´ai dim Sql as

    Merci d'avance!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Tu utilise Adodb ou Dao pour ta connexion?

  3. #3
    Membre à l'essai
    Homme Profil pro
    pharmacien
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Pérou

    Informations professionnelles :
    Activité : pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Bonjour Dysorthographie,

    Comment te dire... Je continue a utiliser ton module de classe ADODBRD, car fonctionne trés bien pour tester de simples requetes SQL. De plus pour moi c´est plus simple car ce n´est pas toujours le meme Database, user et pasword...
    Donc pour répondre a ta question Adodb.

    Ne trouvant pas solution a mon pb, je me suis mis a planché sur la fonction OpenRecordSetParametre; car le script SQL est assez lourd, je pense qu' il va evoluer donc l'idée c´est laisser de coté ma requete et de la transformer en procédure, notion que j´ai découvert aujourd´hui. Et de plus j´ai qu´un parametre ce qui sera plus simple par la suite en VBA.


    Donc je fais des tests avec une procedure simple avec un seul parametre, et la fonction OpenRecordSetParametre que j´essaye de développer dans ton module de classe est la suivante:

    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
    Public Function OpenRecordSetParametre(Procedure As String, Param1 As String)
    Dim Cmd, Prm1
     
    Set Cmd = CreateObject("ADODB.Command")
    Cmd.ActiveConnection = Connexion
    Cmd.CommandType = adCmdStoredProc
    Cmd.CommandText = Procedure
     
    Set Prm1 = Cmd.CreateParameter("@MP", adChar, adParamInput)
    Cmd.Parameters.Append Prm1
    Prm1.Value = Param1
     
    Cmd.Execute
     
    Set Cmd = Nothing
    Set Prm1 = Nothing
     
    End Function
    Je crois que le code bloque a ce niveau: Cmd.CommandType = adCmdStoredProc, je pensais definir ce parametre car c´est une procedure enregistré..., du coup je l´ai enlevé...
    Enfin je bidouille pour trouver donc si tu as des pistes de recherches et des indices pour développer la fonction OpenRecordSetParametre, je suis prennneur meme si ce ne´est pas le sujet de ma question de départ. Et si tu sais pour mon @ idem!

    Merci Dysorthographie!

  4. #4
    Invité
    Invité(e)
    Par défaut
    bonjour,
    dans un premier temps nous allons regarde le regarder pour le nom de la table!

    on va ajouter une fonction au module de classe!
    Code ADODBRD : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Function OpenSchema()
    If Connexion.State = 0 Then
        OpenConnetion
    End If
    Set OpenSchema = Connexion.OpenSchema(20)
    End Function
    cette fonction permet de récupérer entre autre le nom des table de ta base de données.
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
    Dim cn As New ADODBRD
    ActiveCell.CopyFromRecordset cn.OpenSchema
    End Sub

    vue qu'ADODB reformate le nom des objet si un caractère ne lui convient pas, tu auras dans ton tableau excel le nom de toutes tes table et tu pourras lire son interprétation!


    pour l'objet command je regarde et reviens vers toi!

  5. #5
    Membre à l'essai
    Homme Profil pro
    pharmacien
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Pérou

    Informations professionnelles :
    Activité : pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Bonjour Dysorthographie,

    Merci pour ta réponse! Le serveur est en maintenance jusqu'à lundi je ne peux pas faire de tests ! Je suis impatient d essayer ta fonction pour connaître le nom! !

    Je te tiens au courant Lundi.

    Merci et bon weekend

  6. #6
    Membre à l'essai
    Homme Profil pro
    pharmacien
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Pérou

    Informations professionnelles :
    Activité : pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Bonjour Dysortographie,

    Lors du test j´ai un bug sur la ligne de la sub test, le message d´erreur est que je nécéssite un objet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.CopyFromRecordset cn.OpenSchema
    J´ai tenté ce bout de code avant mais rien n´y fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets(2).range("A1").select
    Je ne comprends pas trop ta sub test, il ne faudrait pas ouvrir la connection au serveur dans ma database et ensuite ramener les les noms des colones comme tu me l´as dit ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    bonjour,
    dans la sub test je n'es pas mis le information de connections qui ne change pas en fonction de ton code !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    Dim Con As New ADODBRD
     
     
    Con.MonServer = "BLADELAB01"
    Con.Database = "SBO_NATURGEN_PROD"
    Con.MonUser = "etiquetas"
    Con.MonPassword = "francia1"
    Con.BASETYPE = SQLSERVER2005
    Con.OpenConnetion
     
     
    ActiveCell.CopyFromRecordset Con.OpenSchema
    End Sub

  8. #8
    Membre à l'essai
    Homme Profil pro
    pharmacien
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Pérou

    Informations professionnelles :
    Activité : pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Génial! Et dsl d´etre un peu long a comprendre...

    Le nom est avec un symbole en plus
    le nom de la table en sql est @OBOE
    et quand j´applique ta sub test il me met: @_OBOE,

    Je ne comprends pas exactement pourquoi mais maintenant cela fonctionne, un grand merci Dysothographie

    J´ai des questions relatives a ton module de classe et la fonction OpenRecordSetParametre, pour appeler une procédure 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
     
    Public Function OpenRecordSetParametre(Procedure As String, Param1 As String)
     
    If Connexion.State = 0 Then
        OpenConnetion
    End If
     
    Set Cmd = New ADODB.Command
    Cmd.ActiveConnection = Connexion
    Cmd.CommandType = adCmdStoredProc
    Cmd.CommandText = Procedure
     
    Set Prm1 = Cmd.CreateParameter("@MP", advarChar, 1, 10) 'parameter = command.CreateParameter (Name, Type, Direction, Size, Value)
    Cmd.Parameters.Append Prm1
    Prm1.Value = Param1
     
    Cmd.Execute
     
    Set Cmd = Nothing
    Set Prm1 = Nothing
     
    End Function
    1- Pourquoi je ne peux pas définir ma command de la maniere suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Cmd As New ADODB.Command
    2- Est ce que l´écriture suivante permet de definir ma variable cmd:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cmd = New ADODB.Command
    3-j´ai le bug sur la ligne suivante, je cherche línspiration sur le forum tout en essayant de comprendre mais il me manque des données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cmd.Parameters.Append Prm1
    Dans tous les cas merci pour la premiere partie d´aide, concernant la procédure stockée, vu que c´est une fonction de ton module de classe que je cherche a développer, je peux poser une nouvelle question sur le forum mais tu restes celui le plus apte a m´aider.

    Merci Dysorthographie

  9. #9
    Invité
    Invité(e)
    Par défaut
    Le @ informe ta requête qu'il s'agit d'un paramètres c'est une convention!

    Pour palier ado fixe sa propre convention car il a bien compris qu'on parlait d'une table.

    Je le savais mais ignorais comment ado le gérait!

    En ce qui concerne adodb.commend j'y est recoure par creatobject pour ne pas activer la référence adodb dans le projet!


    Je regarde pour te modéliser une fonction !

  10. #10
    Membre à l'essai
    Homme Profil pro
    pharmacien
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Pérou

    Informations professionnelles :
    Activité : pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 21
    Points
    21
    Par défaut Bien joué!
    Je suis bien d´accord avec toi: Tu le savais!!

  11. #11
    Membre à l'essai
    Homme Profil pro
    pharmacien
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Pérou

    Informations professionnelles :
    Activité : pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Bonsoir Dysorthographie et le forum,

    J' ai un message d' erreur que je ne comprends pas
    Doc1.pdf

    La fonction dans ton module de classe est la suivante (je me suis fortement inspiré de ton style, en moins bien mais je n´y vois pas d´erreur d´écriture):
    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
    31
    32
    Public Function OpenRecordSetParametre(Procedure As String, Param1 As String)
     
    'On Error Resume Next
    If Connexion.State = 0 Then
        OpenConnetion
    End If
     
    Set Cmd = CreateObject("ADODB.Command")
    Cmd.ActiveConnection = Connexion
    Cmd.CommandType = 4
    Cmd.CommandText = Procedure
     
    Set Prm1 = CreateObject("ADODB.Parameter")
    Prm1.Value = Param1
    Prm1.Name = "@MP"
    Prm1.Type = 200
    Prm1.Direction = 4
    Prm1.Size = 15
     
    'Set OpenRecordSetParametre = CreateObject("ADODB.Recordset")
    Set OpenRecordSetParametre = Cmd.Execute
     
    Set Cmd = Nothing
    Set Prm1 = Nothing
     
    If Err Then
    'MsgBox Err.Description
            Set OpenRecordSetParametre = Nothing
    End If
    Err.Clear
    On Error GoTo 0
    End Function
    Ensuite j´appele la fonction de la facon suivante:

    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
    Private Sub CommandButton1_Click()
    Dim Con As New ADODBRD
    Con.BASETYPE = SQLSERVER2005
    Con.MonServer = "BLADELAB01"
    Con.Database = "SBO_PORTUGAL_PRODUCCION"
    Con.MonUser = "etiquetas"
    Con.MonPassword = "francia"
     
    Con.OpenConnetion
    MsgBox Array("Pas Bon!", "Bueno !")(Abs(Con.OpenConnetion))
    'Set RS = Con.OpenRecordSet(Sql)
    Set RS = Con.OpenRecordSetParametre("SBO_SP_LP_Comprometidos", "MP-00016-LP")
    MsgBox Array("Pas Bon!", "Bueno !")(Abs(TypeName(RS) <> "Nothing"))
    If Not RS Is Nothing Then RS.Close
    Con.CloseConnection
    Set RS = Nothing
     
    End Sub
    Et si je comprends bien mon message d´erreur il me dit que le champs: @MP, n´a pas été ajouté...

    Donc je t´indique le script de ma procédure SQL:

    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
    USE [SBO_PORTUGAL_PRODUCCION]
    GO
    /****** Object:  StoredProcedure [dbo].[SBO_SP_LP_Comprometidos]    Script Date: 15/05/2017 4:08:26 p. m. ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER Procedure [dbo].[SBO_SP_LP_Comprometidos]  
    @MP varchar(15)  
    as  
    Select O.docentry, O.DocNum 'OP', O.status 'Estado', O.ItemCode 'Padre', P.ItemName 'Padre Desc', O.U_numLot 'Lote', O.PlannedQty, O.PostDate, 
    O.duedate, W.ItemCode, P1.ItemName,  convert(varchar(15),W.BaseQty) 'Consumo Base', W.PlannedQty 'Reservado'
    From OWOR O inner join WOR1 W on O.DocEntry = W.DocEntry   
    inner join OITM P on P.ItemCode = O.ItemCode     
    inner join OITM P1 on P1.ItemCode = W.ItemCode     
    Where O.Status <> 'C' and w.IssuedQty = 0 and W.ItemCode = @MP
    J´ai essayé de définir mon parametre dans VBA de la meme facon qu´il est définit dans SQL, et lorsque je met Prm1.Name = "@MP" en commentaire j´ai le meme message d´erreur, ce qui me fait pensé que mon erreur n´est pas de ma fonction VBA mais plutot de mon scipt SQL... Mais a l´execution de ce script depuis SQL Server si il fonctionne, ce qui fait que je ne n´ai plus d´idée pourquoi cela ne fonctionne pas...

    Je ne sais pas si tu as une de suite la bonne idée mais je te reercie d´avance pour cette lecture un peu longue en éspérant avoir été clair et pas avoir dit de bétise.

    Merci!

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Comme Convenu!

    attention au niveau des paramètres les valeur son différentes en fonction du type de base fais des testes!
    Code ADODBRD : 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    Private Connexion
    Public TYPEBASE As MyAdo
    Public Base
    Public Server
    Public Fichier
    Public User
    Public PassWord
    Enum MyAdo
     ACCESS97 = 1
    ACCESS2000 = 2
    ACCESS2012 = 1
    ODBC = 4
    ORACLE = 5
     SQLSERVER2005 = 6
    SQLServer2008R2 = 7
    SQLite = 8
    SQLite3 = 9
    CSV = 10
    ExcelSensTire = 11
    ExcelAvecTire = 12
    MySQL = 13
    End Enum
    Public Enum CommAdo
        adCmdFile = 256
        adCmdStoredProc = 4
        adCmdTable = 2
        adCmdTableDirect = 521
        adCmdText = 1
        adCmdU
        nknown = 8
    End Enum
    Public AvecTitre As Boolean
    Public Enum AdodbTypeChamps
       adEmpty = 0
        adSmallInt = 2
        adInteger = 3
        adSingle = 4
        adDouble = 5
        adCurrency = 6
        adDate = 7
        adBSTR = 8
        adIDispatch = 9
        adError = 10
        adBoolean = 11
        adVariant = 12
        adIUnknown = 13
        adDecimal = 14
        adTinyInt = 16
        adUnsignedTinyInt = 17
        adUnsignedSmallInt = 18
        adUnsignedInt = 19
        adBigInt = 20
        adUnsignedBigInt = 21
        adFileTime = 64
        adGUID = 72
        adBinary = 128
        adChar = 129
        adWChar = 130
        adNumeric = 131
        adUserDefined = 132
        adDBDate = 133
        adDBTime = 134
        adDBTimeStamp = 135
        adChapter = 136
        adPropVariant = 138
        adVarNumeric = 139
        adVarChar = 200
        adLongVarChar = 201
        adVarWChar = 202
        adLongVarWChar = 203
        adVarBinary = 204
        adLongVarBinary = 205
    End Enum
    Public Enum ParameterDirection
        adParamUnknown = 0
        adParamInput = 1
        adParamOutput = 2
        adParamInputOutput = 3
        adParamReturnValue = 4
    End Enum
     
     
    Public Function Param(Champs As String, AdType As AdodbTypeChamps, Direction As ParameterDirection, size As Integer, Value As String) As Object
    Set Param = CreateObject("ADODB.Command").CreateParameter(Champs, AdType, Direction, size, Value)
    End Function
     
     
    Public Function CommadExecute(adCm As CommAdo, Parameters As Variant, Sql As String) As Object
    Dim I As Integer
      With CreateObject("ADODB.Command")
        .ActiveConnection = Connexion
        .CommandType = adCm
        .CommandTimeout = 500
        For I = 0 To UBound(Parameters)
            .Parameters.Append Parameters(I)
        Next
        .CommandText = Sql
        Set CommadExecute = .Execute
      End With
    End Function
     
     
    Private Function GenereCSTRING()
    'Permet de générer le Cornec String
    '1 - ACCESS 97
    '2 - ACCESS 2000
    '3 - ACCESS 2012
    '4 - ODBC
    '5 - ORACLE
    '6 - SQL SERVER 2005
    '7 - SQL Server 2008 R2
    '8 - SQLite
    '9 - SQLite3
    If Trim("" & Fichier) = "" Then Fichier = Base
    Select Case TYPEBASE
        Case ExcelAvecTire
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Base & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        Case ExcelSensTire
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Base & ";Extended Properties=""Excel 12.0;HDR=no;"""
        Case ACCESS97
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & Fichier
        Case ACCESS2000
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & ";Persist Security Info=False"
        Case ACCESS2012
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";"
        Case MySQL
        GenereCSTRING = " DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & Server & ";UID=" & User & ";DATABASE=" & Base & ";Password=" & PassWord
        Case ODBC
            GenereCSTRING = "Provider=MSDASQL.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & Base
        Case ORACLE
            GenereCSTRING = "Provider=OraOLEDB.Oracle.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & Base
        Case SQLSERVER2005
            GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & Base & ";Data Source=" & Server
        Case SQLServer2008R2
            GenereCSTRING = "Provider=SQLNCLI;Server=" & Server & ";Database=" & Base & ";UID=" & User & ";PWD=" & PassWord & ";"
        Case SQLite
            GenereCSTRING = "Provider=OleSQLite.SQLiteSource.3; Data Source=" & Fichier
            GenereCSTRING = "Driver={SQLite ODBC (UTF-8) Driver};Database=" & Fichier & ";StepAPI=;Timeout="
        Case SQLite3
            GenereCSTRING = "Driver={SQLite3 ODBC Driver};Database=" & Fichier & ";LongNames=0;Timeout=4000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"
        Case CSV
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server & ";Extended Properties=""Text;HDR=" & Array("No", "YES")(Abs(AvecTitre)) & ";FMT=Delimited;"""
        Case Else
            GenereCSTRING = "PAS ASSEZ DE PARAMETRES RENSEIGNES !!!"
    End Select
    End Function
     
    Public Function OpenSchema()
    If Connexion.State = False Then
        OpenConnetion
    End If
    Set OpenSchema = Connexion.OpenSchema(20)
    End Function
    Public Function OpenConnetion()
        OpenConnetion = False 'Ouvre une connexion à  la base de données.
        On Error Resume Next
        Dim ConnecString
         Dim NbErr
        Set Connexion = CreateObject("ADODB.Connection")
        Connexion.Open GenereCSTRING 'ConnecString
        If Err = 0 Then
            OpenConnetion = True
           Connexion.CommandTimeout = 14400
        End If
        Debug.Print Err.Description
        Err.Clear
        On Error GoTo 0
    End Function
    Public Function CloseConnection()
    CloseConnection = False
    On Error Resume Next
        Connexion.Close 'Referme la connexion
        Set Connexion = Nothing
         If Err = 0 Then
            CloseConnection = True
        End If
        Err.Clear
        On Error GoTo 0
    End Function
    Public Function OpenRecordset(Sql)
    'Retourne un RecordeSet
    On Error Resume Next
        Dim Rs
    Dim NbErr
    Err.Clear
    If Connexion.State = 0 Then
        OpenConnetion
    End If
        Set OpenRecordset = CreateObject("ADODB.Recordset")
        OpenRecordset.Open Sql, Connexion, 1, 3
        If Err Then
        NbErr = NbErr + 1
            If NbErr < 11 Then
                Set OpenRecordset = Nothing
            End If
        End If
        Err.Clear
    End Function
    Public Function RetournConnection()
    Set RetournConnection = Connexion
    End Function
    Public Function CloseRecordSet(Rs)
    On Error Resume Next
        Rs.Close
        Set CloseRecordSet = Nothing
    End Function
    Public Function Execute(Sql)
        Execute = False
        On Error Resume Next
        Dim NbErr
    Reprise:
    If Connexion.State = 0 Then
        OpenConnetion
    End If
    Debug.Print Sql
        Connexion.Execute Sql
        If Err = 0 Then
            Execute = True
    Else
        MsgBox Err.Description
        End If
    Err.Clear
    End Function
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim Cn As New ADODBRD, Sql As String
    Cn.Server = "172.2": Cn.Base = "DBTEST": Cn.TYPEBASE = SQLSERVER2005: Cn.User = "dysorthographi ": Cn.PassWord = "dysorthographie"
    Cn.OpenConnetion
    'ActiveCell.CopyFromRecordset Cn.OpenSchema
    Dim prm(1) As Object
    Set prm(0) = Cn.Param("ID", adInteger, adParamInputOutput, 4, "500")
    Set prm(1) = Cn.Param("Name", adChar, adParamInputOutput, 50, "dysorthographie")
    Sql = "SELECT * FROM [Table] WHERE (ID =?) and (Name=?)"
    ActiveCell.CopyFromRecordset Cn.CommadExecute(adCmdText, prm, Sql)
    End Sub

  13. #13
    Membre à l'essai
    Homme Profil pro
    pharmacien
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Pérou

    Informations professionnelles :
    Activité : pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 21
    Points
    21
    Par défaut Merci et explications
    Bonjour Dysorthographie,

    Tout d´abord merci car tu as du y passer du temps et moi je commençais a m arracher les cheveux... et je continue... mais un peu (beaucoup) d´aide ça donne de l´espoir!

    Quelques explications STP:
    -J´ai ma procédure qui est enregistré en SQL, l´objectif est que si les noms des champs changent ou que la procédure change, ma variable pour lancer cette procédure reste la même. Mais a ce que je comprends, tu définis la requête SQL au sein même du code VBA, et sql est une variable de ta fonction. Est il obligatoire de mettre la requête SQL au sein du code VBA?

    -De plus, concernant les paramètres, je voulais commencer par une procédure enregistré simple contenant un seul paramètre de recherche, mais je ne peux pas définir prm de la manière suivante: Dim prm(0) As Object, car au sein de ta fonction For I = 0 To UBound(Parameters).

    Je sais qu´il faut que j´y mette du miens et que la réponse n´est pas toute faite, mais là beaucoup de nouvelles notions et besoin d´un mode d´emploi et du temps et encore un peu d´aide!!

    Merci Dysorthographie

  14. #14
    Invité
    Invité(e)
    Par défaut
    Par définition ado ne comprend que du Sql d'où le nom du paramètres!

    Sql="maprockstock"

    Le module de classe AdodbRd est une boîte à outils générique !

    Il appartient au développeur en occurrence toi de piocher dedans le outils dont tu as besoin dans le contextes du code!

    Je décris un tableau d paramètres au minimum dim prm(0)!

    La fonction param retourne un objet adodb.command.parameteur!

    Et c'est bien ce qu'attend adodb.command.

    Le programme dispose de la saisie instinctive donc si tu écris ton code caractère par caractère tu verras que commandeExecute te propose prockstock!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Enum CommAdo
        adCmdFile = 256
        adCmdStoredProc = 4
        adCmdTable = 2
        adCmdTableDirect = 521
        adCmdText = 1
        adCmdU
        nknown = 8
    End Enum
    Dim prm(0) As Object,
    Oui c'est exactement ce qu'il faut faire!
    Dernière modification par Invité ; 16/05/2017 à 18h30.

  15. #15
    Membre à l'essai
    Homme Profil pro
    pharmacien
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Pérou

    Informations professionnelles :
    Activité : pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 21
    Points
    21
    Par défaut Génial
    Dysorthographie,

    Merci je comprends mieux, j´ai donc pioché dans tous les parametres pour faire fonctionner ta fonction:

    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
    Sub test()
    Dim Con As New ADODBRD, Sql As String
     
    Con.TYPEBASE = SQLSERVER2005
    Con.Server = "BLADELAB01"
    Con.Base = "SBO_PORTUGAL_PRODUCCION"
    Con.User = "etiquetas"
    Con.PassWord = "francia"
     
    Dim prm(0) As Object
    Con.OpenConnetion
    Set prm(0) = Con.Param("MP", 200, 1, 15, "MP-00016-LP")
    Sql = "SBO_SP_LP_Comprometidos"
    ActiveCell.CopyFromRecordset Con.CommadExecute(adCmdStoredProc, prm, Sql)
    Con.CloseConnection
     
    End Sub
    Ce qui fonctionne et je vais m´amuser avec des procédures plus compliquées avec plusieurs parametres et jouer avec mes recordset... Enfin bref tu m´as sacrément aidé encore fois!!!!!

    Un grand merci Dysorthographie pour ton temps et ta pédagogie!!

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

Discussions similaires

  1. probleme de syntax sql
    Par dodomandresy dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 02/05/2008, 13h43
  2. probleme de syntaxe en vba
    Par Invité dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/06/2007, 16h37
  3. Problème de syntaxe sql
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/07/2006, 10h52
  4. [SQL] probleme de syntaxe sql avec php
    Par kaygee dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/06/2006, 14h32
  5. probleme de syntaxe sql dans VB
    Par njac dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/05/2005, 14h41

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