Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2012, 11h30   #1
Invité de passage
 
Inscription : mars 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 19
Points : 4
Points : 4
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.
OR34a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 00h14   #2
Membre éclairé
 
Avatar de tee_grandbois
 
Inscription : novembre 2004
Messages : 216
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 216
Points : 321
Points : 321
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) ...
tee_grandbois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 08h14   #3
Invité de passage
 
Inscription : mars 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 19
Points : 4
Points : 4
Par défaut précisions sur le prbl

Bonjour,

Le code incriminé est le suivant :
Code :
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.
OR34a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 08h31   #4
Invité de passage
 
Inscription : mars 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 19
Points : 4
Points : 4
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 .
OR34a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 20h36   #5
Invité de passage
 
Inscription : mars 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 19
Points : 4
Points : 4
Par défaut Complément d'info

Bonsoir, après plusieurs essais, je suis arrivé au code suivant :
Code :
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..
OR34a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 01h05   #6
Membre éclairé
 
Avatar de tee_grandbois
 
Inscription : novembre 2004
Messages : 216
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 216
Points : 321
Points : 321
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 :
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 :
Fich_fusion = "'D:\FichAccess\access_temp\BD_ACG01a.accdb'"
tee_grandbois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 01h09   #7
Membre éclairé
 
Avatar de tee_grandbois
 
Inscription : novembre 2004
Messages : 216
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 216
Points : 321
Points : 321
Par défaut complément

Avec ta dernière version cela donne ceci :
Code :
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
tee_grandbois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 08h16   #8
Invité de passage
 
Inscription : mars 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 19
Points : 4
Points : 4
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.
OR34a est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h32.


 
 
 
 
Partenaires

Hébergement Web