Announcement

Collapse
No announcement yet.

ds.HasChanges

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

  • ds.HasChanges

    Hallo

    habe mich entschlossen auf .net umzusteigen mit Developer Studio 2006
    Habe beim abspeichern eines Datensatzes in eine Interbase DB ein für mich unerklärliches Verhalten.
    Alles läuft auf einer Windows form und funktioniert einwandfrei. Anzeigen, ändern, löschen und abspeichern.
    Allerdings klappt das Abspeichern nur über einen Button, während der gleiche Aufruf über ein Context-Menü nicht zum Erfolg führt.
    Ich weiß nicht weiter.
    Vielleicht kann jemand helfen?

    Gruss Terppe

    public
    edtPASSWORT: System.Windows.Forms.TextBox;
    lblPASSWORT: System.Windows.Forms.Label;
    con : BdpConnection;
    ds : DataSet;
    dv : DataView;
    dad : BdpDataAdapter;
    drv : DataRowView;
    dr : DataRow;
    curMan: CurrencyManager;
    constructor Create;

    procedure Neu(sender: System.Object; e: System.EventArgs); override;
    procedure Open(sender: System.Object; e: System.EventArgs); override;
    procedure Save(sender: System.Object; e: System.EventArgs); override;
    procedure Delete(sender: System.Object; e: System.EventArgs); override;

    procedure BindingControls;
    procedure ActivateCurrencyManager;
    procedure RefreshStatusBar;

    end;

    procedure frmTVE_BERECHTIGUNG.Save;
    var b: TVE_BERECHTIGUNG;
    begin
    b := TVE_BERECHTIGUNG.Create;
    StatusBar.Text := 'Schreiben der Änderungen in die Datenbank !';
    if ds.HasChanges then ==> bei Button true sonst immer false
    begin
    if MessageBox.Show('DATENSATZ SPEICHERN ?','Achtung ?',
    MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) =
    System.Windows.Forms.DialogResult.Yes then
    begin
    con.Open;
    try
    begin
    dad.Update(ds, b.tn);
    StatusBar.Text := 'Schreiben in die Datenbank erfolgreich!';
    end;
    except
    MessageBox.Show('Fehler ... Satz schon vorhanden ?');
    StatusBar.Text := 'Nicht erfolgreich.';
    end;
    con.Close;
    end;
    end else StatusBar.Text := 'Nicht in die Datenbank geschrieben !.';
    b.Free;
    end;
    **Button***
    procedure frmTVE_BERECHTIGUNG.btnSave_Click(sender: System.Object; e: System.EventArgs);
    begin
    self.Save(sender, e);
    end;
    **contextmenü**
    procedure frmTVE_BERECHTIGUNG.cmSpeichern_Click(sender: System.Object; e: System.EventArgs);
    begin
    self.Save(sender, e);
    end;

  • #2
    Hallo,
    die Suche hier im FORUM nach der Zeichenkette <b>EndCurrentEdit</b> sollte auf die richtige Spur führen. Die von den Controls in der Benutzeroberfläche angezeigten Daten werden nur zu bestimmten Zeitpunkten zurück in das DataSet geschrieben, so dass man nur dann auf der sicheren Seite ist, wenn die Methode EndCurrentEdit explizit aufgerufen wird. Der Unterschied zwischen Button und Kontextmenü wird im unterschiedlichen Verhalten beim Fokus-Wechsel liegen - wobei dies den Zeitpunkt der Datenübernahme durch das DataSet triggert

    Comment

    Working...
    X