C#:enregistré employé/supprimé employé-servic

Fermé
loicDu28 Messages postés 332 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 2 février 2016 - 18 mai 2009 à 23:36
loicDu28 Messages postés 332 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 2 février 2016 - 19 mai 2009 à 16:55
Bonjour tout le monde,

Après avoir réfléchi, chercher, ..... mais problème ne sont plus les mêmes, les voici :
1) Enregistrer un nouveau employé plus précisément le numéro de l'employé => Lorsque j'ajoute et surtout que j'enregistre le nouveau employé dans mon formulaire, il s'enregistre mais le numéro prend comme valeur "auto" alors qu'il devrait prendre comme valeur un numéro de type : B8319CB4-5CFA-4922-A9B8-8B64F9F29610. Pour cela, j'exécute une procédure stockée. Voici mon code
a) Form_Employé => bouton ajouter()
private void bt_ajout_Click(object sender, EventArgs e)
        {
            this.BindingContext[dbDs, dbDs.tp1_employe.TableName].AddNew();
            affichePosCpt();
            surAjout();
            Sexe();
        }


b) Form_Principal
 public Fm_principal()
        {
            InitializeComponent();
            dbDs_empSce1.Clear();
            dbAd_service.Fill(dbDs_empSce1, "tp1_service");
            dbAd_employe.Fill(dbDs_empSce1, "tp1_employe");
            dbDs_empSce1.tp1_employe.RowChanged += new DataRowChangeEventHandler(tp1_employe_RowChanged);
        }


 private void tp1_employe_RowChanged(object sender, DataRowChangeEventArgs e)
        {
            if (e.Action == DataRowAction.Add)
            {
                try
                {
                    dbCo_gesper.Open();
                    dbPs_idEmploye.ExecuteNonQuery();
                    dbCo_gesper.Close();
                    e.Row["numero"] = dbPs_idEmploye.Parameters["@myid"].Value.ToString();
                }
                catch (Exception pb)
                {
                    MessageBox.Show(pb.ToString());
                    e.Row.RejectChanges();
                }
            }
            if (e.Action == DataRowAction.Change)
            {
                try
                {
                    dbAd_employe.Update(new DataRow[] { e.Row });
                }
                catch (Exception pb)
                {
                    MessageBox.Show(pb.ToString());
                    e.Row.RejectChanges();
                }
            }
        }

c) la procédure stockée
CREATE PROCEDURE [dbo].[GETIDEMPLOYE] @myid char(36) OUTPUT
AS
SET @myid = NEWID()
GO

==> Comment puis-je faire pour que la procédure stockée s'exécute correctement??

2) Supprimer service et employé => Dans un autre formulaire : FM_EmpSce, j'ai 2 partie : la première c'est les services et l'autre les employés. Lorsque je click sur le bouton 'supprimer' je souhaiterais que cela supprime les employé du service qui se supprime ensuite. Voici le code et le message d'erreur que j'obtiens :
a) Form_EmployeService => bouton supprimer()
private void bt_suppression_Sce_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Il faut supprimer employé avant service");
            DialogResult dr = MessageBox.Show("Voulez-vous supprimer quand même?", "Supprimer et Quitter l'application", MessageBoxButtons.YesNo);
            if (dr == DialogResult.Yes)
            {
                this.BindingContext[dbDs, dbDs.tp1_employe.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Position);
                this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
            }
        }

b) Form_Principal
 public Fm_Menu()
        {
            InitializeComponent();

            dbDs_EmpSce1.Clear();
            dbAd_employe.Fill(dbDs_EmpSce1, "tp1_employe");
            dbDs_EmpSce1.tp1_employe.RowDeleted += new DataRowChangeEventHandler(tp1_employe_RowDeleted);

            dbAd_service.Fill(dbDs_EmpSce1, "tp1_service");
            dbDs_EmpSce1.tp1_service.RowDeleted += new DataRowChangeEventHandler(tp1_service_RowDeleted);
        }


private void tp1_employe_RowDeleted(object sender, DataRowChangeEventArgs e)
        {
            if (e.Action == DataRowAction.Delete)
            {
                try
                {
                //    MessageBox.Show("erreur");
                    dbAd_employe.Update(new DataRow[] { e.Row });
                //    MessageBox.Show("erreur1");
                }
                catch (Exception pb)
                {
                    MessageBox.Show(pb.ToString());
                    e.Row.RejectChanges();
                }
            }
        }


    private void tp1_service_RowDeleted(object sender, DataRowChangeEventArgs e)
        {
            if (e.Action == DataRowAction.Delete)
            {
                try
                {
                  //  MessageBox.Show("erreur2");
                    dbAd_service.Update(new DataRow[] { e.Row });
                  //  MessageBox.Show("erreur3");
                }
                catch (Exception pb)
                {
                    MessageBox.Show(pb.ToString());
                    e.Row.RejectChanges();
                }
            }
        }


c) le message d'erreur :

System.Data.SqlClient.SqlException: Conflit entre l'instruction DELETE et la contrainte COLUMN REFERENCE 'FK__tp1_employe__sce__25869641'. Le conflit est survenu dans la base de données 'Gesper', table 'tp1_employe', column 'sce'.

L'instruction a été arrêtée.

   à System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)

   à System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)

   à System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)

   à System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows)

   à Fiche5_B.Fm_Menu.tp1_service_RowDeleted(Object sender, DataRowChangeEventArgs e) dans C:\Documents and Settings\loic\Mes documents\Visual Studio 2005\Projects\Fiche5_B\Fiche5_B\Fm_Menu.cs:ligne 56


Je pense que ce problème est dut au faite que ça me supprime pas les employés du service mais un employé correspondant pas au service que je souhaite supprimer.
==> Comment je peux faire pour supprimer le(s) bon employé(s) du service que je souhaite supprimé??

Merci d'avance pour votre aide!!

1 réponse

loicDu28 Messages postés 332 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 2 février 2016 53
19 mai 2009 à 16:55
Bonjour,

J'ai du nouveau pour mon deuxième problème.
Donc les méthodes 'tp1_service_RowDeleted' et 'tp1_employe_RowDeleted' et 'Fm_Menu()' sont identique.
Mais la méthode du bouton suppression du formulaire 'FM_EmpSce' est devenu celui là :
 private void bt_suppression_Sce_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Il faut supprimer employé avant service");
            DialogResult dr = MessageBox.Show("Voulez-vous supprimer quand même?", "Supprimer et Quitter l'application", MessageBoxButtons.YesNo);
            if (dr == DialogResult.Yes)
            {
                this.BindingContext[dbDs, dbDs.tp1_employe.TableName].RemoveAt(this.BindingContext[dbDs, "tp1_service.ServiceEmploye"].Position);
                this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
                posCpte();
            }
        }

La suppression fonctionne parfaitement si l'employé de ce service est en première position dans la table "tp1_employe" de ma base de données.
Donc en gros la suppression se réalise seulement sur le premier employé (première ligne) de la table correspondante.
Je pense que le problème vient du 'position' de la ligne suivante :
                this.BindingContext[dbDs, dbDs.tp1_employe.TableName].RemoveAt(this.BindingContext[dbDs, "tp1_service.ServiceEmploye"].Position); 

Que puis-je modifié pour que cela me supprime bien le bon employé peu importe sa place dans la table tp1_employe de la base de données??

Merci d'avance
0