cs_mimamimi
Messages postés8Date d'inscriptionjeudi 22 mars 2012StatutMembreDernière intervention 2 avril 2013
-
26 mars 2013 à 16:37
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 2013
-
11 avril 2013 à 00:26
Bonjour à tous...
je suis un débutant en vb6 et j'ai un problème dans l'utilisation des jointures...
Alors j'ai 3 tables
livres(numlivre;titre,auteur..)
etudiants(numéro,nom,prénom..)
prêt(id livre;id étudiant,date de prêt)
je veux ajouter un emprunte dans la table prêt pour dire que tel étudiant est prêt tel livre
voila mon code:
private sub cmdOk-click()
req="select * from pret"
set rsAjout=base.openrecordset(req)
rsAjout.addnew
rsAjout![id etudiant]=txteidetudiant
rsAjout![id livre]=txtidlivre
rsAjout![date de pret]=txtdate
rsAjout.update
rsAjout.close
end sub
Il marche bien mais le problème poser est que ce code peut ajouter n'importe quel étudiant ou livre même si cet étudiant n’existe pas dans la table étudiants
si je fais la jointure entre les tables ça marche pas....???????
voila ma requête avec la jointure:
"select * from pret,etudiants,livres where pret.[id etudiant]=etudiants.numero and prêt.[id livre]=livres.numlivre"
vraiment j'ai pas trouvé la solution
j'espère que vous pouvez m'aider....SVP....
merci
"select pret.idetudiant,pret.idlivre, pret.datepret from (pret inner join etudiant on pret.idetudiant=etudiant.idetudiant)inner join livre on pret.idlivre=livre.idlivre"
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 28 mars 2013 à 22:39
Bonsoir,
@MINDONGO : je n'ai pas l'impression que ça fonctionnera, je crois que VB6 essaie de se débrouiller avec le SQL
pour en extraire les champs qui l'intéressent ainsi que le nom de la table... [Pas testé]
Le problème c'est que tu ne sais pas ce que VB6 fait pour toi en réalité...
Ton Update après un AddNew fera je crois un INSERT INTO basé sur le SELECT utilisé pour ouvrir le rs.
Ici, que tu passes par un SQL fait main ou par un rs pour faire la modification ne changera rien
puisque je ne pense pas qu'Access vérifie si une ligne avec tel ou tel ID existe dans l'autre table.
[En tout cas, je ne me souviens pas d'avoir eu le moindre message d'erreur concernant un problème de clé étrangère.]
C'est alors à toi de ne pas permettre l'insertion de n'importe quoi. Et de toute manière, je ne comprends déjà pas
pourquoi l'utilisateur est obligé de taper l'ID lui-même : pourquoi n'utilises-tu pas des listes déroulantes ?
Un autre conseil : force-toi à déclarer tes variables avec Option Explicit, ça t'évitera de perdre un temps bête
et ça rendra ton code plus lisible puisque le lecteur verra tout de suite lesquelles sont utilisées.
VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
cs_mimamimi
Messages postés8Date d'inscriptionjeudi 22 mars 2012StatutMembreDernière intervention 2 avril 2013 31 mars 2013 à 18:51
Bj à tous
merci pour votre attention
Cette requête ("select pret.idetudiant,pret.idlivre, pret.datepret from (pret inner join etudiant on pret.idetudiant=etudiant.idetudiant)inner join livre on pret.idlivre=livre.idlivre") oblige l'utilisateur d’insérer un livre et un étudiant qui sont existe déjà alors qu 'il peut insérer un nouveau livre ou étudiant ....?
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 31 mars 2013 à 20:04
Et pourquoi il devrait s'amuser à retenir deux nombres inutilement alors que l'application peut proposer la liste des étudiants/livres dans une liste déroulante ??
VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
cs_mimamimi
Messages postés8Date d'inscriptionjeudi 22 mars 2012StatutMembreDernière intervention 2 avril 2013 2 avril 2013 à 16:05
Si j'utilise une liste déroulante il faut la mettre à jour car j'ai une autre fenêtre dont l'admin peut ajouter un livre/étudiant
donc à chaque ajout dans la table étudiants/livres il faut l'ajouter dans la listbox concernée.... mais comment..?
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 11 avril 2013 à 00:26
Il suffit de rappeler la fonction qui peuple la liste déroulante à chaque fois que tu fais une modif dans la table...
Si tu as plusieurs utilisateurs qui modifient la base en même temps, tu dois procéder autrement :
la liste doit être systématiquement recréée, donc la fenêtre qui la contient (Ajouter un prêt) ne doit pas rester ouverte.
VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question