Rechercher : dans
Par :

Vba access pb de connection bdd et pb requète

Dernière réponse le 2 jun 2008 à 10:17:53 ffmanfan, le 27 mai 2008 à 09:15:20 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 2.0.0.14

1

blux, le 27 mai 2008 à 09:18:43

Salut,

si tu commençais par nous dire ce qui ne fonctionne pas : quel est le message d'erreur et à quelle ligne ? plutôt que de déposer 100 lignes de code...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

2

ffmanfan, le 27 mai 2008 à 09:24:58

Le problème viens d'abord de cette ligne:
Set db = CurrentProject.Connection

avec comme message :
Erreur d'exécution '13':
Incompatibilité de type

et désolé pour toute les lignes de codes c'est le matin et je suis mal réveillé.

Répondre à ffmanfan

3

blux, le 27 mai 2008 à 09:32:20
  • +1

Y'a un truc qui ne va pas marcher, c'est db.execute, qui ne s'applique qu'à un objet de type database, donc je pense qu'un des problèmes vient de la définition de la base courante, que veux-tu faire avec "CurrentProject.Connection" ?

Si tu veux travailler sur la base courante, il faut déclarer "db as database" et mettre "set db=currentdb", ensuite tu pourras exécuter des requêtes...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

4

ffmanfan, le 27 mai 2008 à 10:09:07

Merci pour la connection, mais maintenant C la ligne pour db.execute qui affiche:
Erreur d'exécution '2185':
Impossible de faire référence à une propriété ou de la définir pour un contrôle si ce dernier n'est pas activé.

La ligne de code est la suivante:

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 & " ; "

merci d'avance

Répondre à ffmanfan

5

blux, le 27 mai 2008 à 12:28:20

Je crois que l'action 'execute' met entre () ses arguments

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

6

ffmanfan, le 27 mai 2008 à 14:06:33

Erreur de syntaxe.

par contre je ne vois pas où car le curseur se place sur INTO. A moin que ce ne soit les & qui posent problème?

voilà le code:

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 & " ;)

Merci d'avance

Répondre à ffmanfan

7

blux, le 27 mai 2008 à 14:12:42

Mets ton curseur sur 'execute' et appuie sur F1, ça devrait ouvrir l'aide concernant la syntaxe de execute...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

8

Polux31, le 27 mai 2008 à 14:18:53

Bonjour,

L'argument doit être de type string pour la commande Execute. Il faut donc la placer entre double cote (" "). Ensuite les insertions de type String doivent être entre simple cote (' ') dans une instruction SQL. Seules les insertions de type numérique n'en ont pas besoin.

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 & "'  ;") 


;o)

polux «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

9

ffmanfan, le 27 mai 2008 à 14:23:17

Bonjour,
Je retombe sur l'erreur 2185:
Impossible de faire référence à une propriété ou de la définir pour un contrôle si ce dernier n'est pas activé.

Répondre à ffmanfan

10

blux, le 27 mai 2008 à 14:39:25

Db doit être décrit en type 'database'...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

11

ffmanfan, le 27 mai 2008 à 14:40:50

C le cas.

Répondre à ffmanfan

12

Polux31, le 27 mai 2008 à 14:50:39

Voilà ce que j'ai trouvé sur le site de support Microsoft:
http://support.microsoft.com/kb/466677/fr

;o) «Ce que l'on conçoit bien s'énonce clairement, Et les mots p­our le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

13

ffmanfan, le 27 mai 2008 à 15:00:54

Merci pour cette aide.
Je débute en vba et je suis mal réveillé même a 15H.
Et je pense avoir trouver un moyen plus simple.
Je vous tient au courant.

Répondre à ffmanfan

14

Polux31, le 27 mai 2008 à 15:13:26

De rien;

bon courage

;o)
polux «Ce que l'on conçoit bien s'énonce clairement, Et les mots p­our le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

15

ffmanfan, le 27 mai 2008 à 16:32:15

Bonjour,
Mon code marche en partie. Mais le code sql ne fonctionne toujours pas. snif.
voilà le code:

db.Execute ("INSERT INTO TblTarfs (N°Produit, Année, DateActualisation, PrixHT, DateDébut, DateFin, Commentaire) VALUES ((SELECT N°Produit FROM TblProduit WHERE LibProduit=" & txtNomPdt.Text & "), " & txtAnnée.Text & ", " & txtDateActu.Text & ", " & txtPrix.Text & ", " & txtDateDébut.Text & ", " & txtDateFin.Text & ", " & txtCommentaire.Text & ");")

Répondre à ffmanfan

16

Polux31, le 27 mai 2008 à 16:36:56

Relis le post 8 ... les insertions de type String (texte) doivent être encadrées d'une simple cote ('papa') ... et les types Date avec (# 12/12/2007 #) ... seules les types numérique ne sont pas encadrées.

«Ce que l'on conçoit bien s'énonce clairement, Et les mots p­our le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

17

ffmanfan, le 27 mai 2008 à 16:42:40

Db.Execute ("INSERT INTO TblTarfs (N°Produit, Année, DateActualisation, PrixHT, DateDébut, DateFin, Commentaire) VALUES ((SELECT N°Produit FROM TblProduit WHERE LibProduit='" & txtNomPdt.Text & "'), " & txtAnnée.Text & ", #" & txtDateActu.Text & "#, " & txtPrix.Text & ", #" & txtDateDébut.Text & "#, #" & txtDateFin.Text & "#, '" & txtCommentaire.Text & "');")

Comme sa ça me fait la même chose.

Répondre à ffmanfan

18

Polux31, le 27 mai 2008 à 16:45:17

As-tu bien vérifié le type de tes champs et de tes insertions ???
«Ce que l'on conçoit bien s'énonce clairement, Et les mots p­our le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

19

blux, le 27 mai 2008 à 16:48:04

Jamais vu de requête insert 'into avec' un 'select' comme source de 'values'...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

20

ffmanfan, le 28 mai 2008 à 08:25:28

C parce qu'en faite j'utilise une liste déroulante ou j'affiche un libelle mais le pb C que je doit récupérer l'identifiant du libelle d'où le select dans le insert into.

Répondre à ffmanfan

21

ffmanfan, le 28 mai 2008 à 08:32:54

Mais qu'est ce que je raconte je suis encore sur l'ancien programme.

Là C parce que j'utilise un numéro automatique pour N°Produit dans le table TblProduit mais elle est relié a une table TblTarifs qui a le même identifiant que le produit ainsi que l'année car le prix peut changer tout les ans.

Répondre à ffmanfan

22

Polux31, le 28 mai 2008 à 08:34:17

Tu peux donc faire un requete a part pour récupérer la donnée avant de la mettre dans l'insert, ça simplifierai un peu.
«Ce que l'on conçoit bien s'énonce clairement, Et les mots p­our le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

23

ffmanfan, le 28 mai 2008 à 08:35:38

Ouai j'y avais pas penser j'essaye.

Répondre à ffmanfan