OVH Cloud OVH Cloud

gestion de compteur

3 réponses
Avatar
groumph
Bonjour,

Une table facture, une table compteur

Je veux g=E9rer les nos de clients, de factures, de commandes, etc ..
avec des compteurs dont les valeurs sont construites =E0 partir
d'=E9l=E9ments divers (ex : no dept + no annee + no s=E9quentiel) et c'est
pourquoi je n'utilise pas de no_auto.

Dans mon form Fact, champ NoFact, j'ai mis =E7a :
Private Sub NoFact_Enter() ' Sur entr=E9e dans le champ NoFact
If Me.NewRecord Then
' DoCmd.SetWarnings False
DoCmd.RunSQL ("SELECT Kteur.NoKteur, Kteur.NoCli, Kteur.NoFact
FROM Kteur WHERE Kteur.NoKteur=3D1;")
DoCmd.RunSQL ("UPDATE Kteur SET Kteur.NoFact =3D [Fact].[NoFact]+1
WHERE (((Kteur.NoKteur)=3D1));")
Me.NoFact =3D Kteur.NoFact
' DoCmd.SetWarnings True
End If
End Sub

Les requ=EAtes fonctionnent en mode SQL direct mais =E0 l'entr=E9e dans le
contr=F4le je me prends une erreur d'=E9x=E9cution 2342 disant que
l'argument pass=E9 =E0 RunSQL n'est pas une expression SQL.

Si qqun =E0 une explication ...
Merci

3 réponses

Avatar
Raymond [mvp]
runsql correspond à une instruction SQL valide pour une requête action ou
une requête définition des données mais pas pour une requête selection.
pour la selection, utiliser DLookup avec une clause where

x = DLookup("NoCli", "Kteur", "[NoKteur]=1")
y = DLookup("NoFact", "Kteur", "[NoKteur]=1")
au lieu de
DoCmd.RunSQL ("SELECT Kteur.NoKteur, Kteur.NoCli, Kteur.NoFact
FROM Kteur WHERE Kteur.NoKteur=1;")

on peut très bien se passer de compteur en allant chercher le dernier numéro
par DMax +1 directement sur la table
--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Nouvelle base Access des communes françaises avec
longitude, latitude et 13246 sites internet officiels
http://ardecheearth.free.fr/basededonnees.htm


"groumph" a écrit dans le message de news:

Bonjour,

Une table facture, une table compteur

Je veux gérer les nos de clients, de factures, de commandes, etc ..
avec des compteurs dont les valeurs sont construites à partir
d'éléments divers (ex : no dept + no annee + no séquentiel) et c'est
pourquoi je n'utilise pas de no_auto.

Dans mon form Fact, champ NoFact, j'ai mis ça :
Private Sub NoFact_Enter() ' Sur entrée dans le champ NoFact
If Me.NewRecord Then
' DoCmd.SetWarnings False
DoCmd.RunSQL ("SELECT Kteur.NoKteur, Kteur.NoCli, Kteur.NoFact
FROM Kteur WHERE Kteur.NoKteur=1;")
DoCmd.RunSQL ("UPDATE Kteur SET Kteur.NoFact = [Fact].[NoFact]+1
WHERE (((Kteur.NoKteur)=1));")
Me.NoFact = Kteur.NoFact
' DoCmd.SetWarnings True
End If
End Sub

Les requêtes fonctionnent en mode SQL direct mais à l'entrée dans le
contrôle je me prends une erreur d'éxécution 2342 disant que
l'argument passé à RunSQL n'est pas une expression SQL.

Si qqun à une explication ...
Merci
Avatar
groumph
OK Raymond, super.

Plus globalement, quelle méthode conseilles-tu pour aller stocker une
valeur dans une table non liée ? A priori, comme son nom l'indique,
DLookup ne permet que de lire, alors ?

Question subsidiaire : quelle est la syntaxe pour appeler en VBA une
requete _selection_ enregistrée ? J'ai bien trouvé DoCmd.OpenQuery
mais dans l'aide ils disent que ça ne concerne que les requêtes
action (à moins que j'aie mal compris).

Merci de la part d'un ardéchois occasionnel (Orgnac)


runsql correspond à une instruction SQL valide pour une requête actio n ou
une requête définition des données mais pas pour une requête sele ction.
pour la selection, utiliser DLookup avec une clause where

x = DLookup("NoCli", "Kteur", "[NoKteur]=1")
y = DLookup("NoFact", "Kteur", "[NoKteur]=1")
au lieu de
DoCmd.RunSQL ("SELECT Kteur.NoKteur, Kteur.NoCli, Kteur.NoFact
FROM Kteur WHERE Kteur.NoKteur=1;")

on peut très bien se passer de compteur en allant chercher le dernier n uméro
par DMax +1 directement sur la table


Avatar
Raymond [mvp]
Plus globalement, quelle méthode conseilles-tu pour aller stocker une
valeur dans une table non liée ? A priori, comme son nom l'indique,
DLookup ne permet que de lire, alors ?


procéder par requête mise à jour.

Question subsidiaire : quelle est la syntaxe pour appeler en VBA une
requete _selection_ enregistrée ? J'ai bien trouvé DoCmd.OpenQuery
mais dans l'aide ils disent que ça ne concerne que les requêtes
action (à moins que j'aie mal compris).
Procéder par recordset est le plus facile.

exemples sur la page: http://officesystem.access.free.fr/ex_requetes_vba.htm

Merci de la part d'un ardéchois occasionnel (Orgnac)
Voilà quelqu'un de bien.

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Nouvelle base Access des communes françaises avec
longitude, latitude et 13246 sites internet officiels
http://ardecheearth.free.fr/basededonnees.htm


"groumph" a écrit dans le message de news:

OK Raymond, super.