Requete sql pour une connexion DAO

titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005 - 15 sept. 2005 à 19:49
Doro81079 Messages postés 380 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

9 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
15 sept. 2005 à 20:04
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 !?
0
chrisnyc Messages postés 25 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 22 septembre 2005
15 sept. 2005 à 20:18
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
0
chrisnyc Messages postés 25 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 22 septembre 2005
15 sept. 2005 à 20:20
et comme dit CanisLupus
fait attention au type de champ que tu donnes (ta variable idtable)
0
titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005
15 sept. 2005 à 21:13
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chrisnyc Messages postés 25 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 22 septembre 2005
15 sept. 2005 à 22:03
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
0
titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005
15 sept. 2005 à 22:31
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?
0
chrisnyc Messages postés 25 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 22 septembre 2005
16 sept. 2005 à 01:19
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
0
titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005
16 sept. 2005 à 09:31
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
0
Doro81079 Messages postés 380 Date d'inscription vendredi 22 avril 2005 Statut Membre Dernière intervention 24 février 2015 56
17 sept. 2005 à 07:11
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
0
Rejoignez-nous