als erstes stelle ich mal die Frage damit man weiß worum es geht:
Gibt es bei SQLDB-Kombonenten mit Firebird-Db ein Fuktion, die anzeigt, ob Datensätze bearbeitet worden sind?
Mit bearbeiten meine ich, eine SQLQuery im Programm mit DBGrid oder DBEdit o.ä. bearbeiten.
Ich will dem Benutzer die Möchlichkeit geben, die Änderungen nur mit Bestätigung zu speichern, á la "Möchten Sie Änderungen speichern?". Es klingt doof, aber möchten einige haben.
Es gibt eine Funktion TSQLQuery.Modified aber es funktioniert nicht, es liefert immer false, und eine Funktion TQuery.UpdatesPending wie bei Delphi gibts auch nicht.
Es gibt aber eine Funktion TSQLQuery.ChangeCount, welche die Anzahl der geänderten Datensätze liefert, und die Funktioniert tatsächlich. Nur ich weiß nicht ob das in zukunft auch so funktioniert. Es scheint TSQLQuery.Modified genau dafür gemacht wurde, aber leider funktioniert es nicht.
Wie macht ihr das?
Oder was haltet ihr von meiner Idee?
TSQLQuery.Modified wurde in Basisklasse TDataset aus db.pas definiert als "property Modified: Boolean read FModified;".
Nun habe ich überlegt das zu ändern zu:
Code: Alles auswählen
//db.pas ------------------------------------------------------
type
TDataSet = class (...)
//..
protected
function GetModified : Boolean; virtual; //neu
public
property Modified: Boolean read GetModified; //vorher: FModified;
//...
end;
function TDataset .GetModified : Boolean; //neu
begin
Result:=FModified;
end;
//BufDataset.pas ------------------------------------------------
type
//diese Klasse benutzen weil ChangeCount erst hier erscheint und TSQLQuery von dieser stammt
TCustomBufDataset = class (...)
//..
protected
function GetModified : Boolean; override;
//...
end;
function TCustomBufDataset .GetModified : Boolean;
begin
Result:=(inherited GetModified) or (ChangeCount>0);
end;