Announcement

Collapse
No announcement yet.

TADODataSet.DeleteRecords

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

  • TADODataSet.DeleteRecords

    Hallo!

    Entwickle mit Delphi5 Ent., Update #1, ADOUpd 1+2.

    Kriege eine Fehlermeldung, wenn ich einen Datensatz, der EOF oder BOF ist löschen möchte. Das Recordset ist mit LoadFromFile gelesen wurden und weist keine Connection (=nil) auf.

    Folgender Quelltext klappt bei allen Datensätzen, die nicht EOF | BOF sind; dsWaren und dsImportWaren sind ADODataSets.

    <pre>
    begin
    w1 := data.getImpWare;
    if (w1.Nipc<>-1)
    then begin
    w2 := data.findWareByNIPC(w1.Nipc);
    if (w2.Nipc<>w1.Nipc)
    then data.dsWaren.Append; //Neu
    w1.Freigegeben := true;
    data.setWare(w1);
    data.dsWaren.Post;
    data.dsImportWare.Edit;
    data.dsImportWare.DeleteRecords(arCurrent);
    //Bei DeleteRecords tritt der Fehler auf
    data.dsImportWare.Post
    end
    end;
    </pre>

    BTW: Gibt es eigentlich eine Möglichkeit, wie bei VisualStudio.NET automatisch typisierte Datensets zu erstellen? Das ist wirklich sehr komfortabel und produktiv :-)

    Vielen Dank für Eure Hilfe im voraus. Im Buch "ADO mit Delphi" von Herrn Kosch habe ich auch nichts gefunden.

    Gruß, Nils

  • #2
    N'Abend,

    warum der Fehler auftritt kann ich dir auch nicht sagen. Dein Programmierstil sieht aber sehr .Net inspiriert aus(wertfrei gemeint) und könnte für die Probleme verantwortlich sein.

    Zum löschen eines Datensatzes brauchst du nicht erst in den EditMode zu wechseln. Zweitens um einen einzelnen Satz zu löschen solltest du einfach die Delete Methode verwenden. DeleteRecords versucht sich noch mit der eigentlichen Datenmenge zu synchronisieren (Es wird Resync() aufgerufen) vielleicht macht das die Probleme wenn man disconnected arbeitet.

    Also ersetze
    <PRE>
    data.dsImportWare.Edit;
    data.dsImportWare.DeleteRecords(arCurrent);
    //Bei DeleteRecords tritt der Fehler auf
    data.dsImportWare.Post
    </PRE>
    durch
    <PRE>
    data.dsImportWare.Delete;
    </PRE>

    Typisierte Datasets gibt's nicht ist aber wie in VS.Net nur eine Frage des passenden Wizzards der den entsprechenden Code erzeugt. Falls du dir also überlegst ein Experten zu schreiben der das macht ist dir meine Sympathie sicher

    Grüße
    Ral

    Comment


    • #3
      Hallo Ralf!

      Vielen Dank für Deine Antwort. Der direkte Zugriff mit delete hat klappt einwandfrei :-)

      Das mein Delphicode nach .NET aussieht ist wohl kein Wunder, habe schließlich die letzen 1,5 Jahre darin programmiert.

      Wie sähe denn ein Delphi-Äqivalent aus, macht man da keine typisierten Objekte/Records? Sonst käme ich glaube ich mit den Fields-Nummern durcheinander...

      Das mit dem Wizard werde ich nach Abschluß dieses Projekts wohl in Angriff nehmen, wenn es das nicht schon gibt.

      Gruß
      Nil

      Comment


      • #4
        Hallo ,

        >Das mein Delphicode nach .NET aussieht ist wohl kein Wunder, habe schließlich die letzen 1,5 Jahre darin programmiert.

        Ich mache gerade den anderen Weg insofern ist jeder nachfolgende Delphisyntax (Habe Delphi im Moment von meiner Platte verbannt) mit Vorsicht zu geniesen.

        > Wie sähe denn ein Delphi-Äqivalent aus, macht man da keine typisierten Objekte/Records?
        > Sonst käme ich glaube ich mit den Fields-Nummern durcheinander...

        Auch wenn ein Dataset in Delphi untypisiert ist muß man sich nicht mit den Feldnummern rumschlagen.

        Entweder man geht über den Namen der Spalte also z.B.
        Datamodule.dataset.FieldByName('MeinLieberSpaltenn ame').Value
        oder kurz
        Datamodule.dataset('MeinLieberSpaltenname').Value

        oder man legt persistente Felder an die man direkt ansprechen kann. Also zB.
        DataModule.datasetMeinLieberSpaltenname.Value

        Grüße
        Ral

        Comment

        Working...
        X