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 :

Connexion Excel a un server SQL depuis excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    Par défaut Connexion Excel a un server SQL depuis excel
    Bonjour a tous,

    Je reviens vers vous pour mon pb de connection a ma base de données (SQL server). J' ai réalisé une connection a mon server, j´importe ces données sur une feuille, en manuel j´y suis arrivé.

    Mon pb est que j´actulise cette connecction a l´ouverture de mon classeur, le pb est lorsque j´ai un pb de connection a mon server, l´utilisateur ne sait pas explicitement s´il est connecté ou pas.

    J´ai alors décidé de passer a une connection manuel par un code vba, ou l´utilisateur en clikant sur un bouton sait síl est connecté ou pas; pour que cela soit plus explicite. Mais j´ai un msg d´ereur informant que le nom d órigine et aucun controleur permis...

    Dans un premier temps je voudrais testé ma connexion et ensuite copié les données selon certains filtres. Avant de parler de filtre je souhaite comprendre ou est mon erreur de synthaxe dans ma requete de connnexion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Cnx As New Connection
    Sub ActBD()
    Dim Cadena As String
    On Error GoTo ErrorBD
    Cadena = "DRIVER=SQL Server;SERVER=BLADELAB01;UID=etiquetas;PWD=francia1;DATABASE=SBO_NATURGEN_PROD"
    Cnx.Open
    MsgBox "Conexion exitosa ", vbInformation, "Ce que j´aimerais lire"
    Cnx.Close
    Exit Sub
    ErrorBD:
    MsgBox "Error de Conexion" & Err.Description
    End Sub
    Si quelqu´un connais d´ou provient mon erreur...

    Merci d´avance pour l´aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Fais une recherche sur AdodbRd!

  3. #3
    Membre averti
    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
    Par défaut
    Bonjour et merci pour le lien,

    Laisse moi le temps de digérer et déchiffrer cette montagne d´information qui m´est relativement trés abstraite, étant novice...
    J´aurais pensé a quelque chose de plus simple mais je vais m´y accrocher !

    Reste en contact STP si ou bout d´une semaine je craque!

    J´ai vu que tu avais deja publié des reponses relative au sujet, je vais regarder ca de plus pres.

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    dans le lien il y à tout pour gérer les transaction avec n'importe quelle base de données! ce n'est as pour cela que je t'ai fourni le lien, mais pour que tu recherche dedans ce dont tu as besoin!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Connexion.State = 0 Then msgbox "Pas bon!"

  5. #5
    Membre averti
    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
    Par défaut
    Je continue de faire mes tests sans succés...
    Je cherche l´inspiration dans ton code car je sais que je vais y trouver réponses, mais le détails avec tes fonctions est que c´est du chinois... J´esaye

    Peut etre que tu peux m ´orienter sur mon erreur en esperant que cela une erreur de synthaxe, j´ai modifié les parametres et les bon mais je n´arrive pas a tester ma connection

    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.TYPEBASE = SQLServer2008R2
    Con.Server = "BLADELAB01"
    Con.BASE = "SBO_NATURGEN_PROD"
    Con.User = "etiquetas"
    Con.PassWord = "francia1"
    Dim Sql As String
    Sql = ""
     
    If Connexion.State = 0 Then
    MsgBox "Pas bon!"
    End If
    end sub
    Merci d´avance

    Une question, dans ta sub test, con est bien de type connection?
    Pk j´ai une erreur sur .state? J´ai bel et bien référencé ma librairie...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Con.OpenConnetion
        If Con.State = adStateOpen Then
            MsgBox "connection OK"
        Else
            MsgBox "erreur de connection"
        End If
    Con.CloseConnection
    Merci par avance

  6. #6
    Invité
    Invité(e)
    Par défaut
    A vrai dire je ne pensais pas que tu allais reprendre mon module de classe!

    Con c'est une instance du module de classe il vérifie en interne si la connexion est ok pour éviter les erreurs #

    Non ce que je tes données plus haut c'était pour ton code! Maintenant si tu utilises mon module de classe.

    MsgBox Con.OpenConnetion

  7. #7
    Membre averti
    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
    Par défaut
    Faux n´est pas sensé etre la reponse?...

    Du coup je ne suis pas sur d´avoir tout compris, ton module de clase sert a vérifier le serveur? La connection? Les données du recordset?

    Dans mon cas, je n´arrive pas a armer ma chaine de connection ou a me connecter tout simplement, je ne sais pas... mais je pensais mínspirer de ton module de classe pour les conditions de connections et les conditions filtres de a effectuer sur mes recherches....

    Peut etre que je pense mal...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Mon module de classe gérer absolument toute les transactions avec la base de données.

    Openconnection retourne true/false conecter/ pas connecter!

  9. #9
    Membre averti
    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
    Par défaut
    Ce qui signifie que je n´ai toujours pas réussi a faire ma connection...
    Sais tu ou est mon erreur ?

    Merci...

  10. #10
    Invité
    Invité(e)
    Par défaut
    ma dernier version!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim Con As New ADODBRD
    Con.BASETYPE = SQLServer2008R2
    Con.MonServer ="BLADELAB01"
    Con.Database = "SBO_NATURGEN_PROD"
    Con.MonUser = "etiquetas"
    Con.MonPassword = "francia1"
    Dim Sql As String
    Sql = "Select * from [Table]"
    MsgBox Array("Pas Bon!", "Bon !")(Abs(Con.OpenConnetion))
    Set RS = Con.OpenRecordSet(Sql)
    MsgBox Array("Pas Bon!", "Bon !")(Abs(TypeName(RS) <> "Nothing"))
    End Sub
    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
    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
    Private Connexion
    Private TYPEBASE As MyAdo
    Private BASE
    Private Server
    Private User
    Private Password
    Private Port
    Private TCP
    Public Enum MyAdo
        ACCESS97 = 1
        ACCESS2000 = 2
        ACCESS2012 = 3
        ODBC = 4
        Oracle = 5
        OracleTcpIp = 13
        SQLSERVER_NT4 = 12
        SQLSERVER2005 = 6
        SQLServer2008R2 = 7
        SQLite = 8
        SQLite3 = 9
        CSV = 10
        Excel8 = 11
    End Enum
    Public Property Get MonTCP() As String
    MonTCP = TCP
    End Property
    Public Property Let MonTCP(ByVal TCP_ As String)
    MonTCP = TCP_
    End Property
    Public Property Get MonPort() As String
    MonPort = Port
    End Property
    Public Property Let MonPort(ByVal Port_ As String)
    MonPort = Port_
    End Property
    Public Property Get MonPassword() As String
    MonPassword = Password
    End Property
    Public Property Let MonPassword(ByVal Password_ As String)
    Password = Password_
    End Property
    Public Property Get MonUser() As String
    MonUser = User
    End Property
    Public Property Let MonUser(ByVal User_ As String)
    User = User_
    End Property
    Public Property Get MonServer() As String
    MonServer = Server
    End Property
    Public Property Let MonServer(ByVal MonServer_ As String)
    Server = MonServer_
    End Property
    Public Property Get Database() As String
    Database = BASE
    End Property
    Public Property Let Database(ByVal Database_ As String)
    BASE = Database_
    End Property
    Public Property Get BASETYPE() As MyAdo
    BASETYPE = TYPEBASE
    End Property
    Public Property Let BASETYPE(ByVal BASETYPE_ As Long)
    TYPEBASE = BASETYPE_
    End Property
    Public 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
    Select Case TYPEBASE
        Case ACCESS97
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & BASE
        Case ACCESS2000
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & BASE & ";Persist Security Info=False"
        Case ACCESS2012
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BASE & ";"
        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 OracleTcpIp
            GenereCSTRING = "MyBase.WORLD=(DESCRIPTION=(ADDRESS=(PROTOCOL=" & TCP & ")(HOST=" & Server & ")(PORT=" & Port & "))(CONNECT_DATA=(SERVICE_NAME=" & BASE & ")))"
        Case SQLSERVER_NT4
            GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & Password & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & BASE & ";Data Source=" & Server
        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=" & BASE
            GenereCSTRING = "Driver={SQLite ODBC (UTF-8) Driver};Database=" & BASE & ";StepAPI=;Timeout="
        Case SQLite3
            GenereCSTRING = "Driver={SQLite3 ODBC Driver};Database=" & BASE & ";LongNames=0;Timeout=4000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"
        Case CSV
            GenereCSTRING = "ODBC;DBQ=" & Server & ";Driver={Microsoft Text Driver (*.txt; *.csv)}; " & "DriverId=27;Extensions=txt,csv,tab,asc;FIL=text;MaxBufferS"
        Case Excel8
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & BASE & ";Extended Properties=Excel 8.0;"
        Case Else
            GenereCSTRING = "PAS ASSEZ DE PARAMETRES RENSEIGNES !!!"
    End Select
    End Function
    Public Function RetournRep()
    Dim t
    t = Split(BASE, "\")
    RetournRepFichier = Replace(BASE, t(UBound(t)), "")
    End Function
    Public Function RetournFichier()
    Dim t
    t = Split(BASE, "\")
    RetournFichier = t(UBound(t))
    End Function
    Public Function OpenConnetion()
    'Ouvre une connexion à  la base de données.
    OpenConnetion = False
    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
    Else
    Debug.Print Err.Description
    End If
    Err.Clear
        On Error GoTo 0
    End Function
    Public Function CloseConnection()
    'Referme la connexion
    CloseConnection = False
    On Error Resume Next
    Connexion.Close
    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
    Debug.Print Replace(Sql, "%", "*")
    Set OpenRecordSet = CreateObject("ADODB.Recordset")
    OpenRecordSet.Open Sql, Connexion, 1, 3
    If Err Then
    'MsgBox Err.Description
            Set OpenRecordSet = Nothing
    End If
    Err.Clear
    On Error GoTo 0
    End Function
    Public Function RetournConnection()
    Set RetournConnection = Connexion
    End Function
    'Pas fonctionel
    Public Function OpenRecordSetParametre(Sql, Param)
    Dim Commande
    Dim Params
    Set Commande = CreateObject("ADODB.Command")
    Dim MyParameter
    Set MyParameter = CreateObject("ADODB.Parameter")
    Set Commande.ActiveConnection = Connexion
    Commande.CommandText = "select Requête2.* from Requête2;"
    Commande.CommandType = adCmdText
    Set MyParameter = Commande.CreateParameter("[NumJob]", adNumeric)
    MyParameter.Value = 10
    Commande.Parameters.Append MyParameter
    Set Rs2 = Commande.Execute
    End Function
    'Cloture le RecordSet
    Public Function CloseRecordSet(RS)
    On Error Resume Next
        RS.Close
        Set CloseRecordSet = Nothing
    On Error GoTo 0
    End Function
    'Pour les requêtes directe
    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
     
    Err.Clear
    On Error GoTo 0
    End Function
    Fichiers attachés Fichiers attachés

  11. #11
    Membre averti
    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
    Par défaut
    Avant je ne comprenais pas tout maintenant je comprends plus rien...
    J´ai deux msg pas bon qui s´affiche!
    Est ce que ce serait possible de vulgariser le langage que tu emploies? Je sais que tu es un proffesionnel ou alors tres tres doué dans le domaine, mais pour essayer de comprendre un minimum pk je n ´arrive pas a me connecter, je comprends un peu de vba mais rien des connections a SQL server ...

    Dans tous les cas merci pour le temps passé et du partage de tes connaissances....

  12. #12
    Invité
    Invité(e)
    Par défaut
    tout est dans la sub test , il n'y a pas grands chose à comprendre!

    tu ne penses pas que c'est plutôt ça!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim Con As New ADODBRD
    Con.BASETYPE = SQLSERVER2005
    Con.MonServer = "BLADELAB01"
    Con.Database = "SBO_NATURGEN_PROD"
    Con.MonUser = "etiquetas"
    Con.MonPassword = "francia1"
    Dim Sql As String
    Sql = "Select * from [Table]"
    MsgBox Array("Pas Bon!", "Bon !")(Abs(Con.OpenConnetion))
    Set RS = Con.OpenRecordSet(Sql)
    MsgBox Array("Pas Bon!", "Bon !")(Abs(TypeName(RS) <> "Nothing"))
    End Sub

  13. #13
    Membre averti
    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
    Par défaut
    Ce n´est pas l´impression que je voulais donner, dsl, mais comment as tu penser a changer le server?
    SQLSERVER2008R2 a 2005?
    Pcq c´est ce que l´on m´a dit, et j´ai essayé de bidouiller des trucs, mais je n´ai pas pensé a ca...

    Enfin je te remercie, pcq ca fait des heures que je bidouille et "m´amuse" a faire des recherches sur le server ...

    Pour etre sincere avec toi je ne sais pas comment ca fonctionne, je ne suis pas adepte du copié collé, mais je ferais une exeption pour ton code qui me parrait super et surtout qui fonctionne tres bien.

    J´ai un dernier conseil a te demander, est ce que je m' y prends de la bonne facon dans la synthaxe d´ecriture?

    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
    Con.OpenConnetion
    On Error GoTo ErrorBD
    Set RS = Con.OpenRecordSet(Sql)
    If RS.EOF Then
       MsgBox "Sin datos corespondiendo", vbInformation, "Mensaje"
    Else
        Dim vfilas As Integer
        vfilas = 2
        Do While Not RS.EOF
            With Sheets(1)
            .Cells(vfilas, 1).Value = RS(0).Value
            End With
            RS.MoveNext
            vfilas = vfilas + 1
        Loop
    End If
    RS.Close
    Con.CloseConnection
    Est ce que je dois faire la demande dans la sub ou dois je la faire a part?

    J´ai remarqué que le temps pouvait exeder 5 min... mais ca ca sera le theme d´une autre question ou pas !

    Un grand grand merci dysorthographie

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    une module de classe c'est comme un variable intelligente!
    pour faire du SQL il faut ce coonnecter aà une base d donnés!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    im Cnx as new Adodb.connetion
    cnx.ope ContStinr
    mon module d classe fait exactement la meme chose mais comme je l'utilises souvant je le mets dans une fonction ! les propriétés basetype me me prmets de me connecter sur n'importe quel type de base de onnées (access,orale , sql serveur...)<br>
    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
     Public Function OpenConnetion()
    'Ouvre une connexion à  la base de données.
    OpenConnetion = False
    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
    Else
    Debug.Print Err.Description
    End If
    Err.Clear
        On Error GoTo 0
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Con.OpenConnetion
    On Error GoTo ErrorBD
    Set RS = Con.OpenRecordSet(Sql)
    If RS.EOF ThenMsgBox "Sin datos corespondiendo", vbInformation, "Mensaje"
    Dim vfilas As Integer
    vfilas = 2
    With Sheets(1).Cells(vfilas, 1).CopyFromRecordset Rs
    vfilas = vfilas + 1
    RS.Close
    Con.CloseConnection
    Dernière modification par Invité ; 08/03/2017 à 08h21.

  15. #15
    Membre averti
    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
    Par défaut
    Bonjour dysothographie,

    Ton module de classe est plus inteligent que moi, pour le moment....!!!!

    Lorsque tu mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Cnx as new Adodb.connetion
    cnx.ope ContStinr
    Quel est la différence avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Con As New ADODBRD
    Con.OpenConnetion
    Dans le premier cas cnx est une connection a ton module de classe avec les variables de connection définit dans ton module de classe ou alors faut les définir dans la sub (comme ds la sub test)? De plus ContStinr correspond a ta chaine de connection? La différence avec le deuxieme exemple est que les variables de connection sont définit dans la sub comme tu me l´as montré dans ta sub test. Arrete moi si je dis des bétises! Mais j´esaaye de comprendre les diffe´rences de sens ...

    Ce que je n´ai pas compris c´est que ta fonction openconnection fait partie de ton module de classe, elle fait partie des ses propriétés(le temps de recherche inclus), pourquoi lorsque est définit Con As New ADODBRD, une fois la connection ouverte le temps de ma demande a duré plus de 5 min? Cela n´a pas pris en compte la donnée du temps?

    Et derniere question, quelque chose qui me rend perplexe, est que sur ma recherche je fais une boucle sur le EOF avec un while et aprés je définit une colone de ma feuille pour une colone de mon recordset, donc pour n colone de ma requete sql j´ai n colone de recorset et donc n lignes de code...
    Et toi, pas de boucle, pas de while, pas de EOF, pas de n lignes pour n colones juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(1).Cells(vfilas, 1).CopyFromRecordset Rs
    , ce qui me recopie toutes les lignes et toutes mes colones dans l´ordre de ma requete sql; juste c´est quoi la logique? Y a t-il des risques a utiliser une ecriture tant condensé?... Je suis perplexe du style d´écriture et du résultat... bravo...

    De plus je pensais utiliser commandin a ma requete pour que l´utilisateur définisse lui meme certaines variables la dessus, si tu as des infos je suis prenneur

    Encore une fois merci, c´est génial

  16. #16
    Invité
    Invité(e)
    Par défaut
    adodb est une classe implémentée dans une librairie (DLL) c'est elle qui permet d'effectuer la connexion avec n'importe que base de données.

    pour effectuer un connexion il faut connaitre la syntaxe et le driver ODBC pour ce connecter à ACCESS, ORACLE, SQL SERVEUR...

    adodbRd est également une classe mais elle fait appel à AdoDb et lui fournit les informations qu'il faut implémenter dans un sub afin d'établir la connexion!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim Cnx as new Adodb.conection
    Cnx.Open"DRIVER=SQL Server;SERVER=BLADELAB01;UID=etiquetas;PWD=francia1;DATABASE=SBO_NATURGEN_PROD"
    
    la je dois dire que la différences est subtil!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim  Connexion as object
    Set Connexion = CreateObject("ADODB.Connection")
     Connexion.Open GenereCSTRING 'ConnecString
    mais en réalité GenereCSTRING n'est pas une petite variable de rien du tout, c'est une fonction qui aiguille la connexion en fonction de!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Con AsNew ADODBRD
    Con.BASETYPE = SQLSERVER2005
    Con.MonServer = "BLADELAB01"
    Con.Database = "SBO_NATURGEN_PROD"
    Con.MonUser = "etiquetas" Con.MonPassword = "francia1"
    on a bien vue la différence entre Con.BASETYPE = SQLServer2008R2 et Con.BASETYPE = SQLSERVER2005!

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Public 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
    Select Case TYPEBASE
        Case ACCESS97
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & BASE
        Case ACCESS2000
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & BASE & ";Persist Security Info=False"
        Case ACCESS2012
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BASE & ";"
        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 OracleTcpIp
            GenereCSTRING = "MyBase.WORLD=(DESCRIPTION=(ADDRESS=(PROTOCOL=" & TCP & ")(HOST=" & Server & ")(PORT=" & Port & "))(CONNECT_DATA=(SERVICE_NAME=" & BASE & ")))"
        Case SQLSERVER_NT4
            GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & Password & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & BASE & ";Data Source=" & Server
        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=" & BASE
            GenereCSTRING = "Driver={SQLite ODBC (UTF-8) Driver};Database=" & BASE & ";StepAPI=;Timeout="
        Case SQLite3
            GenereCSTRING = "Driver={SQLite3 ODBC Driver};Database=" & BASE & ";LongNames=0;Timeout=4000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"
        Case CSV
            GenereCSTRING = "ODBC;DBQ=" & Server & ";Driver={Microsoft Text Driver (*.txt; *.csv)}; " & "DriverId=27;Extensions=txt,csv,tab,asc;FIL=text;MaxBufferS"
        Case Excel8
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & BASE & ";Extended Properties=Excel 8.0;"
        Case Else
            GenereCSTRING = "PAS ASSEZ DE PARAMETRES RENSEIGNES !!!"
    End Select EndFunction
    en gros tu peux te connecter à tout ce qui ressemble de près ou de loin à une base de données!

    ce module de classe est une boîte à outils qui implémente à ta place le code que de toute façon tu aurais cherché sur internet!

    il n'est pas plus intelligent que toi, il est (sur le sujet en tout cas) plus compétant que toi!

    maintenant tu parlais de rapidité! tu le trouves pas rapide?

    en ce qui cocerne CopyFromRecordSet Rs c'est la même chose que ta boucle while mais c'est Excel qui gère! en revanche il fait tous les champs si nom tu choisi select [Champ1],
    [Champ2] dans ta requête!


  17. #17
    Membre averti
    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
    Par défaut
    Bojour Dysothographie,

    J´aime la subtilité des mots. J' ai pris mon temps pour comprendre les infos que tu m' as donné.

    Question rapdité, au contraire il est plus rapide quand je laisse "excel faire" que lorsque je fais des boucles while! Ce qui m´étonne d´autant plus.

    Pour bien comprendre, si je veux tester ma connection, relative a la classe adobd de la librairie, ca donne ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub ConectionBD_Haga_clic_en()
    Dim Cadena As String
    Dim Cnx As New ADODB.Connection
    On Error GoTo ErrorBD
    Cadena = "DRIVER=SQL Server;SERVER=BLADELAB01;UID=etiquetas;PWD=francia1;DATABASE=SBO_NATURGEN_PROD"
    Cnx.Open Cadena
    MsgBox "Conexion exitosa ", vbInformation
    Cnx.Close
    Exit Sub
    ErrorBD:
    MsgBox "Error de Conexion" & Err.Description
    End Sub
    Ce qui veut dire que lorsque j´ai toutes données relative a ma connection (driver, server...) je n´ai pas la nécéssité d´utilisé ta boite a outils ADODBRD?

    Ensuite relativement a l´ouverture de ma connection, quelle est la différence entre ces formes écritures, s´il y a et quelle est la forme la plus correcte:
    Cnx.Open Cadena
    Con.OpenConnetion
    Connexion.Open GenereCSTRING

    J´ai d´autres incertitudes relatives au recordset mais je vais faire de mon mieux pour bien formuler mes questions.

    Merci pour le partage de tes connaissances j ´ai l´impression d´avoir bcp amélioré mes compétences sur le sujet ces derniers jours

  18. #18
    Invité
    Invité(e)
    Par défaut
    bonjour,
    OpenConnetion c'est commeConectionBD_Haga_clic_en pour ta connexion sauf que c'est une fonction qui retourne true/false de la connexion à la base de donnés.

    GenereCSTRING c'est Cadena et oui nos deux code sont identique le mien à pour but de faciliter le travail surtout si comme moi ton travail consiste à développer des IHM connecter sur différent type de bases de donnes!

    Aujourd'hui je fais une application connecté a Access, et demain je migre sur Sql serveur, je n'est pratiquement que ça a modifier!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Con.BASETYPE = SQLSERVER2005
    Con.MonServer = "BLADELAB01"
    Con.Database = "SBO_NATURGEN_PROD"
    Con.MonUser = "etiquetas"
    Con.MonPassword = "francia1"
    Dernière modification par Invité ; 11/03/2017 à 02h10.

  19. #19
    Membre averti
    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
    Par défaut
    Bonjour,

    Petit a petit je saisi mieux comment fonctionne les différentes forme de connections, mais il me manque encore du recul. J' utilise le Con.OpenConnetion comme tu me l' as montré et cela fonctionne tres bien ainsi, je fais des tests sur mes recorset, et comment les formuler, ainsi que .command... mais il me reste encore bcp de travail personnel pour réaliser mes idées.

    Je ne connaissais pas le concept de IHM, pour le moment ma base de données est toujours la meme SQL Server, et je me connecte toujours en mode lecture depuis Excel; je n´ai pas la possibilité d´avoir Acces mais qui sait...

    Dans un futur proche je souhaiterai créer une nouvelle base de données sur mon server et y acceder toujours depuis excel, car je ne connais pas trop les possibilités et je vais essayer avant tout d' ameliorer mes connaissance en SQL et VBA avant tout, car avec ma formation de pharmacien niveau IHM je suis limite!

    Dans tous les cas merci Dysorthographie pour le temps passer a aider et qui sait a une prochaine sur le forum

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    J'avoue que la partie command es embryonnaire dans mon module de classje l'ai finalisé dans ma version Vb.net m,je vrai voire pour t'en proposer une une!

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

Discussions similaires

  1. Précisions pour manier les bases de données SQL depuis Excel vba
    Par bilou_12 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/02/2013, 23h21
  2. [XL-2003] Transfert de données depuis Excel en VBA vers SQL Server
    Par donos dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/06/2011, 14h57
  3. problème de connection à SQL server 2000 depuis Excel
    Par tribaleur dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/09/2008, 12h08
  4. Accès à SQL Server 2005 depuis Excel
    Par Franck_P dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/09/2008, 12h34
  5. Comment effectuer une requette SQL depuis Excel vers une base MySQL ?
    Par Zorgloub dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/01/2008, 01h08

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