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

Projets ADP Discussion :

Transfer de données entre Access et SQL server [AC-2007]


Sujet :

Projets ADP

  1. #1
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2007
    Messages : 169
    Points : 241
    Points
    241
    Par défaut Transfer de données entre Access et SQL server
    Bonjour,

    J'avais reçut votre aide dans un poste précédent et je passe maintenant au codage.
    Ce que je veux c'est transferer une petite table de Access vers le server.
    J'ai fait une fonction pour tester le principe en me basant sur divers infos glannées sur le web.

    Cette fonction copie une table (ftr_ShipTo) de Access vers SQL server puis la lit grâce à une requête.

    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
    Sub test()
        Dim strConn As String
        Dim strCS As String
        Dim strSQLServer As String
     
        Dim cn As New ADODB.Connection
        Dim rs As ADODB.Recordset
     
        strSQLServer = GetLocalParameter("SQLServer") 'Retourne le nom de mon server
        strConn = "ODBC;DRIVER=Sql Server;SERVER=" & strSQLServer & ";DATABASE=COLDIT"
        strCS = "Provider='SQLOLEDB';Data Source='" & strSQLServer & "';Initial Catalog='COLDIT';Integrated Security='SSPI';"
     
        cn.ConnectionString = strCS
        cn.Open
     
        DoCmd.TransferDatabase acExport, "ODBC", strConn, _
             acTable, "ftr_ShipTo", "TEST_ftr_ShipTo"
     
        Set rs = cn.Execute("SELECT * FROM TEST_ftr_ShipTo")
        While Not rs.EOF
            Debug.Print rs.Fields(0).Value
            rs.MoveNext
        Wend
        cn.Execute ("DROP TABLE TEST_ftr_ShipTo") 'Efface la table
     
        cn.Close
        Set rs = Nothing
        Set cn = Nothing
     
    End Sub

    Ce petit bout de code marche bien mais je voudrais maintenant utiliser une table temporaire.

    Ca marche si je remplace TEST_ftr_ShipTo par ##TEST_ftr_ShipTo (table globale).

    Cependant, si je remplace TEST_ftr_ShipTo par #TEST_ftr_ShipTo cela ne marche plus (table locale).

    Dans mon cas j'aurais voulu utiliser une table locale...
    J'imagine que le problème est du au fait que j'utilise deux connections différentes.
    Mais vu que je suis débutant dans les échanges entre Access et SQL server je bloque...

    Voyez vous un moyen simple de résoudre mon problème?


    Merci par avance et bonnes fêtes de fin d'année à tous!

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    L'usage d'une table global permet d'être conservée contrairement à une table temporaire mais dans ce cas, il faut prévoir de la nommer de façon unique avec le login par exemple pour éviter les erreurs...

    Dans ton cas, tu pourrais créer la table vide (et non temporaire) si elle n'existe pas (INSERT/ SELECT avec condition 1 = 0) et d'user du INSERT direct dans le cas où elle existe déjà auquel cas, tu exécutes un TRUNCATE d'abord.

    Argy

  3. #3
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2007
    Messages : 169
    Points : 241
    Points
    241
    Par défaut
    Salut Argy,

    Un grand merci pour la réponse. Ce n'est pas la première fois car les différentes infos que tu as semées sur le web m'ont déjà bien aidé à avancer jusqu'ici!

    Voici quelques infos en plus pour mieux comprendre mon "problème".

    En fait dans mon programme final je crée une table avec un nom unique (nom de table + login + date et heure). Ici je n'ai fait qu'une fonction basique pour tester.

    Cette table contient une liste de valeurs sélectionnées par l'utilisateur qui servent ensuite de filtre pour télécharger les données stockées sur le serveur SQL (il peut y avoir plusieurs milliers de valeurs sélectionnées).

    Je procède ainsi:
    1. Je crée et je remplie la table filtre localement via un formulaire Access
    2. Je la transfère sur le serveur (avec un nom unique)
    3. J’exécute ma requête de sélection avec le nom de la table filtre en paramètre
    4. Je télécharge les résultats dans une table locale

    Ce processus me permet de limiter les données qui transitent sur le réseau.
    J'ai besoin d'un identifiant unique car plusieurs personnes peuvent utiliser le programme en même temps (l'utilisation d'une seule table ne marche donc pas dans mon cas).

    Cela marche nikel avec une table normale mais je préférerais utiliser une table temporaire au cas ou le programme planterait en cours de route (pour ne pas risquer de saturer la base avec des tables inutiles..!)

    Utiliser une table temporaire globale ne me pose pas réellement de problème grâce à l'ID unique mais j'aurais aimé savoir pourquoi cela ne fonctionne pas avec ma table temporaire locale... Histoire de ne pas avoir de mauvaise surprises...
    En fait j'ai peur que ma table temporaire globale soit effacée avant même que je ne l'utilise...

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Eh bien tu n'as qu'à créer physiquement la table comme stipulé ci-avant, non temporaire qui contient un champ avec le login du User (et éventuellement une date au format Long pour plus de souplesse et éviter les '') dans la table.
    Ainsi, chaque utilisateur possède ses propres données sur le filtre idoine.
    Pour chaque nouvelle réutilisation, tu fais en sorte que les lignes contenant le Login X [et la date Long] soient préalablement effacées.
    Tu fais travailler le serveur en utilisant des procédures stockées et puis ça devrait le faire, non ?

    Idée glop glop ou pas glop pas glop ?

    Argy

  5. #5
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2007
    Messages : 169
    Points : 241
    Points
    241
    Par défaut
    En effet c'est une bonne idée!
    Il ne faut pas hésiter à être créatif en programmation

    Merci encore pour les conseils.
    Maintenant, au travail pour programmer tout ça!

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

Discussions similaires

  1. [TOS] Transfert de données entre 2 bdd SQL Server
    Par Teddy.Legris dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 30/09/2013, 09h42
  2. Retour différent entre Access et SQL Server
    Par Jean-Philippe André dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/02/2012, 10h51
  3. Transférer données entre deux tables sql server
    Par Aethen dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/05/2011, 15h52
  4. Erreur de connexion ODBC entre ACCESS et SQL server express
    Par fafa63 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 06/04/2010, 18h33
  5. Equivalence SQL entre access et sql server
    Par liliprog dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/07/2006, 16h19

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