Requete sql pour une connexion DAO

Messages postés
22
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
18 septembre 2005
- - Dernière réponse : Doro81079
Messages postés
398
Date d'inscription
vendredi 22 avril 2005
Statut
Membre
Dernière intervention
24 février 2015
- 17 sept. 2005 à 07:11
bonjour



J'essaye de faire une requete qui ferait la somme des enregistrements
dont l'id_table (champs access) est idtable (variable vb), tout ca,
dans une table nommée plat_table



voici mon code



with dataplat_table

.recordsource = "select sum([plat_table].prix) from
[plat_table] where (([plat_table].[id_table])=idtable) order by
([plat_table].[id_table]);"

.refresh

end with

est ce que vous pouvez me dire ce qui ne va pas?

et comment ensuite, je peux mettre mon résultat dans une variable pour l'exploiter?



merci de votre aide
Afficher la suite 

9 réponses

Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
0
Merci
Salut,
Au niveau de la requete, j'aurais plutôt codé ça :
si idtable est numérique
"select sum([plat_table].prix) from [plat_table] where [plat_table].[id_table]=" & idtable & ";"
si idtable est du texte
"select sum([plat_table].prix) from [plat_table] where [plat_table].[id_table]='" & idtable & "';"

Il est inutile de trier par id_table dans ton cas car il n'y a qu'une seule valeur (idtable) que tu interroges.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
25
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
22 septembre 2005
0
Merci
Essaie ca ca doit marcher

Dim cnCon As ADODB.Connection
Dim sChaine As String
Dim rsCompte As ADODB.Recordset
Dim sRequete As String

'Dim theii As Variant

sChaine = "provider=Microsoft.jet.OLEDB.4.0;data source=PATH DE TA BASE"
Set cnCon = New ADODB.Connection
cnCon.Open sChaine

reponse = "test" la toi t as une variable avec idtable

sRequete = "SELECT sum(prix) as somme FROM plat_table WHERE id_table='" & reponse & "'"

'instancier le recorset
Set rsCompte = New ADODB.Recordset
'exécution de la requete
rsCompte.Open sRequete, cnCon, adOpenDynamic, adLockOptimistic

While (rsCompte.EOF = False)
NOM VARIABLE OU TU VEUX METTRE TON RESULTAT =rsCompte.Fields("somme")
rsCompte.MoveNext
Wend


'fermer le recordset et le détruire
rsCompte.Close
Set rsCompte = Nothing
cnCon.Close

Cordialement
chris
Messages postés
25
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
22 septembre 2005
0
Merci
et comme dit CanisLupus
fait attention au type de champ que tu donnes (ta variable idtable)
Messages postés
22
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
18 septembre 2005
0
Merci
Merci pour vos conseils.

Chrisnyc, quand j'essaye ta solution, ca me met "user-defined type not
defined" sur la ligne Dim cnCon As ADODB.Connection. C'est surement
parce que j'utilise DAO. est ce que tu vois une autre solution?

Canilupus, je ne sais pas comment afficher le résultat de te requete
dans une variable, alors je ne peux pas vraiment tester. est ce que je
dois forcement créer un objet (genre dblist)? est ce que je peux mettre
ca directement dans une variable genre total=.recordset



merci
Messages postés
25
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
22 septembre 2005
0
Merci
c est certainement que tu n as pas ajoute les librairies
ajoute
Microsoft excel object 10 librairy
Microsoft DAO 3.6 object librairy
Microsoft ActiveX data objects recordset 2.8 librairy
Microsoft ActiveX data objects 2.8 librairy

chrisnyc
Messages postés
22
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
18 septembre 2005
0
Merci
dans la ligne rsCompte.Open sRequete, cnCon,
adOpenDynamic, adLockOptimistic, il me met type incompatible dans le
critère???

tu vois ce que ca pourrait être?
Messages postés
25
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
22 septembre 2005
0
Merci
la le probleme vient de ta requete
si id_table est numérique
sRequete = "SELECT sum(prix) as somme FROM plat_table WHERE id_table=" & idtable & " "

si id_table est du texte
sRequete = "SELECT sum(prix) as somme FROM plat_table WHERE id_table='" & idtable & "'"

donc en l occurrence si ca plante maintenant c certainement que ton champ id_table dans ta table plat_table est un numerique donc prend la premiere forme...

La ca doit etre bon!!!!! lol
chris
Messages postés
22
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
18 septembre 2005
0
Merci
bon, comme je n'y arrive pas, je t'explique ce que je voudrais vraiment faire.



je suis connectée à un controle data en dao et je dois faire une
addition des champs prix . Mais si j'additionne tout à partir de
mon controle data, il va prendre tous les enregistrements, alors que je
ne veux prendre que ceux qui sont liés à une certaine table (d'ou mon
where). j'ai esayer d'afficher dans un dbgrid mes résutlats, mais je ne
peux pas compter le nb d'enregistrements pour savoir ou arreter ma
boucle qui compte.



J'ai essayé directement en sql, mais je n'y arrive pas.



Est ce que tu vois ce que je peux faire? est ce que je peux afficher
mon résultat de requete sélectionné (avec le where) dans un autre objet
que dbgrid??



merci beaucoup
Messages postés
398
Date d'inscription
vendredi 22 avril 2005
Statut
Membre
Dernière intervention
24 février 2015
9
0
Merci
bonsoir,

je suis plutôt nul en dao mais à première vue la requête de canislupus me parait exacte donc je pense que tu devrait la tester si ce n'est pas encore fait....(sans les apostrophes comme ça a été préciser)

et ensuite pour ta variable tu la déclare en static avant la requête si tu veux t'en servir dans une autre procédure

static total as currency

et aprés la requête et avant la fermeture du recordset tu mets

total = dataplat_table.recordsource

et logiquement si tu t'en sert dans une autre procédure elle devrait contenir la somme de ton recordset.....

soit dit en passant je te conseille malgré tout ado ,plus simple.....

salut
doro