Rechercher : dans
Par :

Access: erreur sur requete

Dernière réponse le 5 aoû 2008 à 16:08:25 guillaume, le 30 oct 2003 à 16:44:24 
 Signaler ce message aux modérateurs

Bonjour

j'ai actuellement un problème lors de l'execution d'une requete de
selection programmée en VB et je souhaiterai volontier un peu d'aide. je vous remercie d'avance.

je vous expose la situation:
dans un formulaire access j'ai une zone de liste déroulante ou je choisi le code d'une céréale. j'aimerai récupéré la quantité total livree de cette cereale se trouvant dans une table afin d'eviter a l'utilisateur de dépasser cette limite. mais j'ai malheureusement un probleme lors de l'execution de la requete.

voici la requete:
Private Sub code_cereale_vente_Change()
Dim req As String
Dim base As Database
Dim enreg As Variant
Dim qte As String

Set base = CurrentDb
req = "SELECT sum(livrer.quantite_livree)as qte_stock FROM livrer " _
& "WHERE livrer.code_cereale_livrer = " _
& "('" & Forms![saisie_vente]![code_cereale_vente] & "');"
(*) Set enreg = base.OpenRecordset(req)
With enreg
.MoveLast
qte = enreg![qte_stock]'
End With
qte_dispo.Value = Str(qte)
End Sub

(*) une erreur se produit a cette endroit:

erreur d'execution 3464
type de données incompatible dans l'expression du critère

dsolé pour la longueur et encore merci de votre aide.

1

blux, le 30 oct 2003 à 17:23:07

Salut,

essaye de définir enreg en recordset et non en variant...

A+ Blux

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

Répondre à blux

2

guillaume, le 30 oct 2003 à 19:59:55

Désolé j'ai déjà essayé mais y a rien à faire c'est toujours le même message d'erreur qui revient. j'ai essayé d'utiliser la conversion mais ca marche pas non plus. 'code_cereale_vente' est bien du numerique dans ma table et ' livrer.quantite_livree' aussi. merci qd meme

guillaume

Répondre à guillaume

3

blux, le 31 oct 2003 à 08:35:25

Si code céréale est du numérique pourquoi il est entre simple quote, il ne devrait pas, ni entre parenthèses d'ailleurs...

A+ Blux

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

Répondre à blux

4

gu!ll@ume, le 31 oct 2003 à 11:27:08

Ben g essayé et c vrai qu'il ne fallait pas les cotes et les parenthese merci.
mais y a tjr ce message qui revient meme en changeant la requete.

"SELECT date_livraison as qte_stock FROM livrer WHERE livrer.code_cereale_livrer = 1;"

gv essayé avec une autre table pour voir si il y a le meme probleme en cherchant un nom.
normalement i devrai pas i avoir d'incompatibilité!!

jte remerci Blux


" toute aide est bonne à prendre...
... sauf la mienne!!     @+   ;-)-|-< "

Répondre à gu!ll@ume

5

blux, le 31 oct 2003 à 11:47:38

Tu as remis 'enreg' en recordset ?
Normallement, tu ne dois pas le décrire en variant.

A+ Blux

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

Répondre à blux

6

gu!ll@ume, le 31 oct 2003 à 11:59:08

Pouaaah ca marche! t un génie Blux.
i fallait juste que je mette enreg en variant parce que ca marche pas en recordset sous access 2000.
merci encor

toute aide est bonne à prendre...
... sauf la mienne!!     @+   ;-)-|-<

Répondre à gu!ll@ume

7

Edouard, le 13 déc 2004 à 12:29:34

Vous avez dit: i fallait juste que je mette enreg en variant parce que ca marche pas en recordset sous access 2000.

qui peut mieux m'expliquer ce détail? parce que j'ai le meme probleme.
Je suis un tout débutant dans ce domaine alors expliquez moi le plus simple possible:-)
un grand merci

Répondre à Edouard

8

blux, le 13 déc 2004 à 14:47:42

En fait, sous VBA, les variables doivent être typées, c'est à dire que l'on doit indiquer ce qu'elle vont contenir : texte, nombre, booléen, recorset (jeu d'enregistrement)

Ex :
Dim toto as string
Dim tata as boolean
Dim tutu as integer

Il est cependant possible de ne pas indiquer cette propriété, c'est le rôle du mot 'variant', mis lors de la déclaration. Dans ce cas, VBA ne contrôle pas ce qui va être dedans, et on peut tout mettre pêle-mêle...

C'est la solution utilisée pour régler le problème du type 'recordset' non trouvé sous 2000...

A+ Blux

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

Répondre à blux

19

flor de nopal, le 5 aoû 2008 à 12:07:36

Salut blux

j'ai le même pb même message erreur, je ne parviens pas à le résoudre! please help!

sarah

Répondre à flor de nopal

20

blux, le 5 aoû 2008 à 12:39:53

As-tu mis tes variables en VARIANT ?

A+ Blux           

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

Répondre à blux

21

flor de nopal, le 5 aoû 2008 à 15:39:33

Désolée Blux je suis novice en access : c'est quoi les variables???
je dois faire koi concrètement ..... ??

(oui je sais je suis pas une flèche... mais t'as bien dit que...les cons ça ose tout ..??? lol)

Merci d'avance pour le sauvetage :)

Répondre à flor de nopal

22

blux, le 5 aoû 2008 à 15:42:13

T'arrives sur une discussion, tu dis : "j'ai le même message", alors je te propose la même solution...

Sinon, explique quel est ton souci...

A+ Blux           

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

Répondre à blux

9

edouard, le 13 déc 2004 à 15:06:55

Tu dis: Dans ce cas, VBA ne contrôle pas ce qui va être dedans, et on peut tout mettre pêle-mêle...

mais justement je veux qu'il controle..
je t'explique: je fais une base de donnees de naissance alors quand j'insere (dans ce cas ci) le numero d'admission (clé primaire indexée sans doublons) au moment d'enregistrer il vérifie si le numéro d'admission existe dejà..

J'ai mis un controle d'onglet avec deux pages, j'insere les donnees dans la premiere page, puis la meme chose dams la deuxieme page si l premiere correspond à la seconde alors il enregistre les donnees.
voila la programation pour controler le numero d'admission:
--Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT tblFimena.NADM FROM tblFimena WHERE tblFimena.NADM = " & NADM.Value & ";", dbOpenDynaset)
rs.FindFirst "[NADM] = " & NADM.Value

If rs.NoMatch Then
rs.Close
Else
test1 = 2
MsgBox "Mo d'admission existe déjà"
rs.Close
NADM.BackColor = 255
NADM1.BackColor = 255

End If

j'apprecie vraiment votre aide
UN GRAND MERCI

Répondre à edouard

10

random, le 14 déc 2004 à 09:12:35

Ta liste rencoie une valeur texte
pour la comparer a un code numerique tu dois la transformer avec cv(zone de texte)

Répondre à random

11

edouard, le 14 déc 2004 à 09:54:28

Encore un grand merci pour la peine que vous vous donnez à me répondre.

Une question :-) encore,
tu pourrai me dire comment le faire, l transformation ave cv?
et que veut dire cv?

Un grand merci

Répondre à edouard

12

random, le 14 déc 2004 à 17:34:19

Regarde dans l'aide à fonctions de conversion

Répondre à random

13

edouard, le 16 déc 2004 à 15:37:45

Je tenais encore une fois a vous remercier pour l'aide précieuse qui vous m'avez donné.

Répondre à edouard

14

edouard, le 31 mar 2005 à 08:24:03

Je fais encore appel à votre aide :-(

voilà, avant dans ma base j'avais:
If (frmFiche1 = 1) Then
MsgBox "Valeurs divergentes marquées en ROUGE"
End If

If (test1 = 0) Then
DoCmd.GoToRecord , , acNewRec
DoCmd.SetWarnings False
DoCmd.RunSQL "insert into tblFimena select * from tbcontrole;"
DoCmd.RunSQL "delete * from tbcontrole;"
DoCmd.SetWarnings True

Mat1.Value = ""
ind1.Value = ""
NADM1.Value = ""
...
...
MAT.SetFocus

End If
End Sub

mais maintenant je veux avoir de cette manière:

f (frmFimena1 = 1) Then
intReponse = MsgBox("Valeurs divergentes marquées en ROUGE. Voulez-vous quand même enregistrer? si vous choisissez oui, seule la deuxième saisie sera prise en compte!", vbYesNo, "Confirmation")
Select Case intReponse
Case vbYes
'oui est choisit, la deuxième saisie devra être enregistrée
Case vbNo
'non est choisi, donc annule la manipulation
No = True
End Select
End If

If (frmFimena1 = 0) Then
DoCmd.GoToRecord , , acNewRec
DoCmd.SetWarnings False
DoCmd.RunSQL "insert into tblFimena select * from tbcontrole;"
DoCmd.RunSQL "delete * from tbcontrole;"
DoCmd.SetWarnings True

MAT1.Value = ""
IND1.Value = ""
...
...
MAT.SetFocus

End If
End Sub

mais ça ne marce pas, si vous arrivez à comprendre ma demande, est-ce qu'il vous est possible de corriger ou de faire une petite ligne de commande?
C'est important pour moi je fais donc appel à votre grande aide.
de tout coeur je vous remercie mil fois

G.Ed.

Répondre à edouard

15

Jenni, le 31 mar 2005 à 09:22:48

Ecoutes, moi j'ai pas lu la discussion en entière, mais je fais en ce moment à peu près la même chose :

Dim db As Database
Dim rs As Recordset
Dim svg As String

Set db = CurrentDb

'On créé une requête
svg = "SELECT ...;"
Set rs = db.OpenRecordset(svg)

'On affecte ensuite les résultat du recordset aux zones de textes du formulaire
Me.marque_poste.Value = rs!marque_poste
...

En fait, c'est que enreg tu dois le déclarer en recordset.

Sur la partie vba, vérifie dans outils, référence, que celles ci sont bien cochés:
Microsoft Visual Basic For Applications Extensibility 5.3
OLE Automation
Visual Basic For Applications
Microsoft Access 9.0 Object Library
Microsoft DAO 3.6 Object Library
Microsoft Activex DataObjects 2.7 Library
Microsoft Activex DataObjects Recordset 2.7 Library

Normalement, après ça devrait fonctionner.

Répondre à Jenni

16

eduardo, le 31 mar 2005 à 14:28:28

Bonjour,
j'espère que ce n'est pas hosé ce que je vais vous demander, mais si je vous passe mon travail (en rar il fait 800kb) vous pourriez me faire les lignes de programation?
c'est que je ne connais pas bien la programation, il le travail doit avancer:-(

merci de votre réponse, si jamais vous m'accordiez cette faveur, puis-je avoir votre adresse email?

Merci encore, meme si la reponse est négative:-)

Répondre à eduardo

17

eduardo, le 4 avr 2005 à 08:43:37

Bonjour, je cherche une aide et un avis.
Je vous explique.

J'ai une fiche dont-il faut faire la saisie, dans le formulaire il y adeux cases dans l'une on insere le code alpha numerique ex:0188 et dans la case à coté il serà affcihé A88 et ce qui sera enregistré cest le A88, je fais ça pourque la personne n'ai qu'à faire au clavier numérique.

De quel manière dois-je construire la table et puis je peux faire la liaison?
Un grand merci pour votre aide
Cordialement
G.Ed,

Répondre à eduardo

18

bilgatsssam, le 17 aoû 2005 à 02:32:22

Slt
j'ai un pb dans le recordset que j'ai crée il me donne le message suivat:
"type de données incopatible dans l'expression du critére "
voila mon script

Option Explicit
Dim RecMod As New Recordset
Dim BndMod As New BindingCollection

Private Sub Form_Load()
MsgBox "" & Module1.Id1 & ""
' *** Connexion avec la base de données
Connex.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & App.Path & "\bourse.mdb;"

RqSql = "SELECT * FROM AGENTT WHERE MATRICULE = " & Module1.Id1 & " "
'On Error Resume Next
RecMod.CursorLocation = adUseClient
'On Error Resume Next
RecMod.Open RqSql, Connex, adOpenStatic, adLockOptimistic, adCmdText

Set BndMod.DataSource = RecMod

With BndMod
.Add Text1, "Text", "MATRICULE", , "matricule"
.Add Text2, "Text", "NOM_A", , "nom"
.Add Text3, "Text", "PRENOM_A", , "prenom"
.Add Text4, "Text", "SALAIRE_A", , "salaire"
.Add Text5, "Text", "DATE_RECRUTEMENT", , "date de recrutement"
.Add Text6, "Text", "REFERENCE", , "reference"
.Add Text7, "Text", "echelle", , "echelle"
.Add Text8, "Text", "echelon", , "echelon"
.Add Text9, "Text", "NB_ENFANT", , "nombre d'enfant"
End With
End Sub

aider moi svp ,merci !

Répondre à bilgatsssam

23

 flor de nopal, le 5 aoû 2008 à 16:08:25

Ok alors voilà :
j'ai importé un fichier XL vers une table ACCESS existante - que j'ai écrasée
à partir de là j'ai réalisé plusieurs requêtes (en mode création simple) utilisant cette table.
1 mois après je réimporte un nouveau fichier XL (mis à jour) vers ma base access et écrase ma table existante...
lorsque je veux ouvrir les requêtes , j'obtiens le message d'erreur
"type de données incompatible avec l'expression du critère" - que faire ??

merci

Répondre à flor de nopal
Collection CommentÇaMarche.net