Fabal01
Messages postés48Date d'inscriptionlundi 11 mai 2009StatutMembreDernière intervention 8 janvier 2010
-
19 mai 2009 à 09:01
fefiche
Messages postés3Date d'inscriptionjeudi 13 mai 2010StatutMembreDernière intervention17 février 2011
-
1 juil. 2010 à 10:24
Salut,merci de votre aide,j'aimerais savoir comment supprimer un enregistrement dans une table access 'Employé' composée d'un champ commun avec la table 'Grade',la base de données est crée avec le sgbd ACCESS. A chaque fois que j'essai de supprimer un enregistrement de la table 'Employé', delphi signale une exception.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 20 mai 2009 à 17:33
bonjour,
si tu as pris la solution 2, c'est très simple..
le mcd ne sert plus à grand chose dans ce cas..
tu crées des deux tables dans acces et tu poses une jointure(pour bien comprendre, mais non obligatoire dan ton cas) entre Grade et Employé (et pas l'inverse sutout !)
Sers toi des composants ADO
Une forme avec des TDBEdit tous reliés à Employé sauf un
qui sera un TdbLookupCombobox qui sera relié à la table Grade afin d'avoir une liste déroulante (le grade s'affiche ici grace au codegrade)
Fabal01
Messages postés48Date d'inscriptionlundi 11 mai 2009StatutMembreDernière intervention 8 janvier 20101 20 mai 2009 à 09:11
Merci,là tu m'aide pas beaucoup j'ai un travail à remettre dans deux jours!j croyait que les jointure était utilisées juste dans les requètes et pour la structure de la table je te la donne:Employé (Matricule,nom,prenom,date_nais,lieu_nais,code_grade*) et Grade(code_grade,dsignation) règle de gestion:un employé possède un et un seul grade(1,1).un grade appartient à un ou plusieur employé(1,N) Essai de faire quelque chose sinon je risque de devenir fous.MERCI
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 19 mai 2009 à 10:06
Bonjour,
Solution 1:
On dit que la relation Employé/Gade est une liaison N-N
puisque pour un grade on peut avoir plusieurs employés
et des employés peuvent avoir des grades différents
donc, il faut trois tables :
Employé Employé_Grade et Grade
et mettre en place deux relation 1-N entre
Employé et Employé_Grade et
Grade et Employé_Grade
Ensuite, une fois la table des Grades initialisée, on ajoute un nouvel employé avec son grade (liste déroulante), ce qui déclenche deux entrées:
une dans la table Employé et une autre dans le table
Empoyé_Grade.
Dans cette hypothèse, la suppression d'un grade doit-elle entraîner la suppression des enregistrements liés de la table Employé_Grade ?
pas si sûr..
(il faut prévoir une procédure de ré-affectation des grades ou plus simplement interdire la suppression des grades déjà affectés)
il faut donc pouvoir modifier le grade de l'employé..
En revanche, la suppression d'un employé entraîne nécessairement la suppression de l'enregistrement lié de la table Employé_Grade.
Donc dans ce cas, il faut mettre en place une cascade.
Solution 2: (plus siumple)
La table des Grades est une table qui varie pratiquement pas..
donc, on met en place une relation 1-N entre la table des Grade et la table Employé
On ajoute un nouvel employé et on choisit son grade dans une liste déroulante.
La suppression d'un employé n'affecte pas la table des Grade donc, celle-ci peut s'effectuer sans difficultés.
lord948
Messages postés34Date d'inscriptionjeudi 17 janvier 2008StatutMembreDernière intervention19 mai 2009 19 mai 2009 à 13:55
slt,
ce genre de cas s'appel une association de type n : m
dans le passage du mcd au mld la relation generalement appelé Ligne_**** ce transforme en table avec une clé composé :
pour revenir a ton probleme voila ce que je te propose:
CREATE TABLE ligne_Grade ( ID_employe INT NOT NULL, ID_Grade INT NOT NULL, CONSTRAINT pk_ligne_grade PRIMARY KEY CLUSTERED (ID_employe,ID_Grade)REFERENCES Employe (ID_employe)
ON DELETE CASCADE)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Fabal01
Messages postés48Date d'inscriptionlundi 11 mai 2009StatutMembreDernière intervention 8 janvier 20101 19 mai 2009 à 15:05
Slt,Cantador dans mon MCD,j'ai bien opté pour la solution2 mais lors de la suppression d'un enregistrement,le compilateur me signale cela:Le projet Projet1.exe a provoqué une classe d'exception EOLeException avec message 'La ligne n'a pas pu ètre trouvée pour la mise à jour.Certaines valeur ont peut-ètre changé depuis leur dernière lecture'...En plus de cela l'enregistrement et effectivement supprimé,mais le problème est que tous les enregistrements employé qui ont le mème grade sont systématiquement supprimés.
Fabal01
Messages postés48Date d'inscriptionlundi 11 mai 2009StatutMembreDernière intervention 8 janvier 20101 19 mai 2009 à 16:15
je crois que le problème vient d'ACCESS,je me dis peut-ètre que c'est du aux types de jointures,j'ai lu l'aide d'ACCESS mais c'est très bref et je n'est rien pigé
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 19 mai 2009 à 19:58
En plus de cela l'enregistrement et effectivement supprimé,mais le problème est que tous les enregistrements employé qui ont le mème grade sont systématiquement supprimés.
access n'est pas en cause..
tu t'es plantée dans ta jointure et/ou dans la structure des tables.
tu dois pouvoir trouver des exemples sur le net..
Fabal01
Messages postés48Date d'inscriptionlundi 11 mai 2009StatutMembreDernière intervention 8 janvier 20101 21 mai 2009 à 12:25
Merci pour ta reponse!mais di moi es-ce que l'instruction Employe.Append peut ètre appelé sans que l'instruction Employé.Edit ne le précède?j'ai un autre problème,lorsque j'essaie d'ajouter un enregistrement à ma table ACCESS via delphi(ex:table sanction,nouvelle sanction) le compilateur me signal,l'index ou la clé primaire,ou la relation ne supporte pas un DOUBLON.je comprend un peu le message,portant un employé peut avoir plusieur sanction à des dates différentes donc logiquement dans la table sanction je pourais avoir un employé avec une ou plusieur sanctions.je suis frustré actuellement,j'ai besoin d'aide...
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 21 mai 2009 à 17:11
es-ce que l'instruction Employe.Append peut ètre appelé sans que l'instruction Employé.Edit ne le précède?
oui, tout à fait, il faut cependant :
que la table ou le Query (à utiliser de préférence..)
soit ouvert.
sanction ?
tu n'en avais pas parlé précédemment..
il faut d'bord voir ce qui t'intéresse :
soit les employés qui ont telle ou telle sanction ou
la liste des sanctions par employé ?
nb: Utilises des clés primaires auto-incréméntales
Fabal01
Messages postés48Date d'inscriptionlundi 11 mai 2009StatutMembreDernière intervention 8 janvier 20101 21 mai 2009 à 17:23
Une table sanction(Num_sanc,Matricule,Date_sanc); un employé poura avoir la mème sanction à des date différente,mais je n'arrive pas à programmer cela à chaque fois il m'affiche un message d'erreur
concrètement, il te faut
un petit formulaire pour gérer les ajouts de sanction
le mieux est de le placer sous le dbgrid employe
ainsi on sélectionne l'employé et on ajoute les sanctions..
les tables étant liées, le codeemploye entre automatiquement...
pour l'affichage le mieux un composant dbgrid (conteneur) à côté qui affichera la liste des sanctions dès la sélection de l'employé.
autrement dit les deux grids sont liés eux aussi en relation 1-N
tu pourras aussi faire directement la saisie dans le dbgrid, mais c'est plus dur à contrôler..
fefiche
Messages postés3Date d'inscriptionjeudi 13 mai 2010StatutMembreDernière intervention17 février 2011 1 juil. 2010 à 10:21
salut,je développe une application sous delphi: j'ai placé un datamodule où j'ai inseré une table ,avec data source et des query. dans le masque de saisie,j'ai plusieurs champs:le premier N°(qui est la clef de la table).ma question est: comment modifier un enregistrement c'est à dire quand je fais une recherche par N° ,l'enregistrement équivalent à ce N° s'affiche puis je fais une modification (quelle instruction faut il inserer sur le bouton MODIFIER) merci j'attends vos réponses
fefiche
Messages postés3Date d'inscriptionjeudi 13 mai 2010StatutMembreDernière intervention17 février 2011 1 juil. 2010 à 10:24
salut,je développe une application: j'ai placé un datamodule où j'ai inseré une table ,avec data source et des query. dans la masque d saisie,j'ai plusieurs champs:le premier(qui est la clef de la table).ma question est: comment modifier un enr