Announcement

Collapse
No announcement yet.

Datensatz löschen will nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensatz löschen will nicht

    Hallo,
    <br>
    ich wollte in meinem Programm ein Datensatz löschen.
    <br>
    Der 1.Weg den ich probiert habe:
    <br><br>
    <pre>
    //Deklarationen
    private TDSFirmaPersonal dsFirmaPersonal;
    private CurrencyManager aCM;

    public ucListSDPersonal()
    {

    InitializeComponent();
    //Singleton
    dmPersonal = TdmPersonal.GetDataModuleInstance();
    //liefert TypedDataSet
    dsFirmaPersonal = dmPersonal.GetData();

    aCM = (CurrencyManager)BindingContext[dsFirmaPersonal.SD_FIRMA_PERSONAL];

    }

    private void miDelete_Click(object sender, System.EventArgs e)
    {
    int CurrentPosition = aCM.Position;
    aCM.RemoveAt(CurrentPosition);

    if(dsFirmaPersonal.HasChanges())
    {
    dmPersonal.SaveData(dsFirmaPersonal);
    }
    }

    </pre>
    <br><br>
    Bei dieser Version erhalte ich eine DBConcurrencyException.<br>
    Dies ist jedoch unmöglich, da ich der einzige bin, der in diesem Moment auf das Programm zugreift<br>

    Der 2.Weg den ich probiert habe:
    <br><br>
    <pre>

    private void miDelete_Click(object sender, System.EventArgs e)
    {
    int CurrentPosition = aCM.Position;
    dsFirmaPersonal.SD_FIRMA_PERSONAL.Rows[CurrentPosition].Delete();

    if(dsFirmaPersonal.HasChanges())
    {
    dmPersonal.SaveData(dsFirmaPersonal);
    }
    }

    </pre>

    <br><br>

    hier ist allerdings der Fall, das dsFirmaPersonal.HasChanges() False zurückliefert und somit SaveData nicht<br>
    aufgerufen wird.<br><br>

    <pre>

    public void SaveData(TDSFirmaPersonal aDS)
    {

    sqlCon.Open();
    try
    {
    sqlDA_SDFirmaPersonal.Update(aDS);

    }
    catch(System.Data.SqlClient.SqlException e)
    {
    string s = TSQLFormatEx.FormatSQLException(e);
    MessageBox.Show(s);
    }
    catch(System.Data.DBConcurrencyException e)
    {
    MessageBox.Show("Kein Datensatz zum löschen gefunden!");
    }
    finally
    {
    sqlCon.Close();
    }
    }
    </pre>
    <br>

    Kennt jemand eine Lösung dafür?
    Kann es sein, das dies an einer TimeStamp-Spalte in der DB liegen kann?

  • #2
    Hi,
    ich hab inzwischen alle Möglichkeiten die ich irgendwo in Literatur oder sonst wo gefunden habe, getestet um ein Datensatz zu löschen.
    Ich bekomme aber immer wieder diese Exception, das der Delete Command keinen Datensatz betroffen hätte. Ich hab jetzt sogar mal die Time-Stamp Spalten gelöscht. Keine Änderung.

    Kann mir jemand helfen

    Comment


    • #3
      Hi
      <P>
      Versuche bei deinen Command Objekten eine DataRowVersion mitzugeben.
      <P>
      http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatadatarowversionclasstopic.asp
      <P>
      Weil es ist so, dass im Delete Query eine WHERE Klausel steht, die aber so nicht mehr mit dem DataSet inhalt übereinstimmt, weil ja etwas gelöscht wurde (im DataSet).
      <P>
      Desshalb dem Command beibringen, er solle beim Suchen noch die DataRowVersion.Orginal verwenden, default ist Current.
      <P>
      Simo

      Comment


      • #4
        Hallo,

        also in den Parametern der DataAdapter steht als SourceVersion Original. Der Command bezieht sich auf ein Stored Proc.

        Wo müsste ich das sonst einstellen

        Comment


        • #5
          Hab die Ursache gefunden.

          Lag an einer GUID und TStamp Spalte. Die wollte er irgendwie nicht vergleichen. Hab sie aus den Parametern entfernt und voila es geht

          Comment

          Working...
          X