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 20/03/2011, 07h59   #1
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 2
Points : 2
Par défaut Insertion multiple dans access 2007

Bonjour.
Il y a peu de temps, je posais une question et, suite aux conseils de Richard_35, j'ai recommencé ma base de données pour la faire en deux tables. C'est chose faite, et j'y vois plus clair. Maintenant j'en suis au même point qu'avant. Mais ma demande a changé. Je dois faire des insertions multiples dans la deuxième table, mais sans prendre les données dans la première. Après de multiples recherches, j'ai constaté que c'était impossible. Mais n'y a-t-il vraiment aucun moyen ? Une astuce ? Peut-être une boucle ?
burolec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 08h11   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 613
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 613
Points : 30 968
Points : 30 968
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Que veux-tu dire par insertion multiples ?

Si tu dois insérer plusieurs lignes identiques dans une même table, c'est qu'il y a un petit soucis.

Merci donc de détailler avec un exemple.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 09h03   #3
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 2
Points : 2
Oh, oui, c'est vrai, j'ai pas précisé .
Donc j'ai une table avec ID, DD, DF.
ID est numérique, DD et DF sont des dates.
Pour insérer une seule ligne, ça va :
Code sql :
1
2
3
 
INSERT INTO TABLE ( ID, DD, DF )
VALUES (id, date, date2);

id, date et date2, je les entre au moment de l'exécution de la requête.
L'idée serait de pouvoir rentrer plusieurs id et une seule fois date et date2, pour insérer des lignes qui auront donc des ID différents et les mêmes DD et DF. Tout ce que j'ai essayé a raté. Et j'ai l'impression que ce que je recherche, c'est le graal dans access. Une solution ? Je veux dire, une solution autre que : tourne-toi vers Oracle ?
burolec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 09h20   #4
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 613
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 613
Points : 30 968
Points : 30 968
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Re

OK, un petit exemple à adapter avec un boucle

Code :
1
2
3
4
5
6
7
8
9
Public Sub AjoutLigne()
    ' déclaration
    Dim i As Integer
 
    ' affectation
    For i = 1 To 20
        DoCmd.RunSQL "INSERT INTO TABLE ( ID, DD, DF ) VALUES (" & i & ", date, date2);"
    Next i
End Sub
Bien sûr ce n'est qu'un exemple, il faut savoir d'où viennent tes ID.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 09h26   #5
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 2
Points : 2
Merci, je vais essayer... et essayer de comprendre en le voyant fonctionner. Je teste et je reviens dire ce qu'il en est. Encore merci.
burolec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 09h28   #6
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 613
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 613
Points : 30 968
Points : 30 968
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Re

Comme je l'ai dit, ce n'est qu'un exemple.

Il faut également sortir Date et Date2 comme le i, car à mon avis ce sont des variables.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 09h45   #7
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 2
Points : 2
Après une petite adaptation, ça fonctionne bien :


Code :
1
2
3
4
5
6
7
8
9
10
Public Sub AjoutLigne()
    ' déclaration
    Dim i As Integer
 
 
    ' affectation
    For i = 1 To 10
        DoCmd.RunSQL "INSERT INTO Table ( ID, DD, DF ) VALUES (id , date, date2);"
    Next i
End Sub
Comme ceci, je peux choisir mes ID à entrer dans Table. Il ne me reste qu'à trouver le moyen de n'entrer qu'une seule fois date et date2. Peut-être en les déclarant comme variable Date et en leur affectant une valeur à l'avance ? J'essaye de comprendre au fur et à mesure, j'apprends comme ça. Tiens, je vais essayer.

Edit : ça ne fonctionne pas
Je ne suis pas doué. Mais peut-être que je dois les entrer dans une autre requête sql, et pas dans le module. Par exemple une table temporaire que j'efface sitôt le module exécuté.

Edit2 : Ne fonctionne toujours pas, mais je ne désespère pas. En fait, date et date2 doivent être des valeurs (dates) fixes.
burolec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 11h25   #8
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 2
Points : 2
Ca y est, j'ai réussi !
Je viens poster pour que tout le monde sache comment faire une insertion multiple dans une table access (que j'appelerai ici table_cible).
Cette table_cible comporte 3 colonnes ID (numérique), DD et DF (date)

D'abord, j'ai créé deux tables tmp et tmp2 qui ne sont pas temporaires, mais leurs données oui. Dans tmp, il y a une colonne ID (numérique), dans tmp2, il y a deux colonnes D1 et D2 (dates).

Ensuite, grâce à Philippe JOCHMANS qui m'a été d'une aide précieuse et indispensable, j'ai créé un module qui va insérer autant de ID que je veux dans tmp :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Sub AjoutLigne()
    ' déclaration
    Dim i As Integer
    
    ' affectation
    
    For i = 1 To 4
   ' Ici, j'ai mis 4 pour mon test, il me suffit de changer ce nombre à ma convenance

        
        DoCmd.RunSQL "INSERT INTO tmp ( ID ) VALUES (id);"
    Next i
    
End Sub
Puis j'ai créé une petite commande en SQL qui insère deux dates dans tmp2 après me les avoir demandé :

Code sql :
1
2
INSERT INTO tmp2 ( D1, D2 )
VALUES (date, date2)

Et enfin, j'ai créé une autre commande SQL qui insère les données de tmp et tmp2 dans table_cible :

Code sql :
1
2
3
INSERT INTO table_cible ( ID, DD, DF )
SELECT ID, D1, D2
FROM tmp, tmp2

Et là, miracle, dans ma table_cible apparaissent les différents ID que j'ai rentré, et chaque ID a les mêmes valeurs pour DD et DF.

Bien sûr, je n'oublie pas qu'il faut effacer les données de tmp et tmp2 avec un DELETE FROM.
Il ne me reste plus qu'à créer une macro pour me faciliter la vie, et le tour est joué.

Merci mille fois Philippe JOCHMANS pour ton aide, je n'y serais jamais arrivé sans toi.
Résolu donc.

Edit = Merci également à Richard_35 sans qui je me débattrais toujours dans une base de données avec une table, très compliquée et pas pro du tout.
burolec 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 20h11.


 
 
 
 
Partenaires

Hébergement Web