[Déplacé .Net --> VBA] Problème requête: INSERT INTO.....SELECT DISTINCT [Résolu]

Messages postés
59
Date d'inscription
mardi 12 septembre 2006
Statut
Membre
Dernière intervention
21 août 2009
- - Dernière réponse : cs_Famas54
Messages postés
59
Date d'inscription
mardi 12 septembre 2006
Statut
Membre
Dernière intervention
21 août 2009
- 23 juil. 2009 à 09:18
Bonjour je souhaite recopier les données d'une table à l'autre, les deux tables ont exactement la même structure.

La première pieceintermediaire n'a pas de clé primaire car elle contient des données importées dynamiquement depuis un fichier Excel et de ce fait contient énormément de doublons (pas la possiblité de faire un Disctint en important les données depuis Excel).

Ce que je recherche à faire c'est de pouvoir copier les données de pieceintermediaire vers piece en enlevant les doublons dans la foulée (piece dispose bien d'une clé primaire)

ce serait quelque chose comme

sql5 = "INSERT INTO piece VALUES(SELECT DISTINCT libel_piece, date_saisie, date_bac, devise, code_fournisseur, type_facture, code_signataire, code_operation FROM pieceintermediaire)"
db.Execute sql5

dans l'idéé, mais je ne trouve pas la synthaxe qui fonctionne si vous avez des idées ou des pistes je suis preneur.

Merci
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
59
Date d'inscription
mardi 12 septembre 2006
Statut
Membre
Dernière intervention
21 août 2009
2
3
Merci
Voilà l'idée de ma démarche pour ceux qui voudraient savoir:

'SELECT DISTINCT * INTO TA_TABLE_TEMP FROM TA_TABLE"
'DELETE FROM TA_TABLE
'INSERT INTO TA_TABLE SELECT * FROM TA_TABLE_TEMP
'DROP TA_TABLE_TEMP

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 194 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Famas54
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Commenter la réponse de cs_loulou69
Messages postés
59
Date d'inscription
mardi 12 septembre 2006
Statut
Membre
Dernière intervention
21 août 2009
2
0
Merci
Je suis sur Access je n'utilise pas SQL SERVER.

Bon, j'ai finalement opté pour une autre solution, un algo avec des recordsets qui parcourent la table à la recherche de doublons, qui stockent les lignes uniques et qui supprime les autre, ce n'est pas encore opérationnel mais je posterai éventuellement le résultat.
Commenter la réponse de cs_Famas54
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
Salut
"Insert Into" n'a pas qu'une seule syntaxe d'insertion, heureusement :

SQL = "Insert Into maTable " & _
      "Select Distinct monChamp1 = XX.monChamp18, " & _
      "                monChamp2 = XX.monChamp4012 " & _
      "From monAutreTable XX "

Il faut juste veiller à ce que chaque champ apparaisse dans la liste.
Tu peux même ne pas préciser le champ de destination si tu respectes l'ordre avec lequel ils sont définis dans la table, exemple :
SQL = "Insert Into maTable " & _
      "Select Distinct XX.monChamp18, " & _
      "                XX.monChamp4012 " & _
      "From monAutreTable XX "

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
59
Date d'inscription
mardi 12 septembre 2006
Statut
Membre
Dernière intervention
21 août 2009
2
0
Merci
Dans ce cas:

sql6 = "Insert Into piece " & _
      "Select Distinct code_piece = pieceintermediaire.code_piece, " & _
      "libel_piece = pieceintermediaire.libel_piece " & _
      "date_saisie = pieceintermediaire.date_saisie " & _
      "date_bac = pieceintermediaire.date_bac " & _
"devise = pieceintermediaire.devise" & _
"code_fournisseur = pieceintermediaire.code_fournisseur " & _
"type_facture = pieceintermediaire.type_facture " & _
"code_signataire = pieceintermediaire.code_signataire " & _
"code_operation = pieceintermediaire.code_operation " & _
      "From pieceintermediaire "

db.Execute sql6


J'ai comme erreur "erreur d'execution 3352... No destination field name in Insert into statement"

Alors logiquement je précise donc les champs de destination:

sql6 = "Insert Into piece (code_piece, libel_piece, date_saisie, date_bac, devise, code_fournisseur, type_facture, code_signataire, code_operation)" & _
      "Select Distinct code_piece = pieceintermediaire.code_piece, " & _
      "libel_piece = pieceintermediaire.libel_piece, " & _
      "date_saisie = pieceintermediaire.date_saisie, " & _
      "date_bac = pieceintermediaire.date_bac, " & _
"devise = pieceintermediaire.devise, " & _
"code_fournisseur = pieceintermediaire.code_fournisseur, " & _
"type_facture = pieceintermediaire.type_facture, " & _
"code_signataire = pieceintermediaire.code_signataire, " & _
"code_operation = pieceintermediaire.code_operation, " & _
      "From pieceintermediaire "

db.Execute sql6


J'ai comme erreur "Syntx error in Insert into statemement
Je pense que c'est une erreur vraiment bête et je ne suis plus très loin mais je ne parvient pas à voir laquelle.
Commenter la réponse de cs_Famas54
Messages postés
59
Date d'inscription
mardi 12 septembre 2006
Statut
Membre
Dernière intervention
21 août 2009
2
0
Merci
Problème bouclé je suis finalement passé par une autre solution.
Commenter la réponse de cs_Famas54