Supprimer un enregistrement dans delphi

Résolu
Fabal01 Messages postés 48 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 8 janvier 2010 - 19 mai 2009 à 09:01
fefiche Messages postés 3 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 17 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.

15 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
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)

et voilà,
Ajouter ->>>> Employe.Append;
Modifier ->>> Employé.Edit;
Enregistrer ->> Employé.Post;
Supprimer ->> Employé.Delete;

et la table grade ne sert que pour alimenter la table Employe !

Pour le mode transactionnel, on verra ça plus tard...

cantador
3
Fabal01 Messages postés 48 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 8 janvier 2010 1
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
1
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
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.

Laquelle as-tu choisie ?

cantador
0
lord948 Messages postés 34 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 19 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é :

article 0-N ligne_vente 1-N Vente

article ligne_vente vente
------- ----------- --------
Code_Art Code_Art ID_Vente
ID_Vente

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)
0

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

Posez votre question
Fabal01 Messages postés 48 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 8 janvier 2010 1
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.
0
Fabal01 Messages postés 48 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 8 janvier 2010 1
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é
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
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..

cantador
0
Fabal01 Messages postés 48 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 8 janvier 2010 1
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...
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
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

cantador
0
Fabal01 Messages postés 48 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 8 janvier 2010 1
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
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
21 mai 2009 à 18:06
Rhhaa là là...
Donc, c'est la liste des sanctions par employé..
c'est donc une table en position fils par rapport à employé (relation 1-N)


employe                               sanction
                                            codesanction
codeemploye   ->>>>>>>> codeemploye
--                                         LibelleSanction
etc...                                     Matricule
                                            DateSanction
                                            


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..

cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
21 mai 2009 à 18:08
hou là le désordre..

employe                 sanction
                              codesanction
codeemploye   ->> codeemploye
--                           LibelleSanction
etc...                       Matricule
                               DateSanction

cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
21 mai 2009 à 18:08
c'est mieux..

cantador
0
fefiche Messages postés 3 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 17 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
0
fefiche Messages postés 3 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 17 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
0
Rejoignez-nous