Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme connection en DAO

21 réponses
Avatar
mumu
bonjour

J'ai l'impression que la connection ne se fait pas comme il faudrait,
pourtant j'ai rajouté les deux lignes de connection de dbCompta pour vous
car
moi elle sont dans une autre procedure et dbCompta est public
en remplacant dbCompta par currentdb ca marche (a condition de mettre la
table Ecriture dans la base qui contient le code bien sur)
cette connection a deja servi dans une autre procedure et a fonctionné sans
probleme pourtant :(
voici mon code

Function TrouverNumPiece()

Dim rstNumPiece As Recordset
Dim SQLNumPiece As String

strCheminCompta = "C:\Compta.mdb"
Set dbCompta = Workspaces(0).OpenDatabase(strCheminCompta, False, False)
'ouverture de la base

SQLNumPiece = "SELECT Ecritures.NumeroPiece FROM Ecritures WHERE
(((Ecritures.NumeroPiece)=DMax(" & """Ccur(NumeroPiece)""" & "," &
"""Ecritures""" & "," & """Not IsNull(NumeroPiece) And Not NumeroPiece =" &
" ' ' " & """)));"
Debug.Print SQLNumPiece

Set rstNumPiece = dbCompta.OpenRecordset(SQLNumPiece) 'je mets le resultat
dans rstNumPiece
TrouverNumPiece = rstNumPiece!NumeroPiece 'c'est le plus grand numero de
piece existant
End Function


Si je remplace
Set rstNumPiece = dbCompta.OpenRecordset(SQLNumPiece)
par
Set rstNumPiece = CurrentDb.OpenRecordset(SQLNumPiece)

ca marche

J'avoue ne pas comprendre pourquoi cela ne marche pas si vous pouviez
m'aider

merci beaucoup

Mumu

10 réponses

1 2 3
Avatar
mumu
Une precision que je viens de trouver

On dirait que ce n'est pas la connection qui deconne finalement

Si je remplace SQLNumPiece par:
SQLNumPiece = "SELECT Ecritures.NumeroPiece FROM Ecritures;"

ma connection se fait correctement et mon recordset contient bien
NumeroPiece

L'erreur que j'obtient est en fait une erreur 3078
d'apres l'aide c'est uneerreur de connection

mais dans le pavé qui m'annonce l'erreur il y a aussi marqué inconnu comme
type d'erreur avec le 3078

Voila je vous ai tous dis
Si quelqu'un pouvais m'aider
Mumu
Avatar
3stone
Salut,

"mumu"
J'ai l'impression que la connection ne se fait pas comme il faudrait,
pourtant j'ai rajouté les deux lignes de connection de dbCompta pour vous
car...

SQLNumPiece = "SELECT Ecritures.NumeroPiece FROM Ecritures WHERE
(((Ecritures.NumeroPiece)=DMax(" & """Ccur(NumeroPiece)""" & "," &
"""Ecritures""" & "," & """Not IsNull(NumeroPiece) And Not NumeroPiece =" &
" ' ' " & """)));"



Il y a au moins un truc bizarre dans le DMax(...

La première expression doit être un nom de champ...
au besoin, entre crochets....
Alors, que fait ton "Ccur(NumeroPiece)" a la place ?


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
mumu
salut et merci du coup de main

mon CCur sert a transformer NumeroPiece en chiffre car il est en lettre
sinon DMax va planter.
en faite ca marche mais en local
je te donne l'expression a mettre en sql directement dans une requette tu
verra que je suis "reglo" avec DMax:

SELECT Ecritures.NumeroPiece
FROM Ecritures
WHERE
((([Ecritures].[NumeroPiece])=DMax("Ccur([NumeroPiece])","Ecritures","not
isnull(NumeroPiece) And not [NumeroPiece]= ' ' ")));

NumeroPiece est le Nom d'un champ de la table Ecritures

Mais effectivement ma formule est un peu bizzare je te l'accorde



La je suis entrain de contourner le probleme differement mais c'est vraiment
vilain et surtout cela sera tres long a executer
et cela m'ennuie beaucoup
1)j'isole par une requette les données du champ NumeroPiece de la Table
Ecriture de la base Compta je met tous dans un recordset

2)Une boucle do until.eof sur le recorset et j'ajoute a une table crée
specialement pour l'occasion mon enregistrement a chaque passage en l'ayant
converti avec CCur.

3)me voila avec mes NumeroPiece dans la table TEcritures de la base
currentdb

4)la j'applique DMax sur mon champ NumeroPiece

et ouf j'ai recuperé le numero de piece le plus grand

reste plus qu'a ajouter la machine a café sur l'ordi pendant l'attente de la
recherche du numero de piece
car quand la compta sera bien rempli la table Ecriture sera volumineuse.

Je ne voie pas comment faire autrement as tu une idée?

Mumu


"3stone" a écrit dans le message de
news:3fd70b26$0$2857$
Salut,

"mumu"
J'ai l'impression que la connection ne se fait pas comme il faudrait,
pourtant j'ai rajouté les deux lignes de connection de dbCompta pour
vous


car...

SQLNumPiece = "SELECT Ecritures.NumeroPiece FROM Ecritures WHERE
(((Ecritures.NumeroPiece)=DMax(" & """Ccur(NumeroPiece)""" & "," &
"""Ecritures""" & "," & """Not IsNull(NumeroPiece) And Not NumeroPiece
=" &


" ' ' " & """)));"



Il y a au moins un truc bizarre dans le DMax(...

La première expression doit être un nom de champ...
au besoin, entre crochets....
Alors, que fait ton "Ccur(NumeroPiece)" a la place ?


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------








Avatar
Rv
Salut,

N'est-il pas possible d'utiliser d'autres requêtes comme:
SELECT Max(ccur(Ecritures.NumeroPiece)) FROM Ecritures WHERE
Ecritures.NumeroPiece<>'' AND Not is null Ecritures.NumeroPiece
ou
SELECT TOP 1 Ecritures.NumeroPiece FROM Ecritures WHERE
Ecritures.NumeroPiece<>'' AND Not is null Ecritures.NumeroPiece ORDER BY
ccur(NumeroPiece) DESC

A+

Rv


"mumu" a écrit dans le message de
news:
bonjour

J'ai l'impression que la connection ne se fait pas comme il faudrait,
pourtant j'ai rajouté les deux lignes de connection de dbCompta pour vous
car
moi elle sont dans une autre procedure et dbCompta est public
en remplacant dbCompta par currentdb ca marche (a condition de mettre la
table Ecriture dans la base qui contient le code bien sur)
cette connection a deja servi dans une autre procedure et a fonctionné
sans

probleme pourtant :(
voici mon code

Function TrouverNumPiece()

Dim rstNumPiece As Recordset
Dim SQLNumPiece As String

strCheminCompta = "C:Compta.mdb"
Set dbCompta = Workspaces(0).OpenDatabase(strCheminCompta, False, False)
'ouverture de la base

SQLNumPiece = "SELECT Ecritures.NumeroPiece FROM Ecritures WHERE
(((Ecritures.NumeroPiece)=DMax(" & """Ccur(NumeroPiece)""" & "," &
"""Ecritures""" & "," & """Not IsNull(NumeroPiece) And Not NumeroPiece ="
&

" ' ' " & """)));"
Debug.Print SQLNumPiece

Set rstNumPiece = dbCompta.OpenRecordset(SQLNumPiece) 'je mets le resultat
dans rstNumPiece
TrouverNumPiece = rstNumPiece!NumeroPiece 'c'est le plus grand numero de
piece existant
End Function


Si je remplace
Set rstNumPiece = dbCompta.OpenRecordset(SQLNumPiece)
par
Set rstNumPiece = CurrentDb.OpenRecordset(SQLNumPiece)

ca marche

J'avoue ne pas comprendre pourquoi cela ne marche pas si vous pouviez
m'aider

merci beaucoup

Mumu




Avatar
3stone
Salut,

"mumu"
mon CCur sert a transformer NumeroPiece en chiffre car il est en lettre
sinon DMax va planter.


D'un coté ton "NumeroPiece" est numérique et de l'autre texte ??


je te donne l'expression a mettre en sql directement dans une requette tu
verra que je suis "reglo" avec DMax:

SELECT Ecritures.NumeroPiece
FROM Ecritures
WHERE
((([Ecritures].[NumeroPiece])=DMax("Ccur([NumeroPiece])","Ecritures","not
isnull(NumeroPiece) And not [NumeroPiece]= ' ' ")));

NumeroPiece est le Nom d'un champ de la table Ecritures



Ici, tu sélectionne le "NumeroPiece" de la table "Ecritures" lorsque "NumeroPiece"
est egal à la plus grande valeur de "NumeroPiece" de cette même table...

Un simple :
Select NumeroPiece From Ecritures Where NumeroPiece = DMax("NumeroPiece","Ecritures");

devrait suffire...
le DMax( ) ne traitant pas des NULL et chaines vides lorsque le champ est renseigné.

ou même avec :
Select TOP 1 NumeroPiece FROM Ecritures Order By NumeroPiece Desc;

qui te donnera tous les "ex aequo" égale au Max de NuméroPiece



--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
mumu
D'un coté ton "NumeroPiece" est numérique et de l'autre texte ??


ben oui je n'ai pas le choix la table Ecritures appartient a un autre
programme celui de la Compta.
et moi mon numero de piece c'est un chiffre (d'ailleur pour l'autre aussi je
ne sais pas pourquoi ils ont été mettre un string dedans m'enfin le
fait est que je ne peux pas y toucher.

Un simple :
Select NumeroPiece From Ecritures Where NumeroPiece DMax("NumeroPiece","Ecritures");

devrait suffire...


Ok pour le null DMax n'est pas derangé avec, mais l'espace par contre le
fait planter
d'ou ma condition where

qu'en pense tu ?
il y a t il un moyen de m'en sortir?

merci
Mumu

"3stone" a écrit dans le message de
news:3fd72e18$0$283$
Salut,

"mumu"
mon CCur sert a transformer NumeroPiece en chiffre car il est en lettre
sinon DMax va planter.


D'un coté ton "NumeroPiece" est numérique et de l'autre texte ??


je te donne l'expression a mettre en sql directement dans une requette
tu


verra que je suis "reglo" avec DMax:

SELECT Ecritures.NumeroPiece
FROM Ecritures
WHERE

((([Ecritures].[NumeroPiece])=DMax("Ccur([NumeroPiece])","Ecritures","not


isnull(NumeroPiece) And not [NumeroPiece]= ' ' ")));

NumeroPiece est le Nom d'un champ de la table Ecritures



Ici, tu sélectionne le "NumeroPiece" de la table "Ecritures" lorsque
"NumeroPiece"

est egal à la plus grande valeur de "NumeroPiece" de cette même table...

Un simple :
Select NumeroPiece From Ecritures Where NumeroPiece DMax("NumeroPiece","Ecritures");

devrait suffire...
le DMax( ) ne traitant pas des NULL et chaines vides lorsque le champ
est renseigné.


ou même avec :
Select TOP 1 NumeroPiece FROM Ecritures Order By NumeroPiece Desc;

qui te donnera tous les "ex aequo" égale au Max de NuméroPiece



--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------







Avatar
mumu
Salut Rv et merci de prendre un moment pour me repondre

le soucis est que je ne peux pas creer la requete physiquement car elle
depand de tables exterieurs a ma base.
je ne peux pas non plus lier cette table, sinon je m'en sortais ( a cause
d'autre liaisons qui se font en automatique)

Bon tous ca pour dire que Max ne marche pas avec VBA ou alors il y a quelque
chose que j'ai mal fait
pour SELECT TOP 1 je vais essayer je te tindrais au courant.

Mumu



"Rv" a écrit dans le message de
news:
Salut,

N'est-il pas possible d'utiliser d'autres requêtes comme:
SELECT Max(ccur(Ecritures.NumeroPiece)) FROM Ecritures WHERE
Ecritures.NumeroPiece<>'' AND Not is null Ecritures.NumeroPiece
ou
SELECT TOP 1 Ecritures.NumeroPiece FROM Ecritures WHERE
Ecritures.NumeroPiece<>'' AND Not is null Ecritures.NumeroPiece ORDER BY
ccur(NumeroPiece) DESC

A+

Rv


"mumu" a écrit dans le message de
news:
bonjour

J'ai l'impression que la connection ne se fait pas comme il faudrait,
pourtant j'ai rajouté les deux lignes de connection de dbCompta pour
vous


car
moi elle sont dans une autre procedure et dbCompta est public
en remplacant dbCompta par currentdb ca marche (a condition de mettre la
table Ecriture dans la base qui contient le code bien sur)
cette connection a deja servi dans une autre procedure et a fonctionné
sans

probleme pourtant :(
voici mon code

Function TrouverNumPiece()

Dim rstNumPiece As Recordset
Dim SQLNumPiece As String

strCheminCompta = "C:Compta.mdb"
Set dbCompta = Workspaces(0).OpenDatabase(strCheminCompta, False, False)
'ouverture de la base

SQLNumPiece = "SELECT Ecritures.NumeroPiece FROM Ecritures WHERE
(((Ecritures.NumeroPiece)=DMax(" & """Ccur(NumeroPiece)""" & "," &
"""Ecritures""" & "," & """Not IsNull(NumeroPiece) And Not NumeroPiece
="


&
" ' ' " & """)));"
Debug.Print SQLNumPiece

Set rstNumPiece = dbCompta.OpenRecordset(SQLNumPiece) 'je mets le
resultat


dans rstNumPiece
TrouverNumPiece = rstNumPiece!NumeroPiece 'c'est le plus grand numero
de


piece existant
End Function


Si je remplace
Set rstNumPiece = dbCompta.OpenRecordset(SQLNumPiece)
par
Set rstNumPiece = CurrentDb.OpenRecordset(SQLNumPiece)

ca marche

J'avoue ne pas comprendre pourquoi cela ne marche pas si vous pouviez
m'aider

merci beaucoup

Mumu








Avatar
mumu
Ben ca marche pas :(

le TOP n'a pas l'air d'aimer les lettres ca me dit

type de données incompatible dans l'expression du critere
n'hesite pas si tu as une autre idée

Mumu


"Rv" a écrit dans le message de
news:
Salut,

N'est-il pas possible d'utiliser d'autres requêtes comme:
SELECT Max(ccur(Ecritures.NumeroPiece)) FROM Ecritures WHERE
Ecritures.NumeroPiece<>'' AND Not is null Ecritures.NumeroPiece
ou
SELECT TOP 1 Ecritures.NumeroPiece FROM Ecritures WHERE
Ecritures.NumeroPiece<>'' AND Not is null Ecritures.NumeroPiece ORDER BY
ccur(NumeroPiece) DESC

A+

Rv


"mumu" a écrit dans le message de
news:
bonjour

J'ai l'impression que la connection ne se fait pas comme il faudrait,
pourtant j'ai rajouté les deux lignes de connection de dbCompta pour
vous


car
moi elle sont dans une autre procedure et dbCompta est public
en remplacant dbCompta par currentdb ca marche (a condition de mettre la
table Ecriture dans la base qui contient le code bien sur)
cette connection a deja servi dans une autre procedure et a fonctionné
sans

probleme pourtant :(
voici mon code

Function TrouverNumPiece()

Dim rstNumPiece As Recordset
Dim SQLNumPiece As String

strCheminCompta = "C:Compta.mdb"
Set dbCompta = Workspaces(0).OpenDatabase(strCheminCompta, False, False)
'ouverture de la base

SQLNumPiece = "SELECT Ecritures.NumeroPiece FROM Ecritures WHERE
(((Ecritures.NumeroPiece)=DMax(" & """Ccur(NumeroPiece)""" & "," &
"""Ecritures""" & "," & """Not IsNull(NumeroPiece) And Not NumeroPiece
="


&
" ' ' " & """)));"
Debug.Print SQLNumPiece

Set rstNumPiece = dbCompta.OpenRecordset(SQLNumPiece) 'je mets le
resultat


dans rstNumPiece
TrouverNumPiece = rstNumPiece!NumeroPiece 'c'est le plus grand numero
de


piece existant
End Function


Si je remplace
Set rstNumPiece = dbCompta.OpenRecordset(SQLNumPiece)
par
Set rstNumPiece = CurrentDb.OpenRecordset(SQLNumPiece)

ca marche

J'avoue ne pas comprendre pourquoi cela ne marche pas si vous pouviez
m'aider

merci beaucoup

Mumu








Avatar
Rv
Alors là c'est moi qui ne comprends plus! Pourquoi ne peut-on pas lancer
(sans créer) une telle requête avec

Dim rstNumPiece As DAO.Recordset
Dim SQLNumPiece As String

strCheminCompta = "C:Compta.mdb"
' ouverture de la base externe
Set dbCompta = Workspaces(0).OpenDatabase(strCheminCompta, False, False)
' Création du texte de la requête
rstNumPiece = "SELECT Max(ccur(Ecritures.NumeroPiece)) FROM Ecritures WHERE
Ecritures.NumeroPiece<>' ' AND Not is null Ecritures.NumeroPiece"
' Execution de la requête
Set rstNumPiece = dbCompta.OpenRecordset(SQLNumPiece)
...

Sinon tu peux te lier ponctuellement avec cette syntaxe :
SELECT Meschamps FROM Mestables IN 'chemindelabaseaccessexterne' WHERE
mesconditions. Ce qui te permettrait de l'éxecuter via CurrentDb

Enfin, le MAX n'est pas une instruction VBA mais une fonction SQL. En dehors
d'une requête SQL il n'a pas de sens.

A+

Rv

"mumu" a écrit dans le message de
news:
Salut Rv et merci de prendre un moment pour me repondre

le soucis est que je ne peux pas creer la requete physiquement car elle
depand de tables exterieurs a ma base.
je ne peux pas non plus lier cette table, sinon je m'en sortais ( a cause
d'autre liaisons qui se font en automatique)

Bon tous ca pour dire que Max ne marche pas avec VBA ou alors il y a
quelque

chose que j'ai mal fait
pour SELECT TOP 1 je vais essayer je te tindrais au courant.

Mumu



"Rv" a écrit dans le message de
news:
Salut,

N'est-il pas possible d'utiliser d'autres requêtes comme:
SELECT Max(ccur(Ecritures.NumeroPiece)) FROM Ecritures WHERE
Ecritures.NumeroPiece<>'' AND Not is null Ecritures.NumeroPiece
ou
SELECT TOP 1 Ecritures.NumeroPiece FROM Ecritures WHERE
Ecritures.NumeroPiece<>'' AND Not is null Ecritures.NumeroPiece ORDER BY
ccur(NumeroPiece) DESC

A+

Rv





Avatar
mumu
Lancer sans créer la requete oui, mais ca marche pas dans ce cas je pense
que c'est a cause du DMax qui doit pas lui plaire

Ton histoire de liaison ponctuel me plait bien
car avec currentdb ca marche (simplifier en test j'ai importé la table
Ecriture) et tout marchais bien
j'essaye ca je te dis ce que ca donne

Mumu

"Rv" a écrit dans le message de
news:
Alors là c'est moi qui ne comprends plus! Pourquoi ne peut-on pas lancer
(sans créer) une telle requête avec

Dim rstNumPiece As DAO.Recordset
Dim SQLNumPiece As String

strCheminCompta = "C:Compta.mdb"
' ouverture de la base externe
Set dbCompta = Workspaces(0).OpenDatabase(strCheminCompta, False, False)
' Création du texte de la requête
rstNumPiece = "SELECT Max(ccur(Ecritures.NumeroPiece)) FROM Ecritures
WHERE

Ecritures.NumeroPiece<>' ' AND Not is null Ecritures.NumeroPiece"
' Execution de la requête
Set rstNumPiece = dbCompta.OpenRecordset(SQLNumPiece)
...

Sinon tu peux te lier ponctuellement avec cette syntaxe :
SELECT Meschamps FROM Mestables IN 'chemindelabaseaccessexterne' WHERE
mesconditions. Ce qui te permettrait de l'éxecuter via CurrentDb

Enfin, le MAX n'est pas une instruction VBA mais une fonction SQL. En
dehors

d'une requête SQL il n'a pas de sens.

A+

Rv

"mumu" a écrit dans le message de
news:
Salut Rv et merci de prendre un moment pour me repondre

le soucis est que je ne peux pas creer la requete physiquement car elle
depand de tables exterieurs a ma base.
je ne peux pas non plus lier cette table, sinon je m'en sortais ( a
cause


d'autre liaisons qui se font en automatique)

Bon tous ca pour dire que Max ne marche pas avec VBA ou alors il y a
quelque

chose que j'ai mal fait
pour SELECT TOP 1 je vais essayer je te tindrais au courant.

Mumu



"Rv" a écrit dans le message de
news:
Salut,

N'est-il pas possible d'utiliser d'autres requêtes comme:
SELECT Max(ccur(Ecritures.NumeroPiece)) FROM Ecritures WHERE
Ecritures.NumeroPiece<>'' AND Not is null Ecritures.NumeroPiece
ou
SELECT TOP 1 Ecritures.NumeroPiece FROM Ecritures WHERE
Ecritures.NumeroPiece<>'' AND Not is null Ecritures.NumeroPiece ORDER
BY



ccur(NumeroPiece) DESC

A+

Rv









1 2 3