bruce207
Messages postés106Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention 2 mai 2012
-
26 avril 2008 à 20:15
gibozsec
Messages postés318Date d'inscriptionmardi 27 mai 2003StatutMembreDernière intervention11 mars 2010
-
28 avril 2008 à 21:56
Bonjour,
je réalise une application de gestion des membres d'une coopérative, mon probleme est le suivant : j'ai une table1 dans laquelle se trouve une colonne date_remb, une autre table2 dans laquelle se touve un colonne stat_remb et une table3 dans laquelle se trouve la colonne nom_mem les trois tables ont en commun la colonne mat_mem. Le truc c'est que je voudrais faire une requete qui portent sur les trois tables, laquelle me renvoie les noms des membres (nom_mem) dont les dates de remboursement (date_remb) ont deja depassé la date du jour (actuel ),et dont le statut du remboursement (stat_remb) est differrent de 'Total' Si quelqu'un peut m'aider je le remercie d'avance.
bruce207
Messages postés106Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention 2 mai 2012 27 avril 2008 à 21:54
en fait voici ma requete à probleme :rst.Open " SELECT emprunt.*, membre.*, remboursement.* FROM emprunt Inner join (remboursement inner join membre on remboursement.mat_mem membre.mat_mem ) on emprunt.mat_mem remboursement.mat_mem where date_remb < date ", cnx, adOpenStatic, adLockOptimistic, adCmdText
en fait je me dis que date ici me renvoie la date du jour comme en VB que j'utilise (je ne connais pas la fonction en sql)
et j'ai l'erreur suivante :
Erreur d'exécution '-2147217904(800e10)':
Aucune valeur donnée pour un ou plusieurs des paramètres requis.
gibozsec
Messages postés318Date d'inscriptionmardi 27 mai 2003StatutMembreDernière intervention11 mars 2010 27 avril 2008 à 23:36
(re)Bonjour,
Pour le select il vaut mieux ne pas utiliser * mais sélectionner les champs à recupèrer
SELECT t3.nom_mem,t1.date_remb, t2.stat_remb, t1.mat_mem
Ca accelère l'execution des requetes
Liste des tables à lier
Les alias (AS t1, ...) ne sont pas obligatoires mais c'est plus facile pour préfixer les champs
FROM table1 as t1, table2 as t2, table3 as t3
Filtrage des résultats
->date de remboursement qui est expirée, elle doit être inférieure à la date actuelle
->now() renvoit la date courrante (fonction sql)
-> différent de 'Total' NOT LIKE "Total". Le NOT LIKE permet à sgbd de savoir que c'est une chaine qu'il va comparer et donc de gagner du temps d'execution
WHERE t1.date_remb < now()
AND t2.stat_remb NOT LIKE "Total"
jointure des tables
J'utilise des comparaisons de champs plutot que des 'join' parce que ça permet de lier les tables entre elles après filtrage
Si mat_men est une chaine il vaut mieux utiliser 'LIKE' plutot que '=' (même raisons que plus haut)
Avec les 'join' les tables sont liées entre elles puis ensuite filtrées. Pour obtenir 40 résultats sur des tables de 40000 enregistrements chacune, le join est pas très optimisé (ou alors je sais pas les faire, je veux bien qu'on m'explique)
AND t1.mat_mem = t2.mat_mem
AND t1.mat_mem = t3.mat_men
Bref ça donne :
SELECT t3.nom_mem,t1.date_remb, t2.stat_remb, t1.mat_mem
FROM table1 as t1, table2 as t2, table3 as t3
WHERE t1.date_remb < now()
AND t2.stat_remb NOT LIKE "Total"
AND t1.mat_mem = t2.mat_mem
AND t1.mat_mem = t3.mat_men
bruce207
Messages postés106Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention 2 mai 2012 28 avril 2008 à 14:58
J'ai testé la requete elle n'a pas fonctionné, ça m'affiche l'erreur precedente. Mais sinon dans ma requete j'ai changé date par now() et tout va bien
Cependant j'ai un autre probleme : je dois maintenant selectionner et afficher les membres ayant depassé de 37 jours leurs dates limites de remboursement, je ne connais pas la fonction en sql, mais sais que pour avoir cette date en VB on utilise DateAdd("d",37, Madate)
je pense à un requete similaire à ça :
"SELECT date_remb FROM emprunt where DateAdd("d", 37, date_remb) < now() "
j'espere que la syntaxe est bonne, donc maintenant je cherche la fonction similaire à DateAdd() en sql ou une autre syntaxe qui ferait ce que je recherche
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?