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 :

Importer table depuis SQL SERVER


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut Importer table depuis SQL SERVER
    Bonjour à tous,

    sous A97 (ou A02), je souhaite importer des tables contenues dans une base SQL Server
    J'ai jamais fait ça.
    J'ai récupéré un code de connexion sur la FAQ

    Je vois bien qu'il me manque quelque chose entre la connexion
    et le docmd.transfertDatabase....
    mais quoi ?

    dbengine.workspaces...etc...

    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
     
    Public Sub connect()
     '---------------------------------------
     'Connection au serveur SQL NomServeur
     '---------------------------------------
     'instanciation de la connection
       Dim Cnx As New ADODB.Connection
    ' Set Cnx = New ADODB.Connection
     'parametre de connection
     Cnx.ConnectionString = "Driver={SQL Server};server=Gestion;UID=AD;PWD=;database=VET"
     Cnx.Open
     'test de connection
     If Cnx.State = adStateOpen Then
         MsgBox "connection OK"
     End If
    Dim F As Database
    .......
    DoCmd.TransferDatabase acImport, , "VET", acTable, "Tbl_Race", "Tbl_race"
     
    End Sub
    Dans l'idéal, j'aimerais parcourir une collection des tables contenues dans cette base externe SQL server, et les importer toutes...

    Merci de votre aide...

    bonne journée à tous....
    fevec

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Pour importer une table SQL Server :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim strConn As String, strTableSQLserver As String
    strConn = "ODBC;DRIVER=Sql Server;SERVER=Gestion;DATABASE=VET;UID=AD;PWD=MotDePasse"
    strTableSQLserver = "Tbl_Race"
    DoCmd.TransferDatabase acImport, "Base de données ODBC", strConn, _
          acTable, strTableSQLserver , "Tbl_Race"
    J'ai un petit doute sur la syntaxe du nom de la table SQL server
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strTableSQLserver = "Tbl_Race"
    Je crois qu'il faut mettre le nom du propriétaire de la table, suivit d'un point, puis le nom de la table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strTableSQLserver = "Proprio.Tbl_Race"
    Voici un exemple de code pour importer toutes les tables
    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
    Dim Cnx As ADODB.Connection
    Dim RS As ADODB.Recordset
    Dim strConn As String
    Dim strTableSQLserver As String, strTableAccess As String
     
    ' Ouverture connexion ADO
    Set Cnx = New ADODB.Connection
    Cnx.ConnectionString = "DRIVER=Sql Server;SERVER=Gestion;DATABASE=VET;UID=AD;PWD=MotDePasse"
    Cnx.Open
     
    ' Ouverture recordset ADO
    Set RS = New ADODB.Recordset
    Set RS.ActiveConnection = Cnx
    RS.Open "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'"
     
    strConn = "DRIVER=Sql Server;SERVER=Gestion;DATABASE=VET;UID=AD;PWD=MotDePasse"
    ' Parcours du recordset
    Do While Not RS.EOF
       ' TABLE_SCHEMA = Nom du propriétaire
       ' TABLE_NAME   = Nom table SQL Server
       strTableSQLserver = RS("TABLE_SCHEMA") & "." & RS("TABLE_NAME")
       strTableAccess = RS("TABLE_SCHEMA") & "_" & RS("TABLE_NAME")
       'Debug.Print strTableSQLserver; Tab(50); strTableAccess
       DoCmd.TransferDatabase acImport, "ODBC", strConn, _
             acTable, strTableSQLserver, strTableAccess
       RS.MoveNext
    Loop
    RS.Close
    Set RS = Nothing
     
    Cnx.Close
    Set Cnx = Nothing
    Pour faire une simulation, remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       'Debug.Print strTableSQLserver; Tab(50); strTableAccess
       DoCmd.TransferDatabase acImport, "ODBC", strConn, _
             acTable, strTableSQLserver, strTableAccess
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Debug.Print strTableSQLserver; Tab(50); strTableAccess
       ' DoCmd.TransferDatabase acImport, "ODBC", strConn, _
             acTable, strTableSQLserver, strTableAccess
    Ça ne risque pas de faire exploser ta base Access d'importer toutes les tables SQL Server ?

    A+

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut
    bonjour LedZeppII,
    D'abord merci pour ta réponse et le code fourni.
    J'avais mise de côté le dossier "connection vers SQL serveur" que je reprends désormais.
    Petit souci : sur le poste où je suis je n'ai que Access97

    à l'exécution sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set Cnx = New ADODB.Connection
    j'ai le message "Erreur de compilation. Type défini par l'utilisateur non défini".

    Selon toi, est ce qu'il me manque une référence ?
    ou bien
    - ce code VBA ne peut fonctionner en Access97 ?


    Merci.
    Fevec

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 184
    Points : 1 363
    Points
    1 363
    Par défaut
    Ajoute la référence ADODB "Microsoft ActiveX Data Objects ..."

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    Sinon une autre piste de reflexion :

    créer une requete SQL direct (il faut au préalable créer une source de données ODBC via "l'administrateur de source de données ODBC")

    Puis utiliser ces requetes SQL Direct pour faire des insert dans la base access.

    PS : Je ne connais pas Access 97, je ne sais donc pas si ma solution est correcte ou pas.

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut
    merci à tous,
    kloun : merci pour le nom de la référence, la connection est OK

    Par rapport au code de LedZeppII (ci-dessus dans le post)

    le ligne debug.print fonctionne et m'affiche la liste des tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       ' Debug.Print strTableSQLserver; Tab(50); strTableAccess
       DoCmd.TransferDatabase acImport, "Base de données ODBC", strConn, _
             acTable, strTableSQLserver, strTableAccess
    mais lorsque je veux transférer les tables, j'ai le message.

    Erreur d'excution 3170 Pilotre ISAM introuvable.

    il me semble que c'est le paramètre "Base de données ODBC" qui ne convient pas (c'est poutant la syntaxe de l'aide en ligne par F1)
    j'ai essayé aussi "ODBC" comme dans le code de LedZeppII

    quelqu'un a une piste ?


    Access Newsbie :
    peux tu m'en dire un peu plus, sur la mise en oeuvre de la requête SQL direct
    (j'ai une source ODBC qui fonctionne)


    Merci à tous
    fevec

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Pour créer une requete SQL Direct :

    1 - Créer une nouvelle requete vide.
    2 - Ensuite, clic-droit sur la requete et il faut choisir "spécifique SQL \ SQL Direct"
    3 - Ecrire le sql de la requete (select * from maTable)
    4 - Puis faire un clic droit sur la requete et "propriétés"
    5 - Changer la chaine de connexion (cliquer sur les ... au bout de la ligne)

    Et voila le tour est joué !

    PS : tu peux peut-etre aussi faire directement le lien sur la table dont tu as besoin.
    Fichier\Données Externes\Lier les tables et choisir ODBC comme type de fichier.

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut
    Merci à tous,
    à priori j'ai solutionné mon pb.

    au début de la chaine de connection, j'ai rajouté ODBC; (comme indiqué dans la première partie du code de LedzeppII)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    strConn = "ODBC;DRIVER=Sql Server;SERVER=Gestion;DATABASE=VET;UID=;PWD="
    ' Parcours du recordset
    Do While Not RS.EOF
       ' TABLE_SCHEMA = Nom du propriétaire
       ' TABLE_NAME   = Nom table SQL Server
       strTableSQLserver = RS("TABLE_SCHEMA") & "." & RS("TABLE_NAME")
       strTableAccess = RS("TABLE_SCHEMA") & "_" & RS("TABLE_NAME")
      '  Debug.Print strTableSQLserver; Tab(50); strTableAccess
       DoCmd.TransferDatabase acImport, "ODBC", strConn, _
       acTable, strTableSQLserver, strTableAccess
       RS.MoveNext
    L'import des tables fonctionne!

    Merci à tous de votre contribution.
    fevec

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

Discussions similaires

  1. insert into depuis feuille excel vers table sous sql server 2005
    Par enstein8 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 09/12/2011, 16h21
  2. Réponses: 2
    Dernier message: 03/05/2011, 15h54
  3. Réponses: 2
    Dernier message: 16/06/2008, 23h42
  4. Comment importer depuis sql server
    Par akrem dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 19/06/2007, 22h51
  5. Réponses: 2
    Dernier message: 13/11/2006, 07h42

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