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 30/01/2012, 16h08   #1
Invité de passage
 
Homme Azo Azomix
Étudiant
Inscription : janvier 2012
Messages : 10
Détails du profil
Informations personnelles :
Nom : Homme Azo Azomix
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 10
Points : 1
Points : 1
Par défaut Requete INSERT INTO qui écrase mes enregistrements

Bonjour,

Je fait actuellement une base de donnée de gestion de stock et je créée des factures.

Donc pour chaque bon de reception, j ai un numéros de facture ( N°facture_livraison) et plusieurs ligne de facture avec les différents type de produit commandé ( N°ligne_facture_livraison )

Je récupère toute mes valeurs sous VBA et ensuite je fait plusieurs requete INSERT INTO pour ajouter chaque ligne de facture. Le soucis sais que j'écrase ç chaque fois le même enregistrement, ce qui fait que lorsque j'ai 4 produit commandé, seul le dernier ce stock dans ma table.

Voici la partie de mon code pour enregistrer deux produits :

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
    date_reception = Date_facture_livraison.Value
     num_facture = num_facture.Value + 1
 
 
 
 
    Set db = CurrentDb
 
    If nouveau_stock1 <> 0 Then
 
 
        StrSql1 = "UPDATE Produit Set [Quantite_stock]='" & nouveau_stock1 & "' WHERE [désignation]='" & produit1.Value & "'"
        Set Req1 = CurrentDb.CreateQueryDef("", StrSql1)
        Req1.Execute dbFailOnError
 
        sSQL6 = "Select N°Produit From  Produit WHERE Produit.désignation='" & produit1.Value & "';"
        Set rst6 = CurrentDb.OpenRecordset(sSQL6, dbOpenForwardOnly, dbReadOnly)
        num_produit = rst6![N°produit]
        rst6.Close
 
        num_ligne_facture = num_ligne.Value + 1
 
 
        If nouveau_casse1 <> 0 Then
 
 
                sSQL7 = "Select N°Anomalie From  anomalie WHERE anomalie.type_anomalie='casse';"
                Set rst7 = CurrentDb.OpenRecordset(sSQL7, dbOpenForwardOnly, dbReadOnly)
                num_casse = rst7![N°Anomalie]
                rst7.Close
 
 
 
                stock_casse1 = DLookup("[stock_anomalie]", "Stock_anomalie", "[N°Produit] = " & num_produit & " AND [N°Anomalie] =  " & num_casse & "")
 
                stock_casse1 = stock_casse1 + quantite1.Value
 
              StrSql2 = "UPDATE Stock_anomalie Set [stock_anomalie]='" & stock_casse1 & " ' WHERE [N°Produit] = " & num_produit & " AND  [N°Anomalie] = " & num_casse & ""
              Set Req2 = CurrentDb.CreateQueryDef("", StrSql2)
              Req2.Execute dbFailOnError
        End If
 
        If nouveau_vol1 <> 0 Then
 
                sSQL7 = "Select N°Anomalie From  anomalie WHERE anomalie.type_anomalie='vol';"
                Set rst7 = CurrentDb.OpenRecordset(sSQL7, dbOpenForwardOnly, dbReadOnly)
                num_casse = rst7![N°Anomalie]
                rst7.Close
 
                stock_vol1 = DLookup("[stock_anomalie]", "Stock_anomalie", "[N°Produit] = " & num_produit & " AND [N°Anomalie] =  " & num_casse & "")
 
                stock_vol1 = stock_casse1 + quantite1.Value
 
              StrSql2 = "UPDATE Stock_anomalie Set [stock_anomalie]='" & stock_vol1 & " ' WHERE [N°Produit] = " & num_produit & " AND  [N°Anomalie] = " & num_casse & ""
              Set Req2 = CurrentDb.CreateQueryDef("", StrSql2)
              Req2.Execute dbFailOnError
 
        End If
 
        If nouveau_perte1 <> 0 Then
 
 
                sSQL7 = "Select N°Anomalie From  anomalie WHERE anomalie.type_anomalie='perte';"
                Set rst7 = CurrentDb.OpenRecordset(sSQL7, dbOpenForwardOnly, dbReadOnly)
                num_casse = rst7![N°Anomalie]
                rst7.Close
 
                stock_perte1 = DLookup("[stock_anomalie]", "Stock_anomalie", "[N°Produit] = " & num_produit & " AND [N°Anomalie] =  " & num_casse & "")
 
                stock_perte1 = stock_perte1 + quantite1.Value
 
              StrSql2 = "UPDATE Stock_anomalie Set [stock_anomalie]='" & stock_perte1 & " ' WHERE [N°Produit] = " & num_produit & " AND  [N°Anomalie] = " & num_casse & ""
 
              Set Req2 = CurrentDb.CreateQueryDef("", StrSql2)
              Req2.Execute dbFailOnError
 
        End If
 
        MsgBox num_facture
        MsgBox num_ligne_facture
 
 
        Set db = CurrentDb
        db.Execute " INSERT INTO  Ligne_de_facture_livraison ( N°ligne_facture_livraison, N°Produit, N°facture_livraison, Quantite_produit, Quantite_casse, Quantite_vol, Quantite_perte ) VALUES (" & num_ligne_facture & ", " & num_produit & "," & num_facture & "," & nouveau_stock1 & "," & nouveau_casse1 & "," & nouveau_vol1 & "," & nouveau_perte1 & ");"
        Debug.Print "Records affected = " & db.RecordsAffected
        db.Close
 
 
 
    End If
 
    If nouveau_stock2 <> 0 Then
 
 
 
        StrSql1 = "UPDATE Produit Set [Quantite_stock]='" & nouveau_stock2 & "' WHERE [désignation]='" & produit2.Value & "'"
        Set Req1 = CurrentDb.CreateQueryDef("", StrSql1)
        Req1.Execute dbFailOnError
 
        sSQL6 = "Select N°Produit From  Produit WHERE Produit.désignation='" & produit2.Value & "';"
        Set rst6 = CurrentDb.OpenRecordset(sSQL6, dbOpenForwardOnly, dbReadOnly)
        num_produit = rst6![N°produit]
        rst6.Close
 
        N°produit = num_produit
 
        num_ligne_facture = num_ligne.Value + 2
 
 
        If nouveau_casse2 <> 0 Then
 
 
                sSQL7 = "Select N°Anomalie From  anomalie WHERE anomalie.type_anomalie='casse';"
                Set rst7 = CurrentDb.OpenRecordset(sSQL7, dbOpenForwardOnly, dbReadOnly)
                num_casse = rst7![N°Anomalie]
                rst7.Close
 
                stock_casse2 = DLookup("[stock_anomalie]", "Stock_anomalie", "[N°Produit] = " & num_produit & " AND [N°Anomalie] =  " & num_casse & "")
 
                stock_casse2 = stock_casse2 + quantite2.Value
 
              StrSql2 = "UPDATE Stock_anomalie Set [stock_anomalie]='" & stock_casse2 & " ' WHERE [N°Produit] = " & num_produit & " AND  [N°Anomalie] = " & num_casse & ""
              Set Req2 = CurrentDb.CreateQueryDef("", StrSql2)
              Req2.Execute dbFailOnError
 
        End If
 
        If nouveau_vol2 <> 0 Then
 
                sSQL7 = "Select N°Anomalie From  anomalie WHERE anomalie.type_anomalie='vol';"
                Set rst7 = CurrentDb.OpenRecordset(sSQL7, dbOpenForwardOnly, dbReadOnly)
                num_casse = rst7![N°Anomalie]
                rst7.Close
 
                stock_vol2 = DLookup("[stock_anomalie]", "Stock_anomalie", "[N°Produit] = " & num_produit & " AND [N°Anomalie] =  " & num_casse & "")
 
                stock_vol2 = stock_vol2 + quantite2.Value
 
              StrSql2 = "UPDATE Stock_anomalie Set [stock_anomalie]='" & stock_vol2 & " ' WHERE [N°Produit] = " & num_produit & " AND  [N°Anomalie] = " & num_casse & ""
              Set Req2 = CurrentDb.CreateQueryDef("", StrSql2)
              Req2.Execute dbFailOnError
 
        End If
 
        If nouveau_perte2 <> 0 Then
 
 
                sSQL7 = "Select N°Anomalie From  anomalie WHERE anomalie.type_anomalie='perte';"
                Set rst7 = CurrentDb.OpenRecordset(sSQL7, dbOpenForwardOnly, dbReadOnly)
                num_casse = rst7![N°Anomalie]
                rst7.Close
 
                stock_perte2 = DLookup("[stock_anomalie]", "Stock_anomalie", "[N°Produit] = " & num_produit & " AND [N°Anomalie] =  " & num_casse & "")
 
                stock_perte2 = stock_perte2 + quantite2.Value
 
              StrSql2 = "UPDATE Stock_anomalie Set [stock_anomalie]='" & stock_perte2 & " ' WHERE [N°Produit] = " & num_produit & " AND  [N°Anomalie] = " & num_casse & ""
 
              Set Req2 = CurrentDb.CreateQueryDef("", StrSql2)
              Req2.Execute dbFailOnError
 
        End If
 
        MsgBox num_ligne_facture
 
        Set db = CurrentDb
        db.Execute " INSERT INTO  ligne_de_facture_livraison (N°ligne_facture_livraison, N°Produit, N°facture_livraison, Quantite_produit, Quantite_casse, Quantite_vol, Quantite_perte ) VALUES (" & num_ligne_facture & ", " & num_produit & "," & num_facture & "," & nouveau_stock2 & "," & nouveau_casse2 & "," & nouveau_vol2 & "," & nouveau_perte2 & ");"
         Debug.Print "Records affected = " & db.RecordsAffected
        db.Close
 
 
    End If
Pourtant je récupère dans une variable, le plus grand N°ligne_facture_livraison à l'aide d'une requete dans mon formulaire et ensuite je l'incrémente de 1, 2 ou 3, etc suivant le nombre de ligne de produit que j'ai commandé.

J’espère que vous allez pouvoir m'aider.
Azomix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 16h22   #2
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 805
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 805
Points : 3 003
Points : 3 003
Bonjour,

Je n'ai pas regardé en détail ton code, mais il faut savoir qu'une requête INSERT INTO créé un nouvelle table. Donc si cette table existe déjà, elle est remplacée.
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 17h36   #3
Invité de passage
 
Homme Azo Azomix
Étudiant
Inscription : janvier 2012
Messages : 10
Détails du profil
Informations personnelles :
Nom : Homme Azo Azomix
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 10
Points : 1
Points : 1
Une requête insert into , permet d'insérer un nouvelle enregistrement dans une table non ? Il me semble pas qu'elle créé une nouvelle table.

Je me trompe ?
Azomix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 18h24   #4
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 874
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 874
Points : 10 740
Points : 10 740
Envoyer un message via MSN à jpcheck
Hello,

attention de ne pas confondre INSERT ... INTO et SELECT ... INTO
La première insérant des données dans une table, la seconde créant/écrasant une table pour y mettre un résultat de requête.

D'autre part, tu sembles t'emmêler les pinceaux et faire beaucoup de lignes de code pour pas grand chose

Ton num_ligne par exemple n'est pas renseigné dans le code fourni, si ?

En ayant une approche plus carrée, tu te simplifieras la tache
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 19h15   #5
Invité de passage
 
Homme Azo Azomix
Étudiant
Inscription : janvier 2012
Messages : 10
Détails du profil
Informations personnelles :
Nom : Homme Azo Azomix
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 10
Points : 1
Points : 1
J'ai tester avec la requete de ce type :

Code :
1
2
3
4
        Set db = CurrentDb
        db.Execute " INSERT INTO  ligne_de_facture_livraison (N°Produit, N°facture_livraison, Quantite_produit, Quantite_casse, Quantite_vol, Quantite_perte ) VALUES (" & num_produit & "," & num_facture & "," & nouveau_stock5 & "," & nouveau_casse5 & "," & nouveau_vol5 & "," & nouveau_perte5 & ");"
        Debug.Print "Records affected = " & db.RecordsAffected
        db.Close
La requête ne m'insère aucune donnée. En enlevant le N°ligne_facture_livraison, cela me semblait plus logique car comme il est en numéros auto dans mes tables , normalement des que je lance un INSERT INTO, il devrait s'enregistrer et passer à la ligne suivante automatiquement non ?

Vraiment besoin d'une piste

merci de ton aide
Azomix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h56.


 
 
 
 
Partenaires

Hébergement Web