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

Requêtes et SQL. Discussion :

Ajout d'enregistrements à une table depuis une table identique d'une autre base


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut Ajout d'enregistrements à une table depuis une table identique d'une autre base
    Bonjour,

    Je suis désolé de faire appel au forum pour un problème qui doit être simple mais cela fait deux jours que je tourne en rond.
    Je souhaite ajouter, par requête SQL exécutée par le code VBA déclenché par le click sur un bouton de commande, à une table nommée "Tbl_DC" d'une base de donnée "BD_dest" tous les enregistrements et tous les champs de la même table "Tbl_DC" provenant d'une base nommée "BD_Sourc".
    Cette opération se déroule parfaitement directement sous access 2007 par la séquence - créer -requête-requête ajout - choix de la table Tbl_DC et de tous ses camps (Tbl_DC.*) - choix -autre base access - exécuter.
    Par contre le passage par SQL direct et l'éxecution du code issu de SQL Direct par Run.Sql INSER INTO ...... renvoie une erreur malgré le soin mis à respecter la syntaxe suggérée par l'aide et par les tutoriels que j'ai consultés.

    J'ajoute que, lorsque ce problème sera résolu je souhaite modifier automatique le contenu d'un champ nommé "ID_DC" (dans la base BD_Dest) pour éviter les doublons (Numéros de 1 à NNN).

    je vous remercie par avance de votre aide et de votre indulgence.
    R.O.

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 797
    Points : 14 863
    Points
    14 863
    Par défaut
    Bonsoir,
    ne sois pas désolé de demander de l'aide au forum c'est sa raison d'exister.
    Je ne doute pas un instant du grand soin que tu as mis pour respecter la syntaxe dans ton code SQL et nous t'en serons gré... Toujours est-il que tu es embêté par une erreur dont tu n'as pas jugé pertinent de nous préciser le numéro ni le libellé. Sans cette erreur et/ou sans le code incriminé tu penses bien qu'il nous est difficile de résoudre ton problème (seuls des dons divinatoires le pourraient) ...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut précisions sur le prbl
    Bonjour,

    Le code incriminé est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Cmd_FusionDC_Click()
    Dim NomB_FusionDC As String
    Dim Fich_fusion, Tabchampsfusion As String
        ' ajout des enregistrements d'une table provenant d'une base de saisie autre que celle en cours (Table DC) dans ce cas
        NomB_FusionDC = Form_Fo_Initiation.Txt_Nomfusion.Value ' identification de la base contenant la table qui devra être fusionnée avec celle de la base active
        Fich_fusion = "D:\FichAccess\access_temp\BD_ACG01a.accdb" ' identification de la base dans laquelle sera injectée le contenu de la table DC de la base actuelle
        Tabchampsfusion = "Tbl_DC.*" ' choix de tous les champs de la table Tbl_DC
            DoCmd.RunSQL "INSERT INTO [Tbl_DC] IN 'access_test\BD_ACG01a.accdb' SELECT Tabchampsfusion FROM [Tbl_DC] "
            MsgBox "Fusion réussie", vbExclamation
     
    End Sub
    Je n'ai d'abord pas réellement l'affichage d'une erreur mais une boite de dialogue s'ouvre me posant la question "Champs fusion ? " à laquelle je ne sais pas trop quoi répondre et puis, quelle que soit ma réponse (par exemple : *) un message d'erreur apparait : erreur 3346.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut suite de précision.
    Re... Bonjour,

    J'avais oublié dans la précision que je viens de donner . Ma question était libellée de façon générique pour la clarifier. En fait, en envoyant cette précision je me suis rendu compte que dans le libellé de la syntaxe la clause Where n'est peut-être pas indispensable et que c'est pour cela que la boite de dialogue s'ouvre.
    A voir !!!
    Mais cela n'empêche pas l'erreur 3346 .

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut Complément d'info
    Bonsoir, après plusieurs essais, je suis arrivé au code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Cmd_FusionDC_Click()
    Dim NomB_dest As String
     
     
        ' ajout des enregistrements d'une table provenant d'une base de saisie autre que celle en cours (Table DC) dans ce cas
       NomB_dest = Form_Fo_Initiation.Txt_Nomfusion.Value ' identification de la base dans laquelle sera injectée le contenu de la table DC de la base actuelle
     
     
     
            DoCmd.RunSQL "INSERT INTO 'Tbl_DC' IN 'NomB_dest' SELECT 'Tbl_DC.*' FROM 'Tbl_DC' "
     
            MsgBox "Fusion réussie", vbExclamation
     
    End Sub
    ce qui provoque une erreur : Erreur de syntaxe dans la requête. La clause de la requête est incomplète. (Erreur 3450)
    J'avoue ne pas comprendre ce qui se passe et désespère de trouver la solution..

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 797
    Points : 14 863
    Points
    14 863
    Par défaut
    Bonsoir,
    pour qu'Access comprenne ton instruction SQL il faut la bonne syntaxe, à savoir : les constantes entre " ", la base externe entre ' ' (qui devient un nom de fichier) et les variables balisées par des & & :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim NomB_FusionDC As String
    Dim Fich_fusion, Tabchampsfusion As String
        ' ajout des enregistrements d'une table provenant d'une base de saisie autre que celle en cours (Table DC) dans ce cas
        NomB_FusionDC = Form_Fo_Initiation.Txt_Nomfusion.Value ' identification de la base contenant la table qui devra être fusionnée avec celle de la base active
        Fich_fusion = "D:\FichAccess\access_temp\BD_ACG01a.accdb" ' identification de la base dans laquelle sera injectée le contenu de la table DC de la base actuelle
        Tabchampsfusion = "Tbl_DC.*" ' choix de tous les champs de la table Tbl_DC
            DoCmd.RunSQL "INSERT INTO [Tbl_DC] IN '" & Fich_fusion & "' SELECT " & Tabchampsfusion & " FROM [Tbl_DC]"
            MsgBox "Fusion réussie", vbExclamation
    tu as aussi la possibilité d'alimenter ta variable Fich_Fusion ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fich_fusion = "'D:\FichAccess\access_temp\BD_ACG01a.accdb'"

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 797
    Points : 14 863
    Points
    14 863
    Par défaut complément
    Avec ta dernière version cela donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim NomB_dest As String
     
     
        ' ajout des enregistrements d'une table provenant d'une base de saisie autre que celle en cours (Table DC) dans ce cas
       NomB_dest = Form_Fo_Initiation.Txt_Nomfusion.Value ' identification de la base dans laquelle sera injectée le contenu de la table DC de la base actuelle
     
     
     
            DoCmd.RunSQL "INSERT INTO Tbl_DC IN '" & NomB_dest & "' SELECT Tbl_DC.* FROM Tbl_DC"
     
     
     
    End Function

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 179
    Points
    179
    Par défaut code OK
    Merci à Tee Granbois pour sa solution. J'avoue que, dans ma doc je ne crois pas avoir vu d'infos sur la nécessité de présence des & (source principale : VBA pour les Nuls") mais peut-être n'ai-je pas exploré suffisamment le livre.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/12/2014, 17h36
  2. Réponses: 7
    Dernier message: 08/10/2012, 15h46
  3. [AC-2003] Problèmes sur lancement d'une requete creation de table depuis VBE
    Par Jeanpierre71 dans le forum VBA Access
    Réponses: 8
    Dernier message: 22/12/2011, 21h12
  4. Réponses: 3
    Dernier message: 17/08/2011, 12h12
  5. [MySQL] Faire une jointure entre deux tables qui ne sont pas dans la même base de données
    Par sandddy dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 03/04/2008, 14h18

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