Pb "INSERT INTO xxx SELECT yyy"

jpvba Messages postés 1 Date d'inscription lundi 15 mai 2006 Statut Membre Dernière intervention 15 mai 2006 - 15 mai 2006 à 21:09
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 21 mai 2006 à 18:27
<!-- INBOX:MESSAGE:CONTENT -->
Bonjour,

Je suis nouveau sur ce forum et n'ai pas une grande expérience de VBA/ACCESS/SQL.
Voici mon problème sous WinXP/Office 2003 :

Je veux ajouter des données d'une table dans une autre table par une requête SQL :


<!-- Converted from text/rtf format -->

sqlq = "INSERT INTO " & tableName & " (" & listChamps & ")" & _


" SELECT " & listChampsTmp & _


" FROM " & _


tbltmp & " LEFT JOIN " & _


tableName & " ON " & _


tbltmp & ".Numéro = " & _


tableName & ".Numéro WHERE ((([" & _


tableName & "].[Numéro])Is Null));"



DoEvents


DoCmd.SetWarnings False


DoCmd.RunSQL sqlq


DoEvents


DoCmd.SetWarnings True

Les listes des champs sont identiques, la structure des 2 tables est identique et aucun champ ne peut être NULL.
Le problème est que la requête s'exécute de manière incomplête et signale des erreurs de validation de rêgles si SetWarning = True.
Si certains champs peuvent être Null, alors l'ajout fonctionne mais avec des champs Null (un des champs est de type Date).

Ma solution, pour l'instant, est de mettre la sélection dans un recordset, de vérifier/attendre que chaque valeur est non nulle (ce qui peut prendre plus de trois secondes) et d'ajouter les valeurs des recordset à la table de destination.

Quelle et la raison de ce problème ? Multi-threading ?
mode asynchrone par défaut ?

Merci de m'apporter une réponse à ce problème.

1 réponse

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 mai 2006 à 18:27
Salut
Pas très habitué aux Join, mais déjà, un coup tu mets des crochets [ et ], un coup t'en mets pas : Va falloir choisir !
Mets-en partout, même sur les noms des tables car tu n'es pas à l'abri d'avoir un nom de table qui comporte des espaces ou des acents (...)
En mode Debug, que donne la variable sqlq avant d'être exécutée ? ça c'est important car tu verras mieux les éventuelles erreurs.

- Il faut mettre des [ et ] aux noms de tous les champs contenus dans listChamps et listChampsTmp
- et ajouter des [ et ] dans la syntaxe fixe, virer les parenthèses qui ne servent à rien, et bien mettre des espaces devant et derrière les mots clés comme 'Is Null" :

sqlq = "INSERT INTO [" & tableName & "] (" & listChamps & ")" & _
                                    " SELECT " & listChampsTmp & _
                                    " FROM " & _ 
                                    "[" & tbltmp & "] LEFT JOIN " & _
                                    "[" & tableName & "] ON " & _ 
                                    "[" & tbltmp & "].[Numéro] = " & _ 
                                    "[" & tableName & "].[Numéro] WHERE " & _ 
                                    "[" & tableName & "].[Numéro]) Is Null;"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
Rejoignez-nous