[ACCESS]Problèmes pour créer requêtes

Répondre
Partager Rechercher
Bonjour,
Cette année je dois faire en projet d'étude sur ACCESS. Notre groupe a choisit la gestion d'une bibliothèque. En cours on a appris les bases sur la gestion de bases de données mais pas de réels cours d'ACCESS que l'on a dû apprendre par nous même avec pour seules aides des séances de TD où il fallait résoudre des exercices basiques. On y apprend les bases d'ACCESS mais pas grand chose...

Donc notre projet avance et est presque fini mais on bloque sur certaines requêtes.

L'une d'elle permettrait de taper, par exemple, un nom d'auteur et ACCESS afficherait le résultat de la recherche. Facile pour l'instant ! Mais on voudrait aussi afficher si le livre est en rayon ou s'il est pour l'instant prêté.
Pour commencer, voici la liste de tous les prêts afin que vous ayez une idée de quoi on parle
http://perso.wanadoo.fr/phantom-razor/Image/Ensemble_pret.png
C'est plus exactement 2 exemplaires (un exemplaire représente un livre physiquement dont un titre de livre peut être présent en plusieurs exemplaires) qui sont intéressant
- exemplaire 11 qui représente un exemplaire de "La chartreuse de Parme" de Stendhal
- exemplaire 5 qui représente un exemplaire de 'Le Tartuffe" de Molière
Ces 2 exemplaires ont la caractéristique d'avoir été emprunté 2 fois, l'un ayant été rendu 2 fois et l'autre 1 fois (donc en cours de prêt actuellement)

Après grosses réflexion, nous avons pu créer cette requête (vous moquez pas on a super galéré pour l'obtenir !)
http://perso.wanadoo.fr/phantom-razor/Image/requete1.png
Donc le critère Comme "*"+[saisir un auteur]+"*" sous Nom Auteur nous permet à l'ouverture de la requête de saisir une partie du nom de l'auteur et d'avoir la liste de tous les livres pour cet auteur.
A noter les Opérations Dernier sous Date Retour Prévu et Date Retour Effectif qui permet d'avoir uniquement la dernière entrée (sinon on aurait l'exemplaire du livre en plusieurs entrées c'est à dire qu'il afficherait tous les prêts et non le livre). Je rappel qu'on fait une requête pour faire des recherches de bouquins, ici par auteur !
Citation :
# Premier : retient la première valeur rencontrée (en parcourant la table du haut en bas). S'applique aussi au texte ;
# Dernier : retient la dernière valeur rencontrée (en parcourant la table du haut en bas). S'applique aussi au texte ;
Par exemple, si on tape Molière on obtiendra ce résultat :
http://perso.wanadoo.fr/phantom-razor/Image/resultat1.png
C'est le résultat que l'on cherchait !!

Mais le problème est que si on tape Stendhal, on obtient ce résultat :
http://perso.wanadoo.fr/phantom-razor/Image/resultat2.png
C'est à dire que c'est le premier prêt qui s'affiche et non le dernier. Il aurait dû afficher les dates 16/04/2006 et 16/04/2006 qui sont les dates du dernier prêt.
En fait il faut mettre l'opération Premier sous Date Retour Prévu et Date Retour Effectif
http://perso.wanadoo.fr/phantom-razor/Image/requete2.png

Mais si on fait cela, les livres non encore rendu (noté par le fait que la valeur Date Retour Effectif soit vide) sont ignorés et c'est alors la date du précédent prêt qui s'affiche. Ainsi pour Molière on aurait ça
http://perso.wanadoo.fr/phantom-razor/Image/resultat3.png

Au lieu de ça
http://perso.wanadoo.fr/phantom-razor/Image/resultat1.png
(comme plus haut)

Comment faire pour résoudre ce problème sachant que je voudrais garder la notification de prêt sous cette forme ?
http://perso.wanadoo.fr/phantom-razor/Image/pret.png

Question bonus : Serait-ce possible de faire afficher dans une même case la date de retour prévu (s'il est en cours de prêt) ou vide (s'il est en rayon)

-----------------------------------------------------------------
2ème problème (désolé je suis nul...)
On voudrait afficher le nombre d'emprunt pour chaque livre afin de connaître les livres les plus empruntés. Facile grâce à cette requête :
http://perso.wanadoo.fr/phantom-razor/Image/requeteA.png

Pour minorer l'ancienneté des livres, on voudrait limiter la période prise en compte, par exemple en ne comptant que les prêts sur une période de 1 ans. On a alors posé le critère >Date()-365
http://perso.wanadoo.fr/phantom-razor/Image/resultatA.png

Mais ACCESS nous affiche rien du tout On a pensé que notre formule était fausse alors on l'a modifié par une vraie date telle que >#01/01/2003# mais encore une fois, ACCESS nous affiche rien du tout :/

Qu'est ce qui va pas dans notre critère ?



[Edit] Les relations
[Edit2] Liens édités
Je veux bien jeter un coup d'oeil, mais rien que là, déjà, je voulais te prévenir que tes liens sont pas bons :s

Redirection wanadoo pour les urls erronnées.

Ah et aussi, pour t'aider, avoir le dessin des tables, ça aiderait aussi ... Alors si tu peux uploader le dessin d'ensemble avec toutes les tables et les liens entre elles ( sur le panneau avec les tables, clic droit : Relations - enfin, en uk c'est Relationship ).
Citation :
Publié par Dienekès
Je veux bien jeter un coup d'oeil, mais rien que là, déjà, je voulais te prévenir que tes liens sont pas bons :s

Redirection wanadoo pour les urls erronnées.
Tu parles des images que j'ai postés Si c'est ça, chez moi ça s'affiche parfaitement pourtant :/

[Edit]A moins que tu parles d'une des images dont j'ai loupé l'adresse ? :/
Il n'y a aucun lien qui marche, mise à part celui que tu as rajouté pour les relations.

Les autres, je dis bien toutes les autres pages que tu as mises en lien, sont redirigées vers :

Citation :
Publié par Wanadoo
Erreur : page introuvable
Vous venez d'être redirigé vers une page d'erreur.
L'adresse URL que vous avez tapée ou le lien sur lequel vous avez cliqué sont erronés.
Mais déjà, avec les relations, on va mieux comprendre ^^
Essaye quand même de corriger pour les autres fichiers. Je dis peut-être une bêtise, mais essaye de donner des nomds de fichier sans accent aigu ni circonflexe. On sait jamais.

[ EDIT = Ok, c'est bon pour les screens maintenant ... mais pfiou, moi aussi, je suis nul en Access ... j'aurais préféré en bon vieux SQL, mais si je te demande toutes les requêtes en SQL, ça va te faire chier, j'imagine ?
Trêve de plaisanterie, je continue de zieuter et te tiens au courant ]
Citation :
Publié par Dienekès
[ EDIT = Ok, c'est bon pour les screens maintenant ... mais pfiou, moi aussi, je suis nul en Access ... j'aurais préféré en bon vieux SQL, mais si je te demande toutes les requêtes en SQL, ça va te faire chier, j'imagine ?
Trêve de plaisanterie, je continue de zieuter et te tiens au courant ]
j'en ai jamais fait -_-
Pour ton premier problème, je comprends pas pourquoi vous utilisez le critère "Premier" ou "Dernier" et non pas "Max" et "Min" ??
Ca reflète quand même mieux ce que vous cherchez à faire, non ?
Mais en plus, mettre deux fois le critère sur deux champs différents, c'est un peu bizarre.

Pour le deuxième soucis, j'ai du mal avec les requêtes Access, vraiment.

Donc, je voulais pas t'y contraindre, mais pour chacune des deux requêtes, pourrais-tu en faire un screen sous forme SQL ? En haut à droite, dans l'écran de la requête, tu as une icône pour choisir la "vue" ... Clique sur "Vue SQL" et fais un screen du résultat. Ca me parlera plus que les screens Access.
Désolé, c'est lourd
Citation :
Publié par Dienekès
Pour ton premier problème, je comprends pas pourquoi vous utilisez le critère "Premier" ou "Dernier" et non pas "Max" et "Min" ??
Ca reflète quand même mieux ce que vous cherchez à faire, non ?
Mais en plus, mettre deux fois le critère sur deux champs différents, c'est un peu bizarre.

Pour le deuxième soucis, j'ai du mal avec les requêtes Access, vraiment.

Donc, je voulais pas t'y contraindre, mais pour chacune des deux requêtes, pourrais-tu en faire un screen sous forme SQL ? En haut à droite, dans l'écran de la requête, tu as une icône pour choisir la "vue" ... Clique sur "Vue SQL" et fais un screen du résultat. Ca me parlera plus que les screens Access.
Désolé, c'est lourd
Si je ne met pas en double, il m'était TOUS les prêts.... et non uniquement le "dernier".
Que je mette min ou max j'ai le même problème concernant Date Retour Effectif
qui, lorsqu'il est vide, est ignoré. Hormis cela, se serait max que serait juste :/

http://perso.wanadoo.fr/phantom-razor/Image/requete1.png
Citation :
SELECT Exemplaire.[Code Exemplaire], Livre.Titre, Auteur.[Nom Auteur], Editeur.[Nom Editeur], Collection.[Nom Collection], Last(Prêt.[Date Retour Prévu]) AS [DernierDeDate Retour Prévu], Last(Prêt.[Date Retour Effectif]) AS [DernierDeDate Retour Effectif]
FROM (Auteur INNER JOIN Livre ON Auteur.[Code Auteur] = Livre.[Code Auteur]) INNER JOIN ((Editeur INNER JOIN (Collection INNER JOIN Exemplaire ON Collection.[Code Collection] = Exemplaire.[Code Collection]) ON Editeur.[Code Editeur] = Collection.[Code Editeur]) INNER JOIN Prêt ON Exemplaire.[Code Exemplaire] = Prêt.[Code exemplaire]) ON Livre.[Code Livre] = Exemplaire.[Code livre]
GROUP BY Exemplaire.[Code Exemplaire], Livre.Titre, Auteur.[Nom Auteur], Editeur.[Nom Editeur], Collection.[Nom Collection]
HAVING (((Auteur.[Nom Auteur]) Like "*"+[saisir un auteur]+"*"));

Pour le 2ème
http://perso.wanadoo.fr/phantom-razor/Image/requeteA.png

Citation :
SELECT TOP 100 Livre.[Code Livre], Livre.Titre, Auteur.[Nom Auteur], Count(Prêt.[Date Prêt]) AS [Nb pret]
FROM (Auteur INNER JOIN Livre ON Auteur.[Code Auteur] = Livre.[Code Auteur]) INNER JOIN (Exemplaire INNER JOIN Prêt ON Exemplaire.[Code Exemplaire] = Prêt.[Code exemplaire]) ON Livre.[Code Livre] = Exemplaire.[Code livre]
GROUP BY Livre.[Code Livre], Livre.Titre, Auteur.[Nom Auteur];
pour le premier probleme esssayes de mettre dans critere <>"" sous date retour effective

Pour le 2eme probleme tu ne peut pas soustraire 365 à une date comme ca car il y a un probleme de format. Il faut passer par la fonction Année()

ex :
>Année(date())-1

PS : l'editeur de requete access c'est mal, vive le sql^^ (enfin faut bien commencer t'es en bts non?)


edit : version sql (j'avais pas vu ton nouveau post)

SELECT Exemplaire.[Code Exemplaire], Livre.Titre, Auteur.[Nom Auteur], Editeur.[Nom Editeur], Collection.[Nom Collection], Last(Prêt.[Date Retour Prévu]) AS [DernierDeDate Retour Prévu], Last(Prêt.[Date Retour Effectif]) AS [DernierDeDate Retour Effectif]
FROM (Auteur INNER JOIN Livre ON Auteur.[Code Auteur] = Livre.[Code Auteur]) INNER JOIN ((Editeur INNER JOIN (Collection INNER JOIN Exemplaire ON Collection.[Code Collection] = Exemplaire.[Code Collection]) ON Editeur.[Code Editeur] = Collection.[Code Editeur]) INNER JOIN Prêt ON Exemplaire.[Code Exemplaire] = Prêt.[Code exemplaire]) ON Livre.[Code Livre] = Exemplaire.[Code livre]
where Prêt.[Date Retour Effectif]<>''
GROUP BY Exemplaire.[Code Exemplaire], Livre.Titre, Auteur.[Nom Auteur], Editeur.[Nom Editeur], Collection.[Nom Collection]
HAVING (((Auteur.[Nom Auteur]) Like "*"+[saisir un auteur]+"*"));

SELECT TOP 100 Livre.[Code Livre], Livre.Titre, Auteur.[Nom Auteur], Count(Prêt.[Date Prêt]) AS [Nb pret]
FROM (Auteur INNER JOIN Livre ON Auteur.[Code Auteur] = Livre.[Code Auteur]) INNER JOIN (Exemplaire INNER JOIN Prêt ON Exemplaire.[Code Exemplaire] = Prêt.[Code exemplaire]) ON Livre.[Code Livre] = Exemplaire.[Code livre]
where to_char(Prêt.[Date Prêt],'YYYY')>=to_char(date(),'YYYY')-1
GROUP BY Livre.[Code Livre], Livre.Titre, Auteur.[Nom Auteur];
Citation :
Publié par odyssee
pour le premier probleme esssayes de mettre dans critere <>"" sous date retour effective

Pour le 2eme probleme tu ne peut pas soustraire 365 à une date comme ca car il y a un probleme de format. Il faut passer par la fonction Année()

ex :
>Année(date())-1

PS : l'editeur de requete access c'est mal, vive le sql^^ (enfin faut bien commencer t'es en bts non?)
Pour le <>"", il dit
Citation :
Cette expression présente une syntaxe incorrecte, ou est trop complexe pour être évaluée. Par exemple, un expression numérique peut contenir des éléments trop compliqués . Essayez de la simplifier en en affectant des parties à des variables.
Pour le 2ème, il fait pareil : il affiche rien. Par contre si je change > en < il affiche tout

Sinon, c'est pour la 3ème année de licence AES, ils veulent qu'on "maîtrise" les bases de données

Citation :
Publié par odyssee
edit : version sql (j'avais pas vu ton nouveau post)

SELECT Exemplaire.[Code Exemplaire], Livre.Titre, Auteur.[Nom Auteur], Editeur.[Nom Editeur], Collection.[Nom Collection], Last(Prêt.[Date Retour Prévu]) AS [DernierDeDate Retour Prévu], Last(Prêt.[Date Retour Effectif]) AS [DernierDeDate Retour Effectif]
FROM (Auteur INNER JOIN Livre ON Auteur.[Code Auteur] = Livre.[Code Auteur]) INNER JOIN ((Editeur INNER JOIN (Collection INNER JOIN Exemplaire ON Collection.[Code Collection] = Exemplaire.[Code Collection]) ON Editeur.[Code Editeur] = Collection.[Code Editeur]) INNER JOIN Prêt ON Exemplaire.[Code Exemplaire] = Prêt.[Code exemplaire]) ON Livre.[Code Livre] = Exemplaire.[Code livre]
where Prêt.[Date Retour Effectif]<>''
GROUP BY Exemplaire.[Code Exemplaire], Livre.Titre, Auteur.[Nom Auteur], Editeur.[Nom Editeur], Collection.[Nom Collection]
HAVING (((Auteur.[Nom Auteur]) Like "*"+[saisir un auteur]+"*"));

SELECT TOP 100 Livre.[Code Livre], Livre.Titre, Auteur.[Nom Auteur], Count(Prêt.[Date Prêt]) AS [Nb pret]
FROM (Auteur INNER JOIN Livre ON Auteur.[Code Auteur] = Livre.[Code Auteur]) INNER JOIN (Exemplaire INNER JOIN Prêt ON Exemplaire.[Code Exemplaire] = Prêt.[Code exemplaire]) ON Livre.[Code Livre] = Exemplaire.[Code livre]
where to_char(Prêt.[Date Prêt],'YYYY')>=to_char(date(),'YYYY')-1
GROUP BY Livre.[Code Livre], Livre.Titre, Auteur.[Nom Auteur];
Je fais copier/coller ? Si c'est ça j'ai ça, les 2 mettent des messages d'erreurs :/
Sinon, si j'ai copie/colle le sql, est-ce que se sera visible dans les requêtes comme moi je les fais (avec le tableau) car j'aimerais bien comprendre...

Vous voulez peut être que j'upload le ficher ACCESS ?
[Edit] j'ai upload le fichier ici
La 1ère requête s'appelle "Recherche par auteur" et la 2ème "Compte"
Ca marche pas du tout votre raisonnement pour l'histoire de savoir si un exemplaire est présent ou pas lors de la recherche par auteur.

Quand, dans ton premier message, tu disais obtenir le bon résultat avec Molière, c'est faux ! Avec les données rentrées dans la table Prêt, l'exemplaire 5 devrait n'afficher aucune date de rentrée effective. Or, avec la méthode que vous utilisez, vous affichez comme date de rentrée effective celle du premier prêt, pas du dernier. ( Explication : comme tu sélectionnes le LAST ou bien le MAX de la date de retour effective sans regrouper sur tous les autres champs, il ne crée pas la concordance d'enregistrement sur toute la ligne. Tes lignes créées sont donc des mélanges de lignes de la table Prêt. )

Essayez de remplir plus de données dans vos tables. Là, vous en avez juste assez pour vous conforter dans vos idées mais pas assez pour relever des incohérences en faisant plus de test. Avec plus de données et en épluchant mieux les données, vous auriez vu le problème.

Par contre, pour ce qui est de le résoudre, je ne vois pas trop comment faire à partir de votre situation.

Personnellement, j'ajouterai une colonne dans la table Prêt. Un booléen, coché si le livre est rendu, et vide sinon. Et votre requête de Retour Prêt mettrait à jour ce champ en même temps que la date de retour.

Ensuite, pour la requête de recherche de livre par auteur, vous excluez les livres dont la case "Rendu" ( celle à ajouter ) n'est pas remplie.

Seulement, et c'est là que le bât blesse, c'est que votre requête ne prendra pas en compte les livres qui n'ont jamais été prêté !! Puisqu'ils ne sont pas présents dans la table Prêt, la requête ne les scanne pas.

L'idée est donc de faire un scan complet de tous les exemplaires de livres correspondant à l'auteur entré en paramètre et ensuite de lui soustraire l'ensemble des exemplaires qui ne sont pas encore rendus avec ce même auteur. ( tous moins ceux prêtés = tous ceux qui sont dispos )
Je voulais le faire en SQL, mais ce con d'Access n'accepte pas l'opérateur MINUS ou EXCEPT entre deux sous-requêtes SQL. Voilà une des raisons qui me font détester Access.

Bref, j'ai pas encore réussi, mais ça vous donne une idée des problèmes que vous avez, déjà.
Citation :
Publié par Dienekès
Quand, dans ton premier message, tu disais obtenir le bon résultat avec Molière, c'est faux !
C'était pour dire que j'attendais ce résultat, après je précise que pour ce cas uniquement c'était faux et non dans l'absolue....

Citation :
Publié par Dienekès
Essayez de remplir plus de données dans vos tables. Là, vous en avez juste assez pour vous conforter dans vos idées mais pas assez pour relever des incohérences en faisant plus de test. Avec plus de données et en épluchant mieux les données, vous auriez vu le problème.
Arg en ajoutant un livre de Molière (sans le faire prêter) il n'apparaît plus dans la recherche comme tu l'as dit

Arg c'est encore pire que je ne pensais :/

Citation :
Personnellement, j'ajouterai une colonne dans la table Prêt. Un booléen, coché si le livre est rendu, et vide sinon. Et votre requête de Retour Prêt mettrait à jour ce champ en même temps que la date de retour.
J'avais abordé cette possibilité depuis le départ mais pour des raisons d'historique on a opté pour gérer les prêts à partir de date. Si possible, j'espère pouvoir rester ainsi . Enfin c'est vous les pro du SQL, si je dois passer par là, je le ferais
Citation :
Publié par Dienekès
Seulement, et c'est là que le bât blesse, c'est que votre requête ne prendra pas en compte les livres qui n'ont jamais été prêté !! Puisqu'ils ne sont pas présents dans la table Prêt, la requête ne les scanne pas.
J'ai trouvé comment faire pour que la requête n'ignore pas les exemplaires jamais prêté !
Arpès avoir ouvert la requête en mode création, il faut aller dans Affichange/Propriétés de la jointure
Dans la fenêtre qui s'ouvre, il faut mettre :
http://perso.wanadoo.fr/phantom-razor/Image/propriete1.png

En SQL ça donne ça (je sais pas si ça a changé le programme :/)

Citation :
SELECT Exemplaire.[Code Exemplaire], Livre.Titre, Auteur.[Nom Auteur], Editeur.[Nom Editeur], Collection.[Nom Collection], First(Prêt.[Date Retour Prévu]) AS [PremierDeDate Retour Prévu], First(Prêt.[Date Retour Effectif]) AS [PremierDeDate Retour Effectif]
FROM (Auteur INNER JOIN Livre ON Auteur.[Code Auteur] = Livre.[Code Auteur]) INNER JOIN ((Editeur INNER JOIN (Collection INNER JOIN Exemplaire ON Collection.[Code Collection] = Exemplaire.[Code Collection]) ON Editeur.[Code Editeur] = Collection.[Code Editeur]) LEFT JOIN Prêt ON Exemplaire.[Code Exemplaire] = Prêt.[Code exemplaire]) ON Livre.[Code Livre] = Exemplaire.[Code livre]
GROUP BY Exemplaire.[Code Exemplaire], Livre.Titre, Auteur.[Nom Auteur], Editeur.[Nom Editeur], Collection.[Nom Collection]
HAVING (((Auteur.[Nom Auteur]) Like "*"+[saisir un auteur]+"*"));
Par contre j'ai trouvé un autre problème. Un livre (représenté par son titre) peux être présent en plusieurs exemplaires. Or, la fonction recherche ne montre qu'un exemplaire....
[Edit]En fait non, j'avais modifié le titre (et l'auteur) sans faire exprès dans un des formulaires
Nan mais tu comprends pas ce que je veux te dire, pour l'histoire des First. Ca ne peut pas marcher comme ça. Je ne peux pas non plus te l'expliquer.
Mais faire du traitement sur les enregistrements, avec une opération sur deux champs différents et du regroupement sur les autres, ça ne colle pas. Vérfiie bien, tu verras qu'il existe des cas où les résultats sont erronés.

C'est pour cela qu'il est nécessaire d'inclure une colonne "Rendu" en Vrai/Faux. Mais ça ne change rien à tes tables. Tu peux les laisser à l'identique, et continuer à utiliser les dates pour le reste. Mais pour cette histoire de détecter si un exemplaire est sorti ou non, il te faut un booléen.

D'autre part, ce dont tu parles ce sont les Jointures externes ( Left et Right Join ) seulement le soucis, c'est que même en faisant cette jointure, en posant la condition que "Rendu" doit être vrai, on se retrouve avec aucun enregistrement retourné.

Bref, je vois où ça cloche, mais je n'arrive pas à le résoudre en Access. La méthode que je voulais utiliser en SQL direct ( d'abord avec MINUS puis avec NOT IN ) ne marche pas.
J'ai même demandé à un collègue, mais il sèche

Je continue à regarder. Je voulais juste que tu ne continues pas sur la voie que tu empruntes et qui est indubitablement mauvaise.
Citation :
SELECT Exemplaire.[Code Exemplaire], Livre.Titre, Auteur.[Nom Auteur], Collection.[Nom Collection], Editeur.[Nom Editeur]
FROM (Auteur INNER JOIN Livre ON Auteur.[Code Auteur] = Livre.[Code Auteur]) INNER JOIN (Editeur INNER JOIN (Collection INNER JOIN Exemplaire ON Collection.[Code Collection] = Exemplaire.[Code Collection]) ON Editeur.[Code Editeur] = Collection.[Code Editeur]) ON Livre.[Code Livre] = Exemplaire.[Code livre]
WHERE (((Exemplaire.[Code Exemplaire]) Not In (SELECT Prêt.[Code exemplaire] FROM Prêt WHERE (Prêt.[Date Retour Effectif] IS NOT NULL))) AND ((Auteur.[Nom Auteur]) Like "*"+[saisir un auteur]+"*"));

Bon, je crois que c'est bon. Mais qu'est-ce que ça m'agace de travailler avec Access !!

J'ai passé plein de temps pour des histoire de parenthésage et autres conneries. Et pis je comprends pas pourquoi il m'envoyait bouler au début. Mais là, ça a l'air bon. A vérifier tout de même.
Ptite remarque tout de même, c'est une solution qui affichera tous les exemplaires dont l'auteur est passé en paramètre et qui sont disponibles ! Si vous ne voulez qu'un exemplaire par titre d'ouvrage, va falloir faire du GROUP BY.

Et au passage, vous apprendrez, tes collègues de projet et toi, qu'on ne met jamais des noms avec des espaces et des accents aux champs des tables !
Même si Access l'accepte, faut pas le faire. C'est à cause de ça qu'il y a tous les crochets, c'est grave lourd.


ATTENTION : j'ai pris compte de la modification dont je t'ai parlé avec un champ supplémentaire pour la table Prêt, à savoir "rendu" ....
Enfin, tout ça, c'était pour le premier problème. Le second, je me souviens même plus, faut que j'y regarde.

EDIT = J'ai modifié la requête. En fait, j'hallucinais avec mon histoire de booléen, on peut raisonnablement tabler sur l'absence de date de retour effective pour savoir si un bouquin est là ou pas. Ce que vous avez fait avec la requête pour connaitre les bouquins dispos.
Bref, je suis rouillé moi

Et pis pour le problème avec les dates, c'est résolu ou pas ? parce que là, je suis plus trop motivé. Y'a qu'à voir, je fais le malin, mais il me faut du temps pour trouver une réponse
J'ai lu ce que tu avais mis avant modif et il y a avait une erreur. J'ai regardé et j'ai vu où elle provenait
Citation :
SELECT Exemplaire.[Code Exemplaire], Livre.Titre, Auteur.[Nom Auteur], Prêt.[Date Prêt], Prêt.[Date Retour Effectif]
FROM (Auteur INNER JOIN Livre ON Auteur.[Code Auteur] = Livre.[Code Auteur]) INNER JOIN (Exemplaire LEFT JOIN Prêt ON Exemplaire.[Code Exemplaire] = Prêt.[Code exemplaire]) ON Livre.[Code Livre] = Exemplaire.[Code livre]
WHERE (((Exemplaire.[Code Exemplaire]) Not In (SELECT [Prêt]![Code exemplaire]
FROM Prêt
WHERE (((Prêt.rendu)=False)))));
Donc ça marche mais.... c'est pas la bonne requête :/
En effet, elle ne fait qu'afficher le livre en rayon ! Mais je te remercie je cherchais justement aussi un requête permettant d'afficher que les livres non prêter
Ce que je voulais était une fonction recherche (par exemple tu veux savoir si y a du MOLIERE dans la bibliothèque) qui afficherait TOUS les livres. Si le livre est en cours de prêt, il dit jusqu'à quand le livre sera rendu (donné par la variable Date Retour Prévu). j'ai du mal expliquer, désolé

je regarde ce que tu as édité et je t'en reparle
Citation :
Publié par Gros BaloOr
j'ai du mal expliquer, désolé
C'est bien là le soucis . Bon, j'y ai déjà passé pas mal de temps, alors je préviens que je risque de ne pas me repencher dessus, même si le dernier truc foire. Désolé
Merci en tout cas ^^

Sinon tu as fait quelques fautes de parenthèses mais ça marche (enfin si on veut juste les livres non prêté )

Citation :
SELECT Exemplaire.[Code Exemplaire], Livre.Titre, Auteur.[Nom Auteur], Collection.[Nom Collection], Editeur.[Nom Editeur]
FROM (Auteur INNER JOIN Livre ON Auteur.[Code Auteur] = Livre.[Code Auteur]) INNER JOIN (Editeur INNER JOIN (Collection INNER JOIN Exemplaire ON Collection.[Code Collection] = Exemplaire.[Code Collection]) ON Editeur.[Code Editeur] = Collection.[Code Editeur]) ON Livre.[Code Livre] = Exemplaire.[Code livre]
WHERE (((Exemplaire.[Code Exemplaire]) Not In (SELECT [Prêt]![Code exemplaire]
FROM [Prêt]
WHERE ((Prêt.[Date Retour Effectif]) IS NOT NULL) AND ((Auteur.[Nom Auteur]) Like ("*"+[saisir un auteur]+"*")))));
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés