Demande d'aide pour résoudre une erreur Microsoft Jet
Le
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.
Pouvez me dire ou est l'erreur et me l'a corrigé.
Merci
Bisous Sonia!!
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.
Pouvez me dire ou est l'erreur et me l'a corrigé.
Merci
Bisous Sonia!!

Poser une question


Pourquoi faire simple alors qu'il est si simple de faire complique....
D'une part, la creation et l'ouverture d'un recordset (surtout sur une base
differente de la courante) pour chaque enregistrement de la table risque de
rendre cette requete tres-tres lente, d'autre part les ressources (memoire
en particulier) necessaires seront elevees.
Pour en venir a votre module, vous ouvrez un recordset et n'en faites rien.
Le DSum() essaie de prendre des donnees de I_Co, qui ne se trouve pas dans
la base courante. Le message d'erreur est donc bien correct.
Avez-vous explore la possibilite de travailler avec des table attachees? Ce
serait, a mon avis, la solution la plus adaptee au probleme que vous nous
exposez. Et de grace, n'ouvrez surtout pas un recordset a chaque
enregistrment...
--
Daniel :-)
Computing Technologies International - www.computing-tech.com - We
provide solutions...
"Sonia" news:
La fonction DSum provoque l'erreur. Elle ne doit travailler que sur la bd
en cours c'est à dire H_Resultat, d'où le message : I_Co introuvable.
Pour contourner le problème :
Sur ton recordset enr, fais une boucle pour calculer/trouver la quantité
Qt_c soit en parcourant tout le jeu soit avec la méthode Find critere.
A la sortie tu auras ainsi la quantite de la table I_Co de la base
I_Resutat. A ce montant, tu ajoutes le Dsum sur la table H_Co de la base
H_Resultat et tu l'affectes à ta fonction. Tu obtiendras le résultat
désiré.
A+
Eric
"=?Utf-8?B?U29uaWE=?=" news::
Dim Total as long <----------------
Total=0
While not enr.eof
Total=Total+rs(0)
enr.movenext
Wend
enr.close:bd.close:set enr=Nothing:set bd=Nothing
Eric
PS: j'ai du mettre : Set bdÛEngine.Workspaces(0).Opendatabase(...)
"=?Utf-8?B?U29uaWE=?=" news::
Total=Total+enr(0) et non Total=Total+rs(0), l'habitude de mes noms ;-)
Eric
Erreur de compilation
Sub ou fonction non definie
code insére
Option Compare Database
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 Total As Long
Set BD = Opendatabase("c:bdI_résultat.mdb")
Set enr = BD.OpenRecordset("Select [Qt_c] From [I_Co] Where N_Article =" & MaN_Article)
Total = 0
While Not enr.EOF
Total = Total + rs(0)
enr.MoveNext
Wend
enr.Close: BD.Close: Set enr = Nothing: Set BD = Nothing
FnQuantiteTotale = Total + Nz(DSum("[Qt_D]", "[H_Co]", "N_Article =" & MaN_Article))
End Function
Merci
Bisous!!!