Insérer le contenu d'une requete dans une table

Résolu
cs_monaco63 Messages postés 76 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 15 juin 2009 - 20 juil. 2007 à 11:18
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 20 juil. 2007 à 19:50
Bonjour,

Je souhaiterai savoir comment on peut insérer le contenu d'une requête dans une instruction INSERT INTO. Voici mon exemple




Private Function Exclusion_NIP()

Set DB1 = DBEngine(0)(0)
Set RS1 = DB1.OpenRecordset("essaiRequete")
Set RS2 = DB1.OpenRecordset("essaiRequete")

RS1.MoveFirst
RS2.MoveFirst

Do Until RS1.EOF
Do Until RS2.EOF
'Si les 2 NIP ne sont pas identiques Alors
If Trim(RS1.Fields("NIP")) <> Trim(RS2.Fields("NIP")) Then
SQL = "INSERT INTO tb_Resultat_1 ( nip, ngs ) " & _
"VALUES (.........)"

DoCmd.RunSQL SQL

'Ensuite on passe à l'enregistrement suivant
RS2.MoveNext

'Sinon Si les 2 NIP sont identiques Alors
ElseIf Trim(RS2.Fields("NIP")) = Trim(RS1.Fields("NIP")) Then
SQL = "INSERT INTO tb_SauvegardeTemporaire ( [NumOperationTransfert] ) " & _
"VALUES ('test')"

DoCmd.RunSQL SQL

'Ensuite on passe à l'enregistrement suivant
RS2

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
20 juil. 2007 à 19:50
Salut
Désolé, je ne sais pas comment tu as fait ton copier/coller, mais le format est étrange et ... incomplet.
Respecte bien la syntaxe SQL (qu'on répète à longueur de semaine) :
si le champ de ta table est de type :
- numérique : pas d'encadrement de la donnée
- chaine : encadrement avec '
- date : encadrement avec #
car NumOperationTransfert pourrait bien être numérique, non ?

SQL = "INSERT INTO tb_Resultat_1 ( nip, ngs ) " & _
              "VALUES (.........)"
A quoi correspondent tes ........... ?
C'est une abréviation ou c'est l'info que tu recherches ?
Si RS1 est le recordset source, les ......... pourraient ressembler à :
"... VALUES (" & RS1.nip & ", " & RS1.ngs & ")"
en supposant que nip et ngs soient numériques, sinon il faudra ajouter les encadrements

Ta question n'est pas assez claire : on ne sait pas d'où viennent les données
Attention aussi à respecter les min/maj dans les noms des champs : un coup tu écris NIP, en après nip

Si le but de ton code est de recopier les données manquantes dans une table, le mieux serait quand même de faire une requète de recherche pour chaque données de RS1 dans ta 2eme table et de faire un Insert si besoin
- remplir RS1 avec les données à insérer
- pour chaque donnée du RS1, rechercher par un Select la présence de cette donnée dans la 2eme table (avec RS2)
- si RS2.RecordCount = 0, alors insertion, sinon, on ne fait rien
mais le but est de lancer RS2 à chaque donnée de RS1 (et pas de faire la même requète au début)

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'accroit quand on
3
Rejoignez-nous