Access pb de requete

Signaler
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013
-
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
-
Bonjour,
J'ai un ptit souci ma requete SQL J'ai une erreur de syntaxe dans ma classe FROM et je ne vois pas pourquoi. Si quelqu'un peut m'aider je le remercie d'avance


<ol>
<li>Private Sub Commande13_Click()
</li>
<li>    On Error GoTo Err_Commande13_Click
</li>
<li>
</li>
<li>    Dim m As String
</li>
<li>    Dim a As String
</li>
<li>    Dim nomTable As String
</li>
<li>    Dim nomClasseur As String
</li>
<li>    Dim SQL As String
</li>
<li>    Dim d As String
</li>
<li>     
</li>
<li>    m = Me!mois
</li>
<li>    a = Me!année
</li>
<li>    d = a & m
</li>
<li>   
</li>
<li>    DoCmd.SetWarnings False
</li>
<li>
</li>
<li nd="32">    nomClasseur = "D:\Eric\dossier_projets\TDB\PJPF\PJPF2007-" & a & m & ".xls"
</li>
<li>    nomTable = "TableTest" & a & m
</li>
<li>
</li>
<li nd="33">    DoCmd.TransferSpreadsheet acImport, , nomTable, nomClasseur, 0
</li>
<li>
</li>
<li>    'Définir la requête
</li>
<li>
</li>
<li nd="34">SQL = "INSERT INTO Test ( OPPO, MPE, MPF, MRE, MRF, M__, année) " & _
</li>
<li nd="35">    "SELECT OPPO, MPE, MPF, MRE, MRF, M__, " & d & " AS année " & _
</li>
<li>    "FROM" & name & _
</li>
<li nd="36">    "WHERE CBQD=""total"" AND MOIS=""total"" AND CMOP=""total"";"
</li>
<li>
</li>
<li>    'Exécuter la requête
</li>
<li>    CurrentDb.Execute SQL
</li>
<li>   
</li>
<li>Exit_Commande13_Click:
</li>
<li>    Exit Sub
</li>
<li>Err_Commande13_Click:
</li>
<li>    MsgBox Err.Description
</li>
<li>    Resume Exit_Commande13_Click
</li>
<li>End Sub</li>
</ol>

27 réponses

Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Salut,

Essaye cela :

<ol><li nd="34">Sql = "INSERT INTO Test ( OPPO, MPE, MPF, MRE, MRF, M__, année) " & _
    "SELECT OPPO, MPE, MPF, MRE, MRF, M__, " & d & " AS année " & _
    "FROM " & Name & "" & _
    "WHERE CBQD=""total"" AND MOIS=""total"" AND CMOP=""total"";"</li></ol>

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Peu être qu'en passant par un recordset, tu ne peux pas faire ceci.
Il te faut peu être faire une SELECT ET SEULEMENT APReS un INSERT INTO .... VALUES ....

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
168
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
28 juillet 2009
1
Comme indiqué par Darksidious, il faut penser à mettre un espace après le mot FROM sinon VB va concaténer FROM et le nom de la table.

Christophe
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

Merci ce code s'écécute mais plusieur fois je retrouve les meme données et je ne sais pas pourquoi voila le code complet et je ne sais pas s'ou ca vient
merci d'avance


Private Sub Commande13_Click()
    On Error GoTo Err_Commande13_Click
  
    Dim m As String
    Dim a As String
    Dim nomTable As String
    Dim nomClasseur As String
    Dim SQL As String
    Dim d As String
      
    m = Me!mois
    a = Me!année
    d = a & m
   
    DoCmd.SetWarnings False


    nomClasseur = "D:\Eric\dossier_projets\TDB\PJPF\PJPF2007-" & a & m & ".xls"
    nomTable = "TableTest" & a & m
  
    DoCmd.TransferSpreadsheet acImport, , nomTable, nomClasseur, -1


    'd = "2006_T3"
    'nomTable = "PJPF2006_T3"
   
    'Définir la requête
SQL = "INSERT INTO Test ( OPPO, MPE, MPF, MRE, MRF, M__, [année]) " & _
    "SELECT OPPO, MPE, MPF, MRE, MRF, M__, """ & d & """ AS [année] " & _
    "FROM " & nomTable & _
    " WHERE CBQD='total' AND MOIS='total' AND CMOP='total';"


    'Exécuter la requête
    CurrentDb.Execute SQL




Exit_Commande13_Click:
    Exit Sub
Err_Commande13_Click:
    MsgBox Err.Description
    Resume Exit_Commande13_Click
End Sub
Messages postés
168
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
28 juillet 2009
1
Tu fais un INSERT INTO aussi je me demande si tu n'as pas lancé ton code plusieurs fois; tout bêtement.

Si pas, est-ce que les données en double se trouvent déjà dans ta table de base ?   Si oui, soit il faut cleaner cette table-là soit faire une requête type SELECT DISTINCT

Christophe
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

J'ai trouvé le probleme cela se passe lros de mon import soit il faudrait que je vérifie l'existance de ma table soit j'écrase mon ancienne table mais je ne connais pas les méthode pour faire cela
Messages postés
168
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
28 juillet 2009
1
Supprimer ton ancienne table : une façon parmis d'autre; en SQL,  "DROP TABLE [" & nomTable & "]"

Christophe
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut,
étant donné que les champs des deux tables o,t le même alias, il doit savoir
de quels champ il s' agit :
Dans la partie SELECT ou tu énumère les champs à ajouter tu  prcèder
le nom du champ par le nom de la table (  & nomTable &  "'![LeChp])
Tu t' es compliqué la tache en mettant le nom de la table dans une variable.

<hr />® l l i n g , l' agité du bocal : 
   Etre une heure, une heure seulement..Rien qu' une heure,
   Vert, vert, vert et beau à la foooooooooooooooooooooooois. 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Sql = "INSERT INTO Test ( OPPO, MPE, MPF, MRE, MRF, M__, année) " & _
    "SELECT ['" & Name & "']![OPPO, MPE], ['" & Name & "']![MPE]...etc
    "FROM " & Name & "" & _

<hr /> 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Pardon
'" & Name & "']![OPPO],
Copier/Coller raté !

<hr />. 
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

est ce que c'est possible de voir s'il est existe au préalable?? quel est la méthode??
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
et avant de faire une nouvelle insertion tu fais
"DELETE * FROM " & nomTable & _
    " WHERE CBQD='total' AND MOIS='total' AND CMOP='total';"

<hr />. 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
NON NON ! c' est

"DELETE * FROM test" & _
    " WHERE CBQD='total' AND MOIS='total' AND CMOP='total';"
je vais me coucher

<hr />. 
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

oui mais si la table est éffectuer la premiere fois test ne comtien rien encore pour le moment ca va surment planter non??
Messages postés
173
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
30 janvier 2009

Salut,
non il n'y aura pas d'erreur si la table est vide. C'est juste qu'il ne trouvera rien et donc il n'effacera rien. C'est comme si tu fesais un Select et qu'il ne te retourne rien, il n'y a pas d'erreur pour autant.

 pseudoOM
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Pas du tout !
s' il ne trouve rien , c' est donc rie à supprimer...
il ne va rien faire et tu ne t' en aperceveras même pas.

<hr /> 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut pseudo
post croisé !
le "pas du tout" est adressé à dark.
.

<hr />. 
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

Sinon je peux pas juste vérifier l'existence de la table et éviter l'import si elle existe c'est pas plu simple??
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
alors au préalable tu fais :
"SELECT * FROM test" & _
    " WHERE CBQD='total' AND MOIS='total' AND CMOP='total';"

S' il te renvoie queques chose, c' es donc que ls enregistrements en question existent déjà,Sion tu procèdes à l' insertion

Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

En VBA c'est possible?? car la je devrais avoir recour a un recordset or j'aimerais évité.