Vba access pb de connection bdd et pb requète

Résolu/Fermé
ffmanfan - 27 mai 2008 à 09:15
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 - 2 juin 2008 à 10:17
Bonjour,
J'ai un problème avec ce code il ne fonctionnent pas. je travail sur access 2007 pour un projet qui sera sur access 2003 et j'utilise un livre sur le vba access 2002.
Voilà le code:
Private Sub cmdEnreg_Click()
Dim db As Connection
DoCmd.Hourglass True
Set db = CurrentProject.Connection
db.Execute " INSERT INTO TblProduit VALUES LibProduit = " & txtNomPdt.Text & " , N°Catégorie = (SELECT N°Catégorie FROM TblCatégorieProduit WHERE LibCatégorie = " & lstCategorie.Text & " ) , Conditionnement = " & txtConditionnement.Text & " , N°Fournisseur = ( SELECT N°Fournisseur FROM TblFournisseur WHERE RaisonSociale = " & LstFournisseur.Text & " ) , RéfFournisseur = " & txtRefFourn.Text & " , Commentaire = " & txtCommentaire.Text & " ; "
db.Execute " INSERT INTO TblTarifs VALUES N°Produit = ( SELECT N°Produit FROM TblProduit WHERE LibProduit = " & txtNomPdt.Text & " ) , Année = " & txtAnnée.Text & " , DateActualisation = " & txtDateActu.Text & " , DateDébut = " & txtDateDébut & " , DateFin = " & txtDateFin & " Commentaire = " & txtCommentaire.Text
If lstCategorie.Text = "Parquet" Then
If lstTypeParquet.Text = "Massif" Then
db.Execute " INSERT INTO TblParquet VALUES N°Produit = ( SELECT N°Produit FROM TblProduit WHERE LibProduit = " & txtNomPdt.Text & " ) , Essence = ( SELECT idNatureBois FROM tblNatureBois WHERE NatureBois = " & lstNatureBois.Text & " ) , Epaisseur = " & txtEpaisseurBois.Text & " , Longueur = " & txtLongueur.Text & " , Largeur = " & txtLargeur.Text & " , Bordure = " & txtBordure.Text & " , Commentaire = " & txtCommentaire.Text & " ; "
End If
If lstTypeParquet.Text = "Contre Colé" Then
db.Execute " INSERT INTO TblParquet VALUES N°Produit = ( SELECT N°Produit FROM TblProduit WHERE LibProduit = " & txtNomPdt.Text & " ) , Essence = ( SELECT idNatureBois FROM tblNatureBois WHERE NatureBois = " & lstNatureBois.Text & " ) , Epaisseur = " & txtEpaisseurBois.Text & " , Longueur = " & txtLongueur.Text & " , Largeur = " & txtLargeur.Text & " , NombreDeFrise = " & txtNbFrise.Text & " , Commentaire = " & txtCommentaire.Text & " ; "
End If
End If
If lstCategorie.Text = "Abrasif" Then
If lstTypeAbrasif.Text = "Rouleau" Then
db.Execute " INSERT INTO TblAbrasif VALUES N°Produit = ( SELECT N°Produit FROM TblProduit WHERE LibProduit = " & txtNomPdt.Text & " ) , EpaisseurGrain = " & txtEpaisseurGrain.Text & " , Longueur = " & txtLongueur.Text & " , Largeur = " & txtLargeur.Text & " , Commentaire = " & txtCommentaire & " ; "
End If
If lstTypeAbrasif.Text = "Disque" Then
db.Execute " INSERT INTO TblAbrasif VALUES N°Produit = ( SELECT N°Produit FROM TblProduit WHERE LibProduit = " & txtNomPdt.Text & " ) , EpaisseurGrain = " & txtEpaisseurGrain.Text & " , Diamètre = " & txtDiamètre.Text & " , Commentaire = " & txtCommentaire & " ; "
End If
If lstTypeAbrasif.Text = "Bande sans fin" Then
db.Execute " INSERT INTO TblAbrsif VALUES N°Produit = ( SELECT N°Produit FROM TblProduit WHERE LibProduit = " & txtNomPdt.Text & " ) , EpaisseurGrain = " & txtEpaisseurGrain.Text & " , Longueur = " & txtLongueur.Text & " , Largeur = " & txtLargeur.Text & " , Commentaire = " & txtCommentaire & " ; "
End If
If lstTypeAbrasif.Text = "Grille" Then
db.Execute " INSERT INTO TblAbrasif VALUES N°Produit = ( SELECT N°Produit FROM TblProduit WHERE LibProduit = " & txtNomPdt.Text & " ) , Diamètre = " & txtDiamètre.Text & " , Commentaire = " & txtCommentaire & " ; "
End If
If lstTypeAbrasif.Text = "Pad" Then
db.Execute " INSERT INTO TblAbrasif VALUES N°Produit = ( SELECT N°Produit FROM TblProduit WHERE LibProduit = " & txtNomPdt.Text & " ) , Diamètre = " & txtDiamètre.Text & " , Commentaire = " & txtCommentaire & " ; "
End If
End If
If lstCategorie.Text = "Liquide" Then
db.Execute " INSERT INTO TblLiquide VALUES N°Produit = ( SELECT N°Produit FROM TblProduit WHERE LibProduit = " & txtNomPdt.Text & " ) , TypeLiquide = ( SELECT N°Type FROM TblTypeLiquide WHERE LibTypeLiquide = " & lstTypeLiquid.Text & " , Effet = " & txtEffet.Text & " , Commentaire = " & txtCommentaire & " ; "
End If
If lstCategorie.Text = "Outillage" Then
db.Execute " INSERT INTO TblOutillage VALUES N°Produit = ( SELECT N°Produit FROM TblProduit WHERE LibProduit = " & txtNomPdt.Text & " ) , N°Employé = ( SELECT idEmploye FROM tblEmployes WHERE NomEmploye = " & lstEmploye.Text & " , DateAquisition = " & txtDate.Text & " , Commentaire = " & txtCommentaire & " ; "
End If
End Sub

Merci d'avance
A voir également:

34 réponses

ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
28 mai 2008 à 09:02
G peut être trouver une alternative a sa je vais finalement combiner les deux tables (je supprime la table tarifs et l'insère dans la table Produit) et pour les dates et l'année je ferai un formulaire de mise a jour.
Parce que là je croi que sa ne va jamais marcher.
Merci quand pour ces aides; ça m'a aidé a mieux comprendre la combinaison vba sql.
Encore merci a vous pour votre réactiviter.
0
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
29 mai 2008 à 09:24
Bonjour,
Pour mon sql en faite il suffit d'enlever le ".Text" qu'il y a dans les variables.
Maintenant il accepte mon sql.
Après il suffit que les variable soit du même format. Sa c'est autre chose.
0
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
30 mai 2008 à 08:24
Bonjour,
G une erreur dans ma requète mais je ne sais pas où.
Enfin C le débeugueur de visual basic access 2007 qui me dit :
Erreur 3067: la requête doit être construite à partir d'au moins une table ou une requête source.

Voilà le code:

reqI = "INSERT INTO TblAncienTarifs (N°Produit, Année, DateActualisation, PrixHT, Remise, DateDébut, DateFin, Commentaire) VALUES (" & txtN°Pdt & ", (SELECT Année FROM TblProduit WHERE N°Produit= " & txtN°Pdt & ") , (SELECT DateActualisation FROM TblProduit WHERE N°Produit= " & txtN°Pdt & ") , (SELECT PrixHT FROM TblProduit WHERE N°Produit= " & txtN°Pdt & ") , (SELECT Remise FROM TblProduit WHERE N°Produit= " & txtN°Pdt & ") , (SELECT DateDébut FROM TblProduit WHERE N°Produit= " & txtN°Pdt & ") , (SELECT DateFin FROM TblProduit WHERE N°Produit= " & txtN°Pdt & ") , (SELECT Commentaire FROM TblProduit WHERE N°Produit= " & txtN°Pdt & "));"

Merci d'avance.
0
blux Messages postés 26003 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 avril 2024 3 289
30 mai 2008 à 10:39
J'insiste : on ne met pas un select dans un value, il faut contruire la chaine reqI avec des dlookup à la place des select...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
30 mai 2008 à 10:55
je connaissais pas je vais essayer
0
blux Messages postés 26003 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 avril 2024 3 289
30 mai 2008 à 11:06
dlookup permet de récupérer une valeur unique dans une table comme le fait un select avec un where bien restrictif.
0
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
30 mai 2008 à 11:16
dlookup ne fonctionne pas pour récupérer les champs de type Numéro auto?
0
blux Messages postés 26003 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 avril 2024 3 289
30 mai 2008 à 12:51
jamais testé pour ce cas-là, mais je ne vois pas pourquoi il ne pourrait pas le récupérer...
0
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
2 juin 2008 à 08:22
non sa ne marche pas il m'affiche:
erreur 2471:
L'expression entrée comme paramètre est à l'originede l'erreur suivante:<<N°Produit>>.

voilà mon code:
reqS1 = DLookup("N°Propduit", "TblProduit", "N°Produit = " & txtN°Pdt & " ")

reqS1 est déclarer en Variant.

Merci d'avance.
0
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
2 juin 2008 à 08:36
non C bon cette ligne ne me servait à rien en faite.
Mon insert into marche mais bizarrement en faite il a du mal a rentré les dates (ex: au lieu de rentrée 01/01/2008, il rentre 00:00:43 or il est 8:33) ainsi que les variables string (au lieu de mettre rien il met 1,28652058432935E-03).
C'est vraiment bizarre.

Voilà mon code:

reqS2 = DLookup("Année", "TblProduit", "N°Produit = " & txtN°Pdt & "")
reqS3 = DLookup("DateActualisation", "TblProduit", "N°Produit = " & txtN°Pdt & " ")
reqS4 = DLookup("PrixHT", "TblProduit", "N°Produit = " & txtN°Pdt & " ")
reqS5 = DLookup("Remise", "TblProduit", "N°Produit = " & txtN°Pdt & " ")
reqS6 = DLookup("DateDébut", "TblProduit", "N°Produit = " & txtN°Pdt & " ")
reqS7 = DLookup("DateFin", "TblProduit", "N°Produit = " & txtN°Pdt & " ")
reqI = "INSERT INTO TblAncienTarifs (N°Produit, Année, DateActualisation, PrixHT, Remise, DateDébut, DateFin, Commentaire) VALUES (" & txtN°Pdt & ", " & reqS2 & ", " & reqS3 & ", " & reqS4 & ", " & reqS5 & ", " & reqS6 & ", " & reqS7 & ");"

Merci d'avance.
0
blux Messages postés 26003 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 avril 2024 3 289
2 juin 2008 à 08:39
les dates doivent être mises entre #, et en format anglais (mm/jj/aaaa)...

pour les variables string, je ne comprends pas le problème..., la colonne access est décrite en texte ou en numérique ?
0
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
2 juin 2008 à 08:51
Autant pour moi G complètement oublier de mettre la colone qu'est en string et G du mal a me rentré dans la tête les # pour les dates.
Sinn G fait les modifs et voilà le résultat:
Erreur 3346:
Le nombre de valeur de la requête doit coïncider avec le nombre de champs destination.

Voilà le code:

reqI = "INSERT INTO TblAncienTarifs (N°Produit, Année, DateActualisation, PrixHT, Remise, DateDébut, DateFin, Commentaire) VALUES (" & txtN°Pdt & ", " & reqS2 & ", #" & reqS3 & "#, " & reqS4 & ", " & reqS5 & ", #" & reqS6 & "#, #" & reqS7 & "#, '" & reqS1 & "');"

Et pour répondre a ta question la colonne est en texte.
0
blux Messages postés 26003 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 avril 2024 3 289
2 juin 2008 à 09:06
J'ai du mal à voir, mais ça semble correct, il faudrait donc que tu fasses un affichage via une 'msgbox reqI' pour voir si tu n'as pas oublié de fermer une double-quote ou un truc comme ça...
0
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
2 juin 2008 à 09:24
Je crois savoir.
que se passe t-il quand on veut insérer un nombre a virgule??

formalisme insert into:
INSERT INTO NomDeTable (Champ1, ...) VALUES (Val1, ...)

Or si une des valeur est avec une virgule je pense que sa pose problème:
ex: essayer d'insérer 0,13 (soit 13%) sa fera:
INSERT INTO NomDeTable (Champ1, Champ2) VALUES (Val1, 0,13)
!!!!!!
on veut insérer 2 valeur mais du fait du chffre a virgule il pense qu'on en rentre 3. Même si on rajoute un espace ça ne fonctionnera pas car il ne prend en compte les espace que quand il sont entre []. Mais cela n'a aucun sens pour les type numérique, on utilise ça uniquement dans le cas de données textes contenant des espaces (ex: [salut a tous]).

Comment faire pour insérer des chiffres a virgules??

Merci d'avance.
0
blux Messages postés 26003 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 avril 2024 3 289
2 juin 2008 à 09:28
t'as essayé le point décimal ? vu qu'on est en format british, ça m'étonnerait pas qu'il faille le mettre en lieu et place de la virgule...
0
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
2 juin 2008 à 09:33
c'est sa le problème mon champ est de type numérique et plus précisément pourcentage et de base il met les virgules.
Mais a mon avis si je mais:
INSERT INTO NomTable (Champ1, Champ2) VALUES ([Val1] ,[Val2])
Ça contredit ce que j'ai dit mais il y a que les cons qui ne change pas d'avis^^.
Qui ne tante rien a rien au point où j'en suis.
0
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
2 juin 2008 à 09:44
Ça ne fonctionne toujours pas avec les []. Ça me dit qu'il manque une donnée.
0
blux Messages postés 26003 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 avril 2024 3 289
2 juin 2008 à 09:46
je teste chez moi et je te tiens au courant...
0
blux Messages postés 26003 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 avril 2024 3 289 > blux Messages postés 26003 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 avril 2024
2 juin 2008 à 09:56
en le mettant entre simple quote '0,15' ou en le mettant avec un point décimal 0.15, ça marche...
0
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
2 juin 2008 à 09:59
ouf enfin sa marche a merveille.
Je te remercie Blux.
0
ffmanfan Messages postés 25 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 26 janvier 2010 2
2 juin 2008 à 10:17
il faut impérativement mettre des ' pour les nombres a virgule (dans le cas ou vous mettez des virgules) car sinon sa créer une erreur. G eu le même problème avec un update.
En tout cas encore merci.
0