Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 13/10/2011, 10h20   #1
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
Par défaut Problème INSERT INTO

Bonjour,

J'ai un formulaire de modification avec plusieurs liste déroulante.
On choisi une infrastructure, une famille et un projet.
Ca m'amène sur un autre formulaire ou je peux modifier les données concernant le projet. Pour l'instant tout va bien.
Sur se form j'ai un bouton "modification" qui doit normalement récupérer les données d'une requête (ma requête fonction parfaitement) et les insérer dans une table ("Tbl_Modif_Data") afin d'y opérer les modifications.
Mon problème dois venir de mon code car il enregistre qu'une seule ligne dans ma table (au lieu de 4 dans mes données test)

Voici mon code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Private Sub Commande47_Click()
 
Dim n As String, nn As String
Dim Db As DAO.Database
Dim myrst As DAO.Recordset
Set Db = CurrentDb
 
Set a = CurrentDb.QueryDefs("Rqt_Modif_Datas")
 
 
 
DoCmd.SetWarnings (False)
 
sSQL = "Delete * FROM Tbl_Modif_Data"
DoCmd.RunSQL (sSQL)
sSQL = "Delete * FROM Tbl_Modif_Data_2"
DoCmd.RunSQL (sSQL)
 
                        Set myrst = Db.OpenRecordset("Rqt_Modif_Datas")
 
                        'si le recordset n'est pas vide
                         If Not myrst.EOF Then
                             ' tant qu'il n'est pas vide
                             Do While Not myrst.EOF
                             nn = "x"
                             vv = "x"
                                    For Each f In a.Fields
                                    n = f.Name & 2
                                    v = myrst.Fields("[" & f.Name & "]").Value
 
                                    If nn = "x" Then
                                    nn = "[" & n & "]"
                                    Else
                                    nn = nn & ", " & "[" & n & "]"
                                    End If
 
                                    If vv = "x" Then
                                    vv = "'" & v & "'"
                                    Else
                                    vv = vv & ", " & "'" & v & "'"
                                    End If
 
                                    Next
 
                                    sSQL = "INSERT INTO [Tbl_Modif_Data] (" & nn & ") VALUES (" & vv & ")"
                                    DoCmd.RunSQL (sSQL)
                                    sSQL = "INSERT INTO [Tbl_Modif_Data_2] (" & nn & ") VALUES (" & vv & ")"
                                    DoCmd.RunSQL (sSQL)
 
                                myrst.MoveNext
                             Loop
                          End If
 
 
 
DoCmd.SetWarnings (True)
DoCmd.OpenForm ("Frm_Selection_Modif")
DoCmd.Maximize
End Sub
Ma table comporte les mêmes champs que ma requête avec les mêmes noms mais qui finissent par 2.

Savez vous pourquoi il ne m'enregistre pas les autres lignes alors que l'orsque je fais un msgbox il me l'affiche bien. (Enfin je pense car comme il y a trop de champs je ne vois pas la fin de ma variable sSQL.
Est-ce à cause du grand nombre de variable qu'il n'enregistre pas les données?

Merci
rob1son76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 10h37   #2
Membre à l'essai
 
Inscription : février 2011
Messages : 76
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 76
Points : 20
Points : 20
salut,

Citation:
Envoyé par rob1son76 Voir le message
Bonjour,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub Commande47_Click()
 
                        Set myrst = Db.OpenRecordset("Rqt_Modif_Datas")
 
                        'si le recordset n'est pas vide
                         If Not myrst.EOF Then
                             ' tant qu'il n'est pas vide
                             Do While Not myrst.EOF
                             nn = "x"
                             vv = "x"
                                    For Each f In a.Fields
                                    n = f.Name & 2
                                    v = myrst.Fields("[" & f.Name & "]").Value
 
                                    If nn = "x" Then
                                    nn = "[" & n & "]"
                                    Else
                                    nn = nn & ", " & "[" & n & "]"
                                    End If
 
                                    If vv = "x" Then
                                    vv = "'" & v & "'"
                                    Else
                                    vv = vv & ", " & "'" & v & "'"
                                    End If
 
                                    Next
 
                                    sSQL = "INSERT INTO [Tbl_Modif_Data] (" & nn & ") VALUES (" & vv & ")"
                                    DoCmd.RunSQL (sSQL)
                                    sSQL = "INSERT INTO [Tbl_Modif_Data_2] (" & nn & ") VALUES (" & vv & ")"
                                    DoCmd.RunSQL (sSQL)
 
                                myrst.MoveNext
                             Loop
                          End If
Je me trompe peut etre, mais tu ne te place jamais sur le premier enrregistrement.
xargin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 10h55   #3
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
Si si je suis bien sur le premier enregistrement.
D'ailleurs c'est le seul qu'il enregistre.
Mais j'ai compris pourquoi en testant ma requête champs par champs.
J'avais oublié dans ma table de mettre le champs "ID_Infra" non indexé cad avec doublons autorisé.
C'est pour ca qu'il m'enregistrait que la première ligne.
rob1son76 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 04h57.


 
 
 
 
Partenaires

Hébergement Web