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.
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)
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!!
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" <Sonia@discussions.microsoft.com> wrote in message
news:7CB8E720-1434-43D8-A0E5-89288B4870D5@microsoft.com...
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)
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)
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!!
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é.
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é.
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é.
Total=Total+enr(0) et non Total=Total+rs(0), l'habitude de mes noms ;-)
Eric
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!!!
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
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!!!
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
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
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
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
Ben avec ton code je voie pas l'erreur. Peux tu me dire où elle est et me donner la solution ?
Merci Bisous !!! Sonia
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
-----------------------------------------------
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
Ben avec ton code je voie pas l'erreur. Peux tu me dire où elle est et me donner la solution ?
Merci Bisous !!! Sonia
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
Ben avec ton code je voie pas l'erreur. Peux tu me dire où elle est et me donner la solution ?
Merci Bisous !!! Sonia
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 <f_framZZ@hotmail.com> écrivait
news:XnF950F715743721fframZZhotmailcom@207.46.248.16:
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
-----------------------------------------------
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