OVH Cloud OVH Cloud

PB de creation et d effacement de lignes

3 réponses
Avatar
Philippe Cazaux-Moutou
Bonjour

je cree un enregistrement et je veux le détruire aussitot et la j ai une
erreur que voici (je precise que si je changes de lignes et que j y
reviens dessus, la j ai pas de pb), j ai ecris
C est ici que ca plante
pour marquer ou a lieu le plantage

merci

Violation de l'accès concurrentiel : DeleteCommand a affecté 0 des
enregistrements 1 attendus.

voici mon code de creation

private void btnADD_Click(object sender, EventArgs e)
{
btnADD.Enabled = false;
btnDelete.Enabled = false;

_mainForm.bsInfos.Caption = "";
bsFilms.AddNew();
DataRow r;
r =
(DataRow)(((DataRowView)this.dataGridListe.CurrentRow.DataBoundItem).Row);
r["FI_Date_Achat"] = DateTime.Today;

OleDbCommand myCommand = new OleDbCommand("Select
Max(FI_NUM)+1 FROM FILMS", taFilms.Connection);
myCommand.Connection.Open();
Int32 iCount = (Int32) myCommand.ExecuteScalar();
myCommand.Connection.Close();
myCommand.Dispose();

r["FI_Num"] = iCount;
r["FI_Zone"] = 2;
teTitre.Select();

btnCancel.Enabled = true;
}

et mon code de delete

private void btnDelete_Click(object sender, EventArgs e)
{
string sValeur = "";
DataRow r;
r =
(DataRow)(((DataRowView)this.dataGridListe.CurrentRow.DataBoundItem).Row);
sValeur = r["FI_Titre"].ToString();
DialogResult result = MessageBox.Show(this, "Voulez-vous
supprimer le film '" + sValeur + "', de votre liste ?", "Supprimer",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
try
{
// Suppression de la ligne dans la datagrid
bsFilms.RemoveCurrent();
// MAJ des données
taFilms.Update(dsFilms);
}
catch (System.Exception updateException)
{
throw updateException; // C est ici que ca plante
}

if (dsFilms.Films.Count > 0)
{
_mainForm.bsCompte.Caption = String.Format("Nombre
de films : {0}", dsFilms.Films.Count);
}
else
{
_mainForm.bsCompte.Caption = "Pas de films dans cet
onglet...";
}
}
}

3 réponses

Avatar
Gilles TOURREAU
Philippe Cazaux-Moutou avait écrit le 12/05/2006 :
Bonjour

je cree un enregistrement et je veux le détruire aussitot et la j ai une
erreur que voici (je precise que si je changes de lignes et que j y reviens
dessus, la j ai pas de pb), j ai ecris
C est ici que ca plante
pour marquer ou a lieu le plantage

merci

Violation de l'accès concurrentiel : DeleteCommand a affecté 0 des
enregistrements 1 attendus.

voici mon code de creation

private void btnADD_Click(object sender, EventArgs e)
{
btnADD.Enabled = false;
btnDelete.Enabled = false;

_mainForm.bsInfos.Caption = "";
bsFilms.AddNew();
DataRow r;
r =
(DataRow)(((DataRowView)this.dataGridListe.CurrentRow.DataBoundItem).Row);
r["FI_Date_Achat"] = DateTime.Today;

OleDbCommand myCommand = new OleDbCommand("Select Max(FI_NUM)+1
FROM FILMS", taFilms.Connection);
myCommand.Connection.Open();
Int32 iCount = (Int32) myCommand.ExecuteScalar();
myCommand.Connection.Close();
myCommand.Dispose();

r["FI_Num"] = iCount;
r["FI_Zone"] = 2;
teTitre.Select();

btnCancel.Enabled = true;
}

et mon code de delete

private void btnDelete_Click(object sender, EventArgs e)
{
string sValeur = "";
DataRow r;
r =
(DataRow)(((DataRowView)this.dataGridListe.CurrentRow.DataBoundItem).Row);
sValeur = r["FI_Titre"].ToString();
DialogResult result = MessageBox.Show(this, "Voulez-vous
supprimer le film '" + sValeur + "', de votre liste ?", "Supprimer",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
try
{
// Suppression de la ligne dans la datagrid
bsFilms.RemoveCurrent();
// MAJ des données
taFilms.Update(dsFilms);
}
catch (System.Exception updateException)
{
throw updateException; // C est ici que ca plante
}

if (dsFilms.Films.Count > 0)
{
_mainForm.bsCompte.Caption = String.Format("Nombre de
films : {0}", dsFilms.Films.Count);
}
else
{
_mainForm.bsCompte.Caption = "Pas de films dans cet
onglet...";
}
}
}



Le problème de l'accès concurrentiel vient du fait que ADO .NET veut
supprimer 1 lignes et le SGBD a renvoyé comme quoi il a supprimé 0
lignes.

Cette ligne m'inquiete :
bsFilms.RemoveCurrent();

Sauf erreur de ma part je crois que c'est pas bon, je pense que cette
fonction supprime physiquement la ligne de ton DataSet.

Essayes plustôt :

((DataRow)((DataRowView)bsFilms.Current)).Delete();

Normalement, si tu executes cette fonction, la ligne n'est pas supprimé
physiquement mais marqué comme à effacer (RowState = Deleted). Elle
sera supprimé physiquement de ton DataSet automatiquement lors de
l'appel à TableAdapter.Update()

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Philippe Cazaux-Moutou
Gilles TOURREAU a écrit :
Philippe Cazaux-Moutou avait écrit le 12/05/2006 :
Bonjour

je cree un enregistrement et je veux le détruire aussitot et la j ai
une erreur que voici (je precise que si je changes de lignes et que j
y reviens dessus, la j ai pas de pb), j ai ecris
C est ici que ca plante
pour marquer ou a lieu le plantage

merci

Violation de l'accès concurrentiel : DeleteCommand a affecté 0 des
enregistrements 1 attendus.

voici mon code de creation

private void btnADD_Click(object sender, EventArgs e)
{
btnADD.Enabled = false;
btnDelete.Enabled = false;

_mainForm.bsInfos.Caption = "";
bsFilms.AddNew();
DataRow r;
r =
(DataRow)(((DataRowView)this.dataGridListe.CurrentRow.DataBoundItem).Row);

r["FI_Date_Achat"] = DateTime.Today;

OleDbCommand myCommand = new OleDbCommand("Select
Max(FI_NUM)+1 FROM FILMS", taFilms.Connection);
myCommand.Connection.Open();
Int32 iCount = (Int32) myCommand.ExecuteScalar();
myCommand.Connection.Close();
myCommand.Dispose();

r["FI_Num"] = iCount;
r["FI_Zone"] = 2;
teTitre.Select();

btnCancel.Enabled = true;
}

et mon code de delete

private void btnDelete_Click(object sender, EventArgs e)
{
string sValeur = "";
DataRow r;
r =
(DataRow)(((DataRowView)this.dataGridListe.CurrentRow.DataBoundItem).Row);

sValeur = r["FI_Titre"].ToString();
DialogResult result = MessageBox.Show(this, "Voulez-vous
supprimer le film '" + sValeur + "', de votre liste ?", "Supprimer",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
try
{
// Suppression de la ligne dans la datagrid
bsFilms.RemoveCurrent();
// MAJ des données
taFilms.Update(dsFilms);
}
catch (System.Exception updateException)
{
throw updateException; // C est ici que ca plante
}

if (dsFilms.Films.Count > 0)
{
_mainForm.bsCompte.Caption =
String.Format("Nombre de films : {0}", dsFilms.Films.Count);
}
else
{
_mainForm.bsCompte.Caption = "Pas de films dans
cet onglet...";
}
}
}



Le problème de l'accès concurrentiel vient du fait que ADO .NET veut
supprimer 1 lignes et le SGBD a renvoyé comme quoi il a supprimé 0 lignes.

Cette ligne m'inquiete :
bsFilms.RemoveCurrent();

Sauf erreur de ma part je crois que c'est pas bon, je pense que cette
fonction supprime physiquement la ligne de ton DataSet.

Essayes plustôt :

((DataRow)((DataRowView)bsFilms.Current)).Delete();

Normalement, si tu executes cette fonction, la ligne n'est pas supprimé
physiquement mais marqué comme à effacer (RowState = Deleted). Elle sera
supprimé physiquement de ton DataSet automatiquement lors de l'appel à
TableAdapter.Update()

Cordialement




il n a pas voulu de ta ligne
((DataRow)((DataRowView)bsFilms.Current)).Delete();

j ai mis ca
((DataRowView)((DataRowView)bsFilms.Current)).Delete();

Mais ca fait exactement pareil

Violation de l'accès concurrentiel : DeleteCommand a affecté 0 des
enregistrements 1 attendus.

je precise, j ajoutes une ligne, je cliques sur le bouton valider, puis
je cliques sur le bouton Effacer

si entre les 2 btns, j ai changé de ligne et que je reviens sur celle
crée ca ne le fait plus
Avatar
Gilles TOURREAU
Philippe Cazaux-Moutou a écrit :
Gilles TOURREAU a écrit :
Philippe Cazaux-Moutou avait écrit le 12/05/2006 :
Bonjour

je cree un enregistrement et je veux le détruire aussitot et la j ai une
erreur que voici (je precise que si je changes de lignes et que j y
reviens dessus, la j ai pas de pb), j ai ecris
C est ici que ca plante
pour marquer ou a lieu le plantage

merci

Violation de l'accès concurrentiel : DeleteCommand a affecté 0 des
enregistrements 1 attendus.

voici mon code de creation

private void btnADD_Click(object sender, EventArgs e)
{
btnADD.Enabled = false;
btnDelete.Enabled = false;

_mainForm.bsInfos.Caption = "";
bsFilms.AddNew();
DataRow r;
r =
(DataRow)(((DataRowView)this.dataGridListe.CurrentRow.DataBoundItem).Row);

r["FI_Date_Achat"] = DateTime.Today;

OleDbCommand myCommand = new OleDbCommand("Select
Max(FI_NUM)+1 FROM FILMS", taFilms.Connection);
myCommand.Connection.Open();
Int32 iCount = (Int32) myCommand.ExecuteScalar();
myCommand.Connection.Close();
myCommand.Dispose();

r["FI_Num"] = iCount;
r["FI_Zone"] = 2;
teTitre.Select();

btnCancel.Enabled = true;
}

et mon code de delete

private void btnDelete_Click(object sender, EventArgs e)
{
string sValeur = "";
DataRow r;
r =
(DataRow)(((DataRowView)this.dataGridListe.CurrentRow.DataBoundItem).Row);

sValeur = r["FI_Titre"].ToString();
DialogResult result = MessageBox.Show(this, "Voulez-vous
supprimer le film '" + sValeur + "', de votre liste ?", "Supprimer",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
try
{
// Suppression de la ligne dans la datagrid
bsFilms.RemoveCurrent();
// MAJ des données
taFilms.Update(dsFilms);
}
catch (System.Exception updateException)
{
throw updateException; // C est ici que ca plante
}

if (dsFilms.Films.Count > 0)
{
_mainForm.bsCompte.Caption = String.Format("Nombre de
films : {0}", dsFilms.Films.Count);
}
else
{
_mainForm.bsCompte.Caption = "Pas de films dans cet
onglet...";
}
}
}



Le problème de l'accès concurrentiel vient du fait que ADO .NET veut
supprimer 1 lignes et le SGBD a renvoyé comme quoi il a supprimé 0 lignes.

Cette ligne m'inquiete :
bsFilms.RemoveCurrent();

Sauf erreur de ma part je crois que c'est pas bon, je pense que cette
fonction supprime physiquement la ligne de ton DataSet.

Essayes plustôt :

((DataRow)((DataRowView)bsFilms.Current)).Delete();

Normalement, si tu executes cette fonction, la ligne n'est pas supprimé
physiquement mais marqué comme à effacer (RowState = Deleted). Elle sera
supprimé physiquement de ton DataSet automatiquement lors de l'appel à
TableAdapter.Update()

Cordialement




il n a pas voulu de ta ligne
((DataRow)((DataRowView)bsFilms.Current)).Delete();

j ai mis ca ((DataRowView)((DataRowView)bsFilms.Current)).Delete();

Mais ca fait exactement pareil

Violation de l'accès concurrentiel : DeleteCommand a affecté 0 des
enregistrements 1 attendus.

je precise, j ajoutes une ligne, je cliques sur le bouton valider, puis je
cliques sur le bouton Effacer

si entre les 2 btns, j ai changé de ligne et que je reviens sur celle crée ca
ne le fait plus



Juste par curiosité aurais-tu des colonnes de type réel dans ta base de
données (sur la table que t'es en train de mettre à jour) ?

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr