Supprimer un enregistrement dans delphi [Résolu]

Fabal01 48 Messages postés lundi 11 mai 2009Date d'inscription 8 janvier 2010 Dernière intervention - 19 mai 2009 à 09:01 - Dernière réponse : fefiche 3 Messages postés jeudi 13 mai 2010Date d'inscription 17 février 2011 Dernière intervention
- 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.
Afficher la suite 

15 réponses

Répondre au sujet
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 20 mai 2009 à 17:33
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 19 mai 2009 à 10:06
0
Utile
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
Commenter la réponse de cs_cantador
lord948 35 Messages postés jeudi 17 janvier 2008Date d'inscription 19 mai 2009 Dernière intervention - 19 mai 2009 à 13:55
0
Utile
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)
Commenter la réponse de lord948
Fabal01 48 Messages postés lundi 11 mai 2009Date d'inscription 8 janvier 2010 Dernière intervention - 19 mai 2009 à 15:05
0
Utile
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.
Commenter la réponse de Fabal01
Fabal01 48 Messages postés lundi 11 mai 2009Date d'inscription 8 janvier 2010 Dernière intervention - 19 mai 2009 à 16:15
0
Utile
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é
Commenter la réponse de Fabal01
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 19 mai 2009 à 19:58
0
Utile
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
Commenter la réponse de cs_cantador
Fabal01 48 Messages postés lundi 11 mai 2009Date d'inscription 8 janvier 2010 Dernière intervention - 20 mai 2009 à 09:11
0
Utile
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
Commenter la réponse de Fabal01
Fabal01 48 Messages postés lundi 11 mai 2009Date d'inscription 8 janvier 2010 Dernière intervention - 21 mai 2009 à 12:25
0
Utile
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...
Commenter la réponse de Fabal01
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 21 mai 2009 à 17:11
0
Utile
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
Commenter la réponse de cs_cantador
Fabal01 48 Messages postés lundi 11 mai 2009Date d'inscription 8 janvier 2010 Dernière intervention - 21 mai 2009 à 17:23
0
Utile
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
Commenter la réponse de Fabal01
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 21 mai 2009 à 18:06
0
Utile
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
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 21 mai 2009 à 18:08
0
Utile
hou là le désordre..

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

cantador
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 21 mai 2009 à 18:08
0
Utile
c'est mieux..

cantador
Commenter la réponse de cs_cantador
fefiche 3 Messages postés jeudi 13 mai 2010Date d'inscription 17 février 2011 Dernière intervention - 1 juil. 2010 à 10:21
0
Utile
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
Commenter la réponse de fefiche
fefiche 3 Messages postés jeudi 13 mai 2010Date d'inscription 17 février 2011 Dernière intervention - 1 juil. 2010 à 10:24
0
Utile
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
Commenter la réponse de fefiche

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.