Demande d'aide pour résoudre une erreur Microsoft Jet
15 réponses
Sonia
Bonjours
Je voudrai réaliser un calcul entre deux bases de données access. Ces deux bases de donnéés se situent sur
c:\bd
Base de donnée 1 = "I_résultat.mdb"
Table = "I_Co"
Champ = "N_article"
Champ = "Qt_c"
Base de donnée = "H_Résultat.mdb"
Table = "H_Co"
Champ = "N_article"
Champ = "Qt_D"
Le module de calcul ainsi que la requête "J_resultat se trouve dans la base de donnée "H_Résultat.mdb"
Voici de code du module
Function FnQuantitéTotale(MaN_Article) As Long
'MaN_Article = Nz(MaN_article)
'MaN_Article = Val(MaN_Article)
Dim BD aS DAO.Database
Dim enr As DAO.Recordset
Dim QuantitéTotale
Set bd = Opendatabase("c:\bd\I_résultat.mdb")
Set enr = bd.OpenRecordset("Select [Qt_c] From [I_Co] Where N_Article =" & MaN_Article)
FnQuantitéTotale = Nz(DSum("[Qt_c]", "[I_Co]", "N_Article =" & MaN_Article)) + Nz(DSum("[Qt_D]", "[H_Co]", "N_Article =" & MaN_Article))
enr.Close
bd.Close
Set bd = Nothing
End Function
Dans la la requête
Champ = N_Article : Regroupement
Champ = Quantité totale:FnQuantitéTotale([N_Article]) : Regroupement
Je exécute la requête "J_resultat. Et la il me donne le message d'erruer suivant :
Erreur d'execution '3078'
Le moteur de recherche de base de données Microsoft Jet ne peut pas trouver la table ou la
requête source 'I_Co'. Assurez-vous qu'elle existe et qu'elle est correctement orthographiée.
Et la je regarde mon code dans le module et je ne voie pas d'erreur.
Cette erreur est due au fait que MaN_Article n'est pas défini. ----------------------------------------------------------------------
A+ Eric
Eric
Bonjour Sonia
1-Il y a une erreur dans ton code SQL dans chaque instruction : Le mot est FROM et non Fron.
2-Si tu manipules 3 jeux d'enregistrements il te faut 3 variables : enr1, enr2, enr3 et non une seule car pour le moteur, ton code ouvre 3 jeux mais afféctés à la même variable Recordset (enr), l'un après l'autre avant tout traitement, donc il ne retient que le dernier.
3-Je vois que tu récupères 2 champs de la même base donc tu peux faire l'économie d'un jeu d'enregistrements en récupérant les valeurs des 2 champs dans le même jeu.
4-Tu déclares une variable QTB puis tu utilises la variable QBE.
5-Ton erreur de compilation vient du fait que tu n'indiques pas à quelle base se rattache le recordset enr
La solution manipule une seule variable Database et une seule variable Recordset mais réaffectées après traitement.
Rem: PB est-il un prix ? si oui, tu ajoutes des prix à des quantités ???
Voila, j'espère ne pas avoir fait d'erreur.
A+ Eric __________________________________________________________________________
IMPORTANT : Daniel Carollo t'avait conseillé d'attacher tes tables à ta base principale ( celle dans laquelle tu écris ce code ). As-tu essayé car ca te simplifierait la vie, allègerait le traitement, améliorerait la vitesse de traitement car les tables seraient directement disponibles sans devoir ouvrir d'autres bases. __________________________________________________________________________
Bonjour Sonia
1-Il y a une erreur dans ton code SQL dans chaque instruction :
Le mot est FROM et non Fron.
2-Si tu manipules 3 jeux d'enregistrements il te faut 3 variables : enr1,
enr2, enr3 et non une seule car pour le moteur, ton code ouvre 3 jeux mais
afféctés à la même variable Recordset (enr), l'un après l'autre avant tout
traitement, donc il ne retient que le dernier.
3-Je vois que tu récupères 2 champs de la même base donc tu peux faire
l'économie d'un jeu d'enregistrements en récupérant les valeurs des 2
champs dans le même jeu.
4-Tu déclares une variable QTB puis tu utilises la variable QBE.
5-Ton erreur de compilation vient du fait que tu n'indiques pas à quelle
base se rattache le recordset enr
La solution manipule une seule variable Database et une seule variable
Recordset mais réaffectées après traitement.
Rem: PB est-il un prix ? si oui, tu ajoutes des prix à des quantités ???
Voila, j'espère ne pas avoir fait d'erreur.
A+
Eric
__________________________________________________________________________
IMPORTANT : Daniel Carollo t'avait conseillé d'attacher tes tables à ta
base principale ( celle dans laquelle tu écris ce code ). As-tu essayé car
ca te simplifierait la vie, allègerait le traitement, améliorerait la
vitesse de traitement car les tables seraient directement disponibles sans
devoir ouvrir d'autres bases.
__________________________________________________________________________
1-Il y a une erreur dans ton code SQL dans chaque instruction : Le mot est FROM et non Fron.
2-Si tu manipules 3 jeux d'enregistrements il te faut 3 variables : enr1, enr2, enr3 et non une seule car pour le moteur, ton code ouvre 3 jeux mais afféctés à la même variable Recordset (enr), l'un après l'autre avant tout traitement, donc il ne retient que le dernier.
3-Je vois que tu récupères 2 champs de la même base donc tu peux faire l'économie d'un jeu d'enregistrements en récupérant les valeurs des 2 champs dans le même jeu.
4-Tu déclares une variable QTB puis tu utilises la variable QBE.
5-Ton erreur de compilation vient du fait que tu n'indiques pas à quelle base se rattache le recordset enr
La solution manipule une seule variable Database et une seule variable Recordset mais réaffectées après traitement.
Rem: PB est-il un prix ? si oui, tu ajoutes des prix à des quantités ???
Voila, j'espère ne pas avoir fait d'erreur.
A+ Eric __________________________________________________________________________
IMPORTANT : Daniel Carollo t'avait conseillé d'attacher tes tables à ta base principale ( celle dans laquelle tu écris ce code ). As-tu essayé car ca te simplifierait la vie, allègerait le traitement, améliorerait la vitesse de traitement car les tables seraient directement disponibles sans devoir ouvrir d'autres bases. __________________________________________________________________________
Eric
Bonsoir Sonia,
Comme tu recopies les infos d'une fonction vers une autre tu fais des erreurs.
Si la fonction a pour argument : Reference et NC2 tu ne dois pas avoir de variable nommée MaN_Article, dans tous les cas tu testes ou recherches le N_Article=Reference.
Il ya un truc anormal à la fin de ta fonction, tu termines par : & NC2)))) * QTE))) Reference)) <--- Reference)) serait pas en trop ?
Bon, j'ai corrigé mais suis pas sur des parentheses pour ta fonction, j'ai pas vérifié mais j'ai l'impression que ce n'est pas équilibré. Il y a plus de fermantes que d'ouvrantes.
Comme tu recopies les infos d'une fonction vers une autre tu fais des
erreurs.
Si la fonction a pour argument : Reference et NC2 tu ne dois pas avoir de
variable nommée MaN_Article, dans tous les cas tu testes ou recherches le
N_Article=Reference.
Il ya un truc anormal à la fin de ta fonction, tu termines par :
& NC2)))) * QTE))) Reference)) <--- Reference)) serait pas en trop ?
Bon, j'ai corrigé mais suis pas sur des parentheses pour ta fonction,
j'ai pas vérifié mais j'ai l'impression que ce n'est pas équilibré. Il y
a plus de fermantes que d'ouvrantes.
Comme tu recopies les infos d'une fonction vers une autre tu fais des erreurs.
Si la fonction a pour argument : Reference et NC2 tu ne dois pas avoir de variable nommée MaN_Article, dans tous les cas tu testes ou recherches le N_Article=Reference.
Il ya un truc anormal à la fin de ta fonction, tu termines par : & NC2)))) * QTE))) Reference)) <--- Reference)) serait pas en trop ?
Bon, j'ai corrigé mais suis pas sur des parentheses pour ta fonction, j'ai pas vérifié mais j'ai l'impression que ce n'est pas équilibré. Il y a plus de fermantes que d'ouvrantes.
Bonjours C'est encore moi. j'ai encore un message d'erreur de type 3085 Fonction QTE non definie. C'est bizarre je ne trouve pas d'erreur dans l'expression. Tout semble correct.Si tu veux regarder le code pour vérifier il est ci-dessous. Sinon Puis-je t'envoyer un bd exemple contenant les 4 mdb requis pour le module inferieur à 200 ko? Si oui peux tu me donner ton adresse email? Merci d'avance Bisous Sonia!!!
Voici le code ci dessus
Option Compare Database
Function fnPV(Reference As Long, N_C2) As Double 'MaN_Article = Nz(MaN_Article) 'MaN_Article = Val(MaN_Article) Dim bd As DAO.Database Dim enr As DAO.Recordset Dim QTE As Long Dim PBE As Long Dim QBE As Long QTE = 0 PBE = 0 QBE = 0 Set bd = OpenDatabase("c:bdInformatique FrSous Commande RevendeursQTE_SCo.mdb") Set enr = bd.OpenRecordset("Select [Quantité totale] From [Quantité totale Commandée] Where N_Article=" & Reference) While Not enr.EOF QTE = QTE + enr(0) enr.MoveNext Wend enr.Close: bd.Close Set enr = Nothing: Set bd = Nothing Set bd = OpenDatabase("c:Informatique FrPrix de Base FournisseursInf_Prix_Base.mdb") Set enr = bd.OpenRecordset("Select [QB],[PB] From [PB] Where N_Article=" & Reference) enr.MoveFirst While Not enr.EOF QBE = QBE + enr(0) PBE = PBE + enr(1) enr.MoveNext Wend enr.Close: bd.Close Set enr = Nothing: Set bd = Nothing fnPV = (((PBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) * PBE) / (QBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) - ((PBE - Nz(DSum("[PV]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) / (QBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))))) + (((PBE - Nz(DSum("[PV]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) / (QBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2)))) * QTE) End Function
Bonjours
C'est encore moi. j'ai encore un message d'erreur de type 3085 Fonction QTE non definie. C'est bizarre je ne trouve pas d'erreur dans l'expression. Tout semble correct.Si tu veux regarder le code pour vérifier il est ci-dessous. Sinon Puis-je t'envoyer un bd exemple contenant les 4 mdb requis pour le module inferieur à 200 ko? Si oui peux tu me donner ton adresse email?
Merci d'avance
Bisous Sonia!!!
Voici le code ci dessus
Option Compare Database
Function fnPV(Reference As Long, N_C2) As Double
'MaN_Article = Nz(MaN_Article)
'MaN_Article = Val(MaN_Article)
Dim bd As DAO.Database
Dim enr As DAO.Recordset
Dim QTE As Long
Dim PBE As Long
Dim QBE As Long
QTE = 0
PBE = 0
QBE = 0
Set bd = OpenDatabase("c:bdInformatique FrSous Commande RevendeursQTE_SCo.mdb")
Set enr = bd.OpenRecordset("Select [Quantité totale] From [Quantité totale Commandée] Where N_Article=" & Reference)
While Not enr.EOF
QTE = QTE + enr(0)
enr.MoveNext
Wend
enr.Close: bd.Close
Set enr = Nothing: Set bd = Nothing
Set bd = OpenDatabase("c:Informatique FrPrix de Base FournisseursInf_Prix_Base.mdb")
Set enr = bd.OpenRecordset("Select [QB],[PB] From [PB] Where N_Article=" & Reference)
enr.MoveFirst
While Not enr.EOF
QBE = QBE + enr(0)
PBE = PBE + enr(1)
enr.MoveNext
Wend
enr.Close: bd.Close
Set enr = Nothing: Set bd = Nothing
fnPV = (((PBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) * PBE) / (QBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) - ((PBE - Nz(DSum("[PV]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) / (QBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))))) + (((PBE - Nz(DSum("[PV]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) / (QBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2)))) * QTE)
End Function
Bonjours C'est encore moi. j'ai encore un message d'erreur de type 3085 Fonction QTE non definie. C'est bizarre je ne trouve pas d'erreur dans l'expression. Tout semble correct.Si tu veux regarder le code pour vérifier il est ci-dessous. Sinon Puis-je t'envoyer un bd exemple contenant les 4 mdb requis pour le module inferieur à 200 ko? Si oui peux tu me donner ton adresse email? Merci d'avance Bisous Sonia!!!
Voici le code ci dessus
Option Compare Database
Function fnPV(Reference As Long, N_C2) As Double 'MaN_Article = Nz(MaN_Article) 'MaN_Article = Val(MaN_Article) Dim bd As DAO.Database Dim enr As DAO.Recordset Dim QTE As Long Dim PBE As Long Dim QBE As Long QTE = 0 PBE = 0 QBE = 0 Set bd = OpenDatabase("c:bdInformatique FrSous Commande RevendeursQTE_SCo.mdb") Set enr = bd.OpenRecordset("Select [Quantité totale] From [Quantité totale Commandée] Where N_Article=" & Reference) While Not enr.EOF QTE = QTE + enr(0) enr.MoveNext Wend enr.Close: bd.Close Set enr = Nothing: Set bd = Nothing Set bd = OpenDatabase("c:Informatique FrPrix de Base FournisseursInf_Prix_Base.mdb") Set enr = bd.OpenRecordset("Select [QB],[PB] From [PB] Where N_Article=" & Reference) enr.MoveFirst While Not enr.EOF QBE = QBE + enr(0) PBE = PBE + enr(1) enr.MoveNext Wend enr.Close: bd.Close Set enr = Nothing: Set bd = Nothing fnPV = (((PBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) * PBE) / (QBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) - ((PBE - Nz(DSum("[PV]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) / (QBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))))) + (((PBE - Nz(DSum("[PV]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2))) / (QBE - Nz(DSum("[QM]", "[PV]", "N_Article =" & Reference & " and N_C2 = " & N_C2)))) * QTE) End Function