[ERLEDIGT] Gibt es Modified/UpdatesPending-Eigensc.?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

[ERLEDIGT] Gibt es Modified/UpdatesPending-Eigensc.?

Beitrag von Soner »

Hallo,
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;
 
Zuletzt geändert von Soner am Sa 28. Jan 2017, 23:36, insgesamt 1-mal geändert.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Gibt es Modified/UpdatesPending-Eigenschaft (SQLDB-FB)?

Beitrag von Soner »

Es gibt eine Eigenschaft Updatestatus. Aber der scheint sehr fehlerhaft zu sein, implementiert in der Vorgängerklasse TCustomBufDataset.
Es liefert ganz unterschiedliche Werte. Na egal, hab nur so geschaut wie weit TSQLDb ist.

Falls es jemanden interessiert füge ich hier Quelltext für Beispielprojekt zur Untersuchung, es ist vom Tutorial mit minimalen Änderung und es wird employee-Datenbank von Firebird verwendet.
Dateianhänge
SqldbEditStatus.zip
(125.45 KiB) 78-mal heruntergeladen

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: [ERLEDIGT] Gibt es Modified/UpdatesPending-Eigensc.?

Beitrag von mse »

Soner hat geschrieben:Es gibt eine Funktion TSQLQuery.Modified aber es funktioniert nicht, es liefert immer false

"modified" bezieht sich auf den Status des Record-Editbuffers. Nach post() oder cancel() wird "modified" gelöscht. "updatestatus" ist der auf applyupdates() wartende Zustand des aktuellen Records. "changecount" liefert die Anzahl der für applyupdates() bereitstehenden Änderungen.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: [ERLEDIGT] Gibt es Modified/UpdatesPending-Eigensc.?

Beitrag von Soner »

Danke für die Erklärung.

Updatestatus ist Fehlerhaft reagiert unterschiedlich auf die gleiche Situation.

Außerdem hat TDBGrid auch Anzeigefehler mit der TSQLQuery-Komponente.
Man kann es mit dem Beispielprojekt reproduzieren.
1) Fenster so vergrößen das allen Zeilen in DBGrid passen
2) Dann die Fensterhöhe verringern sodaß DBGrid nicht alle Zeilen darstellen kann
3) Jetzt vergrößern, einige Zeilen werden mehrfach angezeigt.
Schau auf die Bilder im Anhang.

(Dieser Fehler tritt nicht mit Zeos-Kompenten)

Wenn ich mehr Zeit habe werde ich mir das ganze richtig anschauen.
Da kann ich vielleicht einiges machen, die Eigenschaftseditoren für SQL-Strings sind auch sehr dürftig bzw. unpraktisch.
Dateianhänge
Fenster3.png
Fenster2.png
Fenster1.png

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: [ERLEDIGT] Gibt es Modified/UpdatesPending-Eigensc.?

Beitrag von mse »

Soner hat geschrieben:Updatestatus ist Fehlerhaft reagiert unterschiedlich auf die gleiche Situation.

Eben, jeder record hat einen eigenen updatestatus.
Außerdem hat TDBGrid auch Anzeigefehler mit der TSQLQuery-Komponente.
Man kann es mit dem Beispielprojekt reproduzieren.
1) Fenster so vergrößen das allen Zeilen in DBGrid passen
2) Dann die Fensterhöhe verringern sodaß DBGrid nicht alle Zeilen darstellen kann
3) Jetzt vergrößern, einige Zeilen werden mehrfach angezeigt.
Schau auf die Bilder im Anhang.

(Dieser Fehler tritt nicht mit Zeos-Kompenten)
Wenn ich mehr Zeit habe werde ich mir das ganze richtig anschauen.
Da kann ich vielleicht einiges machen, die Eigenschaftseditoren für SQL-Strings sind auch sehr dürftig bzw. unpraktisch.

Ich kann dir auch die MSEgui-Version von SQLDB empfehlen. ;-)

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: [ERLEDIGT] Gibt es Modified/UpdatesPending-Eigensc.?

Beitrag von Soner »

mse hat geschrieben:Eben, jeder record hat einen eigenen updatestatus.

Danke für die Info.
mse hat geschrieben:
mse hat geschrieben:Ich kann dir auch die MSEgui-Version von SQLDB empfehlen. ;-)

Ich habe schon öfters geschaut, schaue auch alle Jahre wieder und ich habe auch hier etwas darüber geschrieben.
Es ist zu sehen, dass du Tüftler und Linuxkonsolenbenutzer bist.
Du erinnerst mich immer wieder an Sportler von dem man sagt "Der Junge hatte Talent, aber ..."

Vielleicht schau mir das gleich noch mal an. :)

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: [ERLEDIGT] Gibt es Modified/UpdatesPending-Eigensc.?

Beitrag von mse »

Soner hat geschrieben:Es ist zu sehen, dass du Tüftler und Linuxkonsolenbenutzer bist.

Wie kommst du denn auf "Linuxkonsolenbenutzer"? Ich bin RAD-Enthusiast, darum der grosse Aufwand den ich zur Optimierung der Produktivität und Performance von MSEide+MSEgui treibe.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: [ERLEDIGT] Gibt es Modified/UpdatesPending-Eigensc.?

Beitrag von Soner »

@Martin:
Ich habe eben aus Sourceforge den trunk-version(mseide-msegui-svn-4862-trunk) heruntergeladen, es kompilirt nicht und die Programme beenden mit der Fehlermeldung Exitcode 204 (Meldung aus MSEide: Exited. Exitcode 204)

Ich habe das gemacht, damit es kompiliert:

Code: Alles auswählen

 
//msestream.pas
constructor tmsefilestream.create(ahandle: integer); //allways called
begin
 inherited create(ahandle); //soner original:   inherited;
end;
 
//msefileutils.pas
function finddir(const filename: filenamety): boolean;
//soner original: function finddir(const filename: filenamety): boolean; overload;
//und bei Funktionsdefiniton am Ende overload; hinzugefügt,
var
 info: fileinfoty;
begin
 result:= sys_getfileinfo(filename,info) and (info.extinfo1.filetype = ft_dir);
end;
 


Dann wird kompiliert aber die Programme enden mit der oberen Fehlermeldung ab.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: [ERLEDIGT] Gibt es Modified/UpdatesPending-Eigensc.?

Beitrag von mse »

SVN? MSEide+MSEgui ist seit einigen Jahren auf git. Ich habe gar nicht gewusst, dass das SVN Repo noch existiert und sollte es wohl entfernen...
Der Code ist hier:
https://gitlab.com/mseide-msegui/mseide-msegui
Dort ist auch die Installation und Kompilierung beschrieben.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: [ERLEDIGT] Gibt es Modified/UpdatesPending-Eigensc.?

Beitrag von Soner »

Is ok, sorry, ich habe gar nicht drauf geachtet, das war ur-alte Version.
https://sourceforge.net/p/mseide-msegui/svn/HEAD/tree/trunk/
Normale funktioniert.

Antworten