Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Code vba : une requête ajout en sql qui n'ajoute rien

4 réponses
Avatar
Gundt
bonsoir à tous,

Je voudrais ajouter par une requête ajout en sql (pour l'ajouter dans le
code) les lignes des BL temp dans la table LIGNES FACTURES.

La requête sql fonctionne bien quand je la lance manuellement depuis le
menu requête.
Je l'ai converti en sql puis ramené dans le code.
Il n'y a pas de message d'erreur mais elle n'ajoute rien alors que si je
la lance manuellement : elle me crée bien les 7 enregistrements existants.

Voici le code sql :
Dim sql1 As String
...
sql1 = "PARAMETERS [Forms]![Choix_fact_perso]![Mois] Byte,
[Forms]![Choix_fact_perso]![Année] Short; INSERT INTO [LIGNES FACTURES]
( Numfacture, [Code article], Désignation, [Prix unitaire], [Code
unité], Quantité, [Total ligne], DateBL, [N°BL] ) SELECT DISTINCTROW
FACTURES.Numfacture, [LIGNES BL TEMP].[Code article], [LIGNES BL
TEMP].Désignation, [LIGNES BL TEMP].[Prix unitaire], [LIGNES BL
TEMP].[Code unité], [LIGNES BL TEMP].Quantité, [LIGNES BL TEMP].[Total
ligne], BL.DateSortie, BL.[N°BL] FROM BL INNER JOIN ((((CLIENTS INNER
JOIN FACTURES ON CLIENTS.Codeclient = FACTURES.CodeClient) INNER JOIN
([BL TEMP] INNER JOIN [LIGNES BL TEMP] ON [BL TEMP].[N°BL_temp] =
[LIGNES BL TEMP].[N°BL_temp]) ON FACTURES.CodeClient = [BL
TEMP].CodeClient) INNER JOIN ETABLISSEMENTS ON (ETABLISSEMENTS.Codetab =
CLIENTS.Codetab) AND (FACTURES.Codetab = ETABLISSEMENTS.Codetab)) INNER
JOIN SERVICES ON FACTURES.Codeservice = SERVICES.Codeservice) ON
BL.[N°BL] = [BL TEMP].[N°BL_temp]" _
& "WHERE
(((Format([DateSortie_temp],'mm'))=[Forms]![Choix_fact_perso]![Mois])
AND
((Format([DateSortie_temp],'yyyy'))=[Forms]![Choix_fact_perso]![Année])); "

Merci d'avance.

Gundt

4 réponses

Avatar
Eric
Bonsoir,

Il faut que tu sortes tes variables [Forms]![Choix_fact_perso]![Mois] et
[Forms]![Choix_fact_perso]![Année] de la chaine SQL à partir de la
clause Where.

sql1=".................................................."
& " WHERE Format([DateSortie_temp],'mm')=" &
[Forms]![Choix_fact_perso]![Mois] & " AND
Format([DateSortie_temp],'yyyy')=" & [Forms]![Choix_fact_perso]![Année]
& "; "

De plus, ta clause Parameters n'est plus utile, tu peux la supprimer
puisque tu crées par concaténation ton sql. Donc tu enleves de
Parameters jusqu'au 1er point-virgule.

PS: il manquait un espace avant le Where.

bonsoir à tous,

Je voudrais ajouter par une requête ajout en sql (pour l'ajouter dans le
code) les lignes des BL temp dans la table LIGNES FACTURES.

La requête sql fonctionne bien quand je la lance manuellement depuis le
menu requête.
Je l'ai converti en sql puis ramené dans le code.
Il n'y a pas de message d'erreur mais elle n'ajoute rien alors que si je
la lance manuellement : elle me crée bien les 7 enregistrements existants.

Voici le code sql :
Dim sql1 As String
...
sql1 = "PARAMETERS [Forms]![Choix_fact_perso]![Mois] Byte,
[Forms]![Choix_fact_perso]![Année] Short; INSERT INTO [LIGNES FACTURES]
( Numfacture, [Code article], Désignation, [Prix unitaire], [Code
unité], Quantité, [Total ligne], DateBL, [N°BL] ) SELECT DISTINCTROW
FACTURES.Numfacture, [LIGNES BL TEMP].[Code article], [LIGNES BL
TEMP].Désignation, [LIGNES BL TEMP].[Prix unitaire], [LIGNES BL
TEMP].[Code unité], [LIGNES BL TEMP].Quantité, [LIGNES BL TEMP].[Total
ligne], BL.DateSortie, BL.[N°BL] FROM BL INNER JOIN ((((CLIENTS INNER
JOIN FACTURES ON CLIENTS.Codeclient = FACTURES.CodeClient) INNER JOIN
([BL TEMP] INNER JOIN [LIGNES BL TEMP] ON [BL TEMP].[N°BL_temp] =
[LIGNES BL TEMP].[N°BL_temp]) ON FACTURES.CodeClient = [BL
TEMP].CodeClient) INNER JOIN ETABLISSEMENTS ON (ETABLISSEMENTS.Codetab =
CLIENTS.Codetab) AND (FACTURES.Codetab = ETABLISSEMENTS.Codetab)) INNER
JOIN SERVICES ON FACTURES.Codeservice = SERVICES.Codeservice) ON
BL.[N°BL] = [BL TEMP].[N°BL_temp]" _
& "WHERE
(((Format([DateSortie_temp],'mm'))=[Forms]![Choix_fact_perso]![Mois])
AND
((Format([DateSortie_temp],'yyyy'))=[Forms]![Choix_fact_perso]![Année])); "

Merci d'avance.

Gundt



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Jessy Sempere
Bonsoir

En théorie, il n'est pas forcément utile de sortir les Forms!... de la
variable string contenant le SQL, si le formulaire est ouvert, ça ne doit
pas poser de problème...

Par contre, effectivement les paramètres ne sont pas utiles, voilà le sql
que je ferais (avec quelques retour à la ligne histoire d'y voir plus
clair...) :

Dim sql1 As String
sql1 = "INSERT INTO [LIGNES FACTURES] " _
& "( Numfacture, [Code article], Désignation, [Prix unitaire], " _
& "[Code unité], Quantité, [Total ligne], DateBL, [N°BL] ) " _
& "SELECT DISTINCTROW FACTURES.Numfacture, " _
& "[LIGNES BL TEMP].[Code article], [LIGNES BL TEMP].Désignation, " _
& "[LIGNES BL TEMP].[Prix unitaire], [LIGNES BL TEMP].[Code unité], " _
& "[LIGNES BL TEMP].Quantité, [LIGNES BL TEMP].[Total ligne], " _
& "BL.DateSortie, BL.[N°BL] " _
& "FROM BL INNER JOIN ((((CLIENTS INNER JOIN FACTURES " _
& "ON CLIENTS.Codeclient = FACTURES.CodeClient) " _
& "INNER JOIN ([BL TEMP] INNER JOIN [LIGNES BL TEMP] " _
& "ON [BL TEMP].[N°BL_temp] = [LIGNES BL TEMP].[N°BL_temp]) " _
& "ON FACTURES.CodeClient = [BL TEMP].CodeClient) " _
& "INNER JOIN ETABLISSEMENTS " _
& "ON (ETABLISSEMENTS.Codetab = CLIENTS.Codetab) " _
& "AND (FACTURES.Codetab = ETABLISSEMENTS.Codetab)) " _
& "INNER JOIN SERVICES ON FACTURES.Codeservice = SERVICES.Codeservice) "
_
& "ON BL.[N°BL] = [BL TEMP].[N°BL_temp] "
sql1 = sql1 & "WHERE (((Format([DateSortie_temp],'mm')) = " _
& "[Forms]![Choix_fact_perso]![Mois]) " _
& "AND ((Format([DateSortie_temp],'yyyy')) = " _
& "[Forms]![Choix_fact_perso]![Année])); "

Ensuite, je rajouterais... Que fait ton code après ???
Si tu t'arrête là, c'est normal que ta requête ne s'exécute pas...

Après, tu dois faire :
Currentdb.Execute sql1

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Eric" a écrit dans le message de news:

Bonsoir,

Il faut que tu sortes tes variables [Forms]![Choix_fact_perso]![Mois] et
[Forms]![Choix_fact_perso]![Année] de la chaine SQL à partir de la clause
Where.

sql1=".................................................."
& " WHERE Format([DateSortie_temp],'mm')=" &
[Forms]![Choix_fact_perso]![Mois] & " AND
Format([DateSortie_temp],'yyyy')=" & [Forms]![Choix_fact_perso]![Année] &
"; "

De plus, ta clause Parameters n'est plus utile, tu peux la supprimer
puisque tu crées par concaténation ton sql. Donc tu enleves de Parameters
jusqu'au 1er point-virgule.

PS: il manquait un espace avant le Where.

bonsoir à tous,

Je voudrais ajouter par une requête ajout en sql (pour l'ajouter dans le
code) les lignes des BL temp dans la table LIGNES FACTURES.

La requête sql fonctionne bien quand je la lance manuellement depuis le
menu requête.
Je l'ai converti en sql puis ramené dans le code.
Il n'y a pas de message d'erreur mais elle n'ajoute rien alors que si je
la lance manuellement : elle me crée bien les 7 enregistrements
existants.

Voici le code sql :
Dim sql1 As String
...
sql1 = "PARAMETERS [Forms]![Choix_fact_perso]![Mois] Byte,
[Forms]![Choix_fact_perso]![Année] Short; INSERT INTO [LIGNES FACTURES]
( Numfacture, [Code article], Désignation, [Prix unitaire], [Code unité],
Quantité, [Total ligne], DateBL, [N°BL] ) SELECT DISTINCTROW
FACTURES.Numfacture, [LIGNES BL TEMP].[Code article], [LIGNES BL
TEMP].Désignation, [LIGNES BL TEMP].[Prix unitaire], [LIGNES BL
TEMP].[Code unité], [LIGNES BL TEMP].Quantité, [LIGNES BL TEMP].[Total
ligne], BL.DateSortie, BL.[N°BL] FROM BL INNER JOIN ((((CLIENTS INNER
JOIN FACTURES ON CLIENTS.Codeclient = FACTURES.CodeClient) INNER JOIN
([BL TEMP] INNER JOIN [LIGNES BL TEMP] ON [BL TEMP].[N°BL_temp] = [LIGNES
BL TEMP].[N°BL_temp]) ON FACTURES.CodeClient = [BL TEMP].CodeClient)
INNER JOIN ETABLISSEMENTS ON (ETABLISSEMENTS.Codetab = CLIENTS.Codetab)
AND (FACTURES.Codetab = ETABLISSEMENTS.Codetab)) INNER JOIN SERVICES ON
FACTURES.Codeservice = SERVICES.Codeservice) ON BL.[N°BL] = [BL
TEMP].[N°BL_temp]" _
& "WHERE
(((Format([DateSortie_temp],'mm'))=[Forms]![Choix_fact_perso]![Mois]) AND
((Format([DateSortie_temp],'yyyy'))=[Forms]![Choix_fact_perso]![Année]));
"

Merci d'avance.

Gundt



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
Gundt
Bonjour à tous,

Bonsoir,

Il faut que tu sortes tes variables [Forms]![Choix_fact_perso]![Mois] et
[Forms]![Choix_fact_perso]![Année] de la chaine SQL à partir de la
clause Where.

sql1="...................................
....


Ca marche : c'est super.

Un grand merci.

Gundt

Avatar
Gundt
Bonjour à tous,

Bonsoir

[...]

Donne l'erreur : "trop peu de paramètres : 2 attendus".
Comme celle de Eric fonctionne, j'ai adopté la solution de Eric.

Ensuite, je rajouterais... Que fait ton code après ???
Si tu t'arrête là, c'est normal que ta requête ne s'exécute pas...
Ben oui, c'est vrai que je la lancçais manuellement la requête et que je

n'ai pas pensé à cela.

Après, tu dois faire :
Currentdb.Execute sql1
Ok. J'en prends bonne note.


En tout cas, merci à Eric et à Jessy qui m'ont aidé à solutionner.

@+
Jessy Sempere


Gundt