OVH Cloud OVH Cloud

Demande d'aide pour résoudre une erreur Microsoft Jet

15 réponses
Avatar
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!!

10 réponses

1 2
Avatar
Daniel Carollo
Bonjour Sonia!

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" wrote in message
news:
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:bdI_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!!



Avatar
Eric
Bonjour Sonia,

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=?=" écrivait
news::

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:bdI_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!!




Avatar
Eric
Re,

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

FnQuantitéTotale = Total + Nz(DSum("[Qt_D]", "[H_Co]", "N_Article =" &
MaN_Article))



Eric

PS: j'ai du mettre : Set bdÛEngine.Workspaces(0).Opendatabase(...)



"=?Utf-8?B?U29uaWE=?=" écrivait
news::

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:bdI_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!!




Avatar
Eric
Petite erreur:

Total=Total+enr(0) et non Total=Total+rs(0), l'habitude de mes noms ;-)

Eric
Avatar
Sonia
J'ai mis ton code sur le module. cela semble fonctionner mais cette fois ci il y a un autre message d'erreur du style suivante.

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!!!
Avatar
Eric
Bonjour Sonia,

Tu n'as pas lu mon post correctif. L'erreur vient du calcul de Total car je
me suis trompé sur le nom de la variable. Remplaces rs(0) par enr(0)


Eric

While Not enr.EOF
Total = Total + rs(0)
enr.MoveNext
Wend



Avatar
Sonia
Ca fonction mais cette fonction a vide c'est aà dire sans enregistrement. Mais avec des enregistrements dans les deux tables les calculs ne font pas

Exemple
bd = "I_résultat.mdb"
Table = "I_Co"
Champ = "N_article" = 1 ; 2
Champ = "Qt_c" = 30 ; 50

Base de donnée = "H_Résultat.mdb"
Table = "H_Co"
Champ = "N_article" = 1 ; 1 ; 1 ; 2 ; 2 ; 2 ;
Champ = "Qt_D" = 36 ; 46 ; 56 ; 50 ; 21 ; 65 ;

Normalement dans le requête je devrai avoir
Champ = "N_article" : Regroupement : 1 ; 2
Champ = Quantité Totale: FnQuantitéTotale([N_Article]) : Regroupement : 168 ; 186

Au lieu de cela je trouve
Champ = "N_article" : Regroupement : 1 ; 2
Champ = Quantité Totale: FnQuantitéTotale([N_Article]) : Regroupement : 0 ; 0

Ben avec ton code je voie pas l'erreur. Peux tu me dire où elle est et me donner la solution ?

Merci
Bisous !!!
Sonia
Avatar
Eric
Re Sonia,

Je viens de créer la même situation que toi et j'obtiens bien les
résultats que tu me donnes.

Copie du résultat de la requête
-----------------------------------------------
N_article Expr1: fnQteTotale([N_Article])
1 168
2 186
-----------------------------------------------


Voici la fonction :
-----------------------------------------------
Function fnQteTotale(Reference As Long)
Dim bd As DAO.Database, rs As DAO.Recordset, strSQL As String
Set bd = DBEngine.Workspaces(0).OpenDatabase("C:bdtest
I_résultat.mdb")
strSQL = ""
strSQL = "Select [Qt_c] from I_Co where N_Article =" & Reference &
";"
Set rs = bd.OpenRecordset(strSQL)
While Not rs.EOF
total = total + rs("Qt_c")
rs.MoveNext
Wend
rs.Close: bd.Close
fnQteTotale = Nz(total) + DSum("[Qt_D]", "[H_Co]", "N_Article=" &
Reference)
End Function
-----------------------------------------------

Eric


"=?Utf-8?B?U29uaWE=?=" écrivait
news::

Ca fonction mais cette fonction a vide c'est aà dire sans
enregistrement. Mais avec des enregistrements dans les deux tables les
calculs ne font pas

Exemple
bd = "I_résultat.mdb"
Table = "I_Co"
Champ = "N_article" = 1 ; 2
Champ = "Qt_c" = 30 ; 50

Base de donnée = "H_Résultat.mdb"
Table = "H_Co"
Champ = "N_article" = 1 ; 1 ; 1 ; 2 ; 2 ; 2 ;
Champ = "Qt_D" = 36 ; 46 ; 56 ; 50 ; 21 ; 65 ;

Normalement dans le requête je devrai avoir
Champ = "N_article" : Regroupement : 1 ; 2
Champ = Quantité Totale: FnQuantitéTotale([N_Article]) :
Regroupement : 168 ; 186

Au lieu de cela je trouve
Champ = "N_article" : Regroupement : 1 ; 2
Champ = Quantité Totale: FnQuantitéTotale([N_Article]) :
Regroupement : 0 ; 0

Ben avec ton code je voie pas l'erreur. Peux tu me dire où elle est
et me donner la solution ?

Merci
Bisous !!!
Sonia




Avatar
Eric
J'ai tapé ca vite et donc j'ai oublié de typer la fonction As Long et de
décharger les variables-objets rs et bd

donc ca donne :
Function fnQteTotale(Reference As Long) as Long
et après les close:
set rs=Nothing
set bd=Nothing

Eric


Eric écrivait
news::

Re Sonia,

Je viens de créer la même situation que toi et j'obtiens bien les
résultats que tu me donnes.

Copie du résultat de la requête
-----------------------------------------------
N_article Expr1: fnQteTotale([N_Article])
1 168
2 186
-----------------------------------------------


Voici la fonction :
-----------------------------------------------
Function fnQteTotale(Reference As Long)
Dim bd As DAO.Database, rs As DAO.Recordset, strSQL As String
Set bd = DBEngine.Workspaces(0).OpenDatabase("C:bdtest
I_résultat.mdb")
strSQL = ""
strSQL = "Select [Qt_c] from I_Co where N_Article =" & Reference &
";"
Set rs = bd.OpenRecordset(strSQL)
While Not rs.EOF
total = total + rs("Qt_c")
rs.MoveNext
Wend
rs.Close: bd.Close
fnQteTotale = Nz(total) + DSum("[Qt_D]", "[H_Co]", "N_Article=" &
Reference)
End Function
-----------------------------------------------

Eric


"=?Utf-8?B?U29uaWE=?=" écrivait
news::

Ca fonction mais cette fonction a vide c'est aà dire sans
enregistrement. Mais avec des enregistrements dans les deux tables les
calculs ne font pas

Exemple
bd = "I_résultat.mdb"
Table = "I_Co"
Champ = "N_article" = 1 ; 2
Champ = "Qt_c" = 30 ; 50

Base de donnée = "H_Résultat.mdb"
Table = "H_Co"
Champ = "N_article" = 1 ; 1 ; 1 ; 2 ; 2 ; 2 ;
Champ = "Qt_D" = 36 ; 46 ; 56 ; 50 ; 21 ; 65 ;

Normalement dans le requête je devrai avoir
Champ = "N_article" : Regroupement : 1 ; 2
Champ = Quantité Totale: FnQuantitéTotale([N_Article]) :
Regroupement : 168 ; 186

Au lieu de cela je trouve
Champ = "N_article" : Regroupement : 1 ; 2
Champ = Quantité Totale: FnQuantitéTotale([N_Article]) :
Regroupement : 0 ; 0

Ben avec ton code je voie pas l'erreur. Peux tu me dire où elle est
et me donner la solution ?

Merci
Bisous !!!
Sonia








Avatar
Sonia
Si tu veux je peux t'envoyer une bd exemple inferieur à 70 ko afin que tu me corriges l'erreur .
Bisous Sonia
1 2