TDBNavigator: Fehler oder falsche Verwendung ?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von Lorca »

Hallo zusammen,

folgendes Problem wirft meine Frage auf, ob ich wieder mal etwas bei meiner Lazuarus Installation ( 2-0-12) etwas falsch gemacht habe oder ob ich vllt. einen Anwendungsfehler mache. Oder ist der DB Navigator etwas "unscharf"?
Oder hat das Entwicklerteam von Lazarus mal wieder eine andere Sicht auf die Dinge, als ich?

Ich habe ein ZEOS Tabellenobjekt (ZTable) und eine normale Datasource auf eine SQLITE3 DB-Tabelle mittels TZConnection gelegt.
Dann habe ich den TDBNavigator mit der DataSource verbunden und über einen Button die DB Tabelle geöffnet.

Das Problem:
Bei einer leeren DB-Tabelle werden "nbInsert", "nbEdit" und "nbRefresh" angezeigt.
Für "nbEdit" und "nbRefresh" ist dies in diesem Fall jedoch unlogisch.
Denn: welcher der nicht vorhandenen Sätze soll den bearbeitet oder aufgefrischt werden? :)

Gibt es eine Möglichkeit diese beiden Buttons auf "disabled" zu stellen? Oder muss ich eine Ableitung dieser Komponente machen,
um eine solche Funktion zu liefern?

Viele Grüße
Lorca

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von wp_xyz »

Dass bei einer leeren Tabelle der Button nbRefresh verfügbar ist, erscheint mir trotzdem logisch, denn bei einer Mehruser-Datenbank könnte es ja sein, dass ein anderer User schon einen Datensatz eingetragen hat, und du könntest dir damit die aktuelle Tabelle holen.

Bei nbEdit würde ich dir recht geben, aber ich habe mir ein kleines Beispiel für Delphi gemacht, und dort ist es genauso wie bei Lazarus: der Edit-Button ist auch bei leerer Tabelle aktiv. Man könnte sich vorstellen, dass der leere Record, der bei einer leeren DB im Grid erscheint, als temporärer Buffer schon existiert, so dass das Edit durchaus sinnvoll ist. Aber wenn dir das wichtig ist, solltest du einen Bug-Report schreiben, damit die Datenbank-Experten drüber schauen können.

Eine mögliche Lösung für nbEdit könnte man in TDBCustomNavigator.EditingChanged (lazarus/lcl/include/dbcustomnavigator.inc) einbauen:

Code: Alles auswählen

procedure TDBCustomNavigator.EditingChanged;
var
  CanModify: Boolean;
  HasData: Boolean;
begin
  CanModify:=Enabled and FDataLink.Active and FDataLink.DataSet.CanModify;
  HasData := not (FDataLink.Dataset.BOF and FDataLink.Dataset.EOF);              // <---- Neu

  Buttons[nbInsert].Enabled:=CanModify;
  Buttons[nbEdit].Enabled:=CanModify and not FDataLink.Editing and HasData;   // "and HasData" ergänzt
  Buttons[nbPost].Enabled:=CanModify and FDataLink.Editing;
  Buttons[nbCancel].Enabled:=CanModify and FDataLink.Editing;
  Buttons[nbRefresh].Enabled:=CanModify;

  FocusableButtons[nbInsert].Enabled:=CanModify;
  FocusableButtons[nbEdit].Enabled:=CanModify and not FDataLink.Editing and HasData;   // "and HasData" ergänzt
  FocusableButtons[nbPost].Enabled:=CanModify and FDataLink.Editing;
  FocusableButtons[nbCancel].Enabled:=CanModify and FDataLink.Editing;
  FocusableButtons[nbRefresh].Enabled:=Enabled and FDataLink.Active and not FDataLink.Editing;
end;

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von Lorca »

Hallo wp_xyz,

herzlichen Dank für Deine freundliche Antwort. :)
Ich war verhindert, und melde mich deshalb erst jetzt.

Deiner Überlegung bei nbRefresh, stimme ich zu. Die Situation mit einer mehr User DB hatte ich nicht auf den Schirm.
Ich denke, die nbEdit Situation, ist für die Kompatibilität und den Gleichlauf mit Delphi.
Für einen Bugreport, scheint es mir zu banal. Die Kollegen in der Lazarus Entwicklung haben (so glaube ich) größere Probleme zu lösen,
als sich um Dinge zu Kümmern, die auch bei Delphi so laufen.

Mir war es nur wichtig zu prüfen, ob diese Situation allein bei mir auftritt, weil ich vllt. mal wieder etwas bei der Installation von Lazarus
falsch gemacht habe, oder nicht.


Vielen Dank und Grüße
Lorca

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von Winni »

Hi!

Vielleicht ein bischen Hintergrund über den TDBNavigator:

Den gibt es seit Delphi 1 und war immer für Multi-User-Betrieb vorgesehen:
Borland war stolz auf seine BDE (Borland Database Engine), die zuerst nur dBase, Paradox und MS Access bearbeiten konnte, aber (glaub ich) ab Delphi 2 auch SQL. Und alles im Multi-User-Betrieb.

Wir haben uns in den 90ern Anwendungen geschnitzt, die auf vorhandene dBase-Tabellen aufsetze und einen echten Multi-User-Betrieb zu Windows 3.1 / 95-Zeiten ermöglichte. Das war damals sensationell! Nicht mehr absprechen, welcher Kollege wann welche dBase-Tabelle bearbeitet!

Winni

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von fliegermichl »

Ja und ein Bug in der BDE Installation hat dann schonmal die komplette Festplatte gelöscht :-)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von wp_xyz »

Hab mir meine Antwort weiter oben nochmals angesehen, und ich zeige dir jetzt, wie man mit Hilfe von Subclassing den Edit-Button des DBNavigator mit ein paar Zeilen fixen kann, ohne in den LCL-Code einzugreifen:

Code: Alles auswählen

type  // Muss vor der Form-Deklaration stehen, in der der Navigator verwendet wird.
  TDBNavigator = class(DBCtrls.TDBNavigator)
  protected
    procedure EditingChanged; override;
  end;
  ...
  procedure TDBNavigator.EditingChanged;
begin
  inherited;
  if (Datasource <> nil) and (Datasource.Dataset <> nil) and 
     (DataSource.Dataset.BOF and Datasource.Dataset.EOF) then
  begin
    Buttons[nbEdit].Enabled := false;
    FocusableButtons[nbEdit].Enabled := false;
  end;
end;
Dateianhänge
dbnavigator_editbutton.zip
(2.46 KiB) 75-mal heruntergeladen

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von Winni »

fliegermichl hat geschrieben:
Fr 5. Nov 2021, 11:54
Ja und ein Bug in der BDE Installation hat dann schonmal die komplette Festplatte gelöscht :-)
Hi!

Den kannte ich noch nicht.
Ist mit glücklicherweise nie passiert.
Aber dafür gabs ja den Fortschritt:
Der erste Linux-Server diente erstmal als Backup für den Netware-Server.
Und kam u.a. ins Haus, weil Novell Netware ein Schweine-Geld für das CD-ROM-Modul verlangte. Das fiel bei Linux aus der Tüte. Auf einem 486er.

Später haben wir dann Netware rausgeschmissen und alles mit MarS unter Linux emuliert: Netware-Server von MartinStöver. Wunderbar. Samba war da noch nicht in Sicht ...

Als man bei dem Sharpen beim PhotoStyler bei größeren Bildern noch eine Kaffee holen konnte ...

Winni

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von fliegermichl »

Naja, die BDE Installation hat vor der Installation das Zielverzeichnis gelöscht und wenn man gesagt hat, "ich will nach C:\" ...

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von charlytango »

schmunzel....

Jetzt weiß ich woher die geballte Kompetenz in diesem Forum kommt.
Wir spielen mit den Sachen einfach länger herum als die Youngsters :lol:

Allein die Zeit hat schon für etliche Stories gesorgt -- ich fühl mich wohl hier

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von six1 »

tja, das waren auch noch "RG58 Netzwerke" :?
Einmal kurz die Verbindung weg wegen Wackelkontakt und schon war die Sperrdatei auf einer Netzwerkfreigabe "kaputt".
Das ist, Gott sei Dank, heute viel einfacher und stabiler.
Wie oft waren die Tabellen kaputt bei BDE...
8)
Gruß, Michael

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von charlytango »

Mahh RGB58 Netzwerke....

Meine erste Netzwerkinstallation und DOS... drei PCs verbinden mit Netzwerkkarten und RGB58.
Hatte damals noch weniger Ahnung als heute gggg
Und die Informationsbeschaffung war wesentlich aufwendiger - Internet? Fehlanzeige, gab es noch nicht.
Also Bücher gelesen, Manuals gewälzt, Beschreibungen gelesen.

Karten einbauen, Verbinden, konfigurieren -- klappt nicht.
Dann halt anders.... da zogen damals Stunden ins Land.
Vor lauter rumkonfigurieren, Testen und an und abstecken hat gar nix mehr funktioniert.

In meiner Verzweiflung hab ich einen Freund gebeten mir zu helfen.
Der kam, sah sich das alles an und sprach die historischen Worte: "Willst du das Netzwerk-Kabel denn nicht mal anstecken?"

Mit dem ganzen Testen hatte ich einfach eine verbindung nicht mehr angesteckt und übersehen -- Kabel angesteckt und alles lief.
Die Blamage kann ich mir heute noch gelegentlich anhören ggggg

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von six1 »

:mrgreen:
kann ich nachvollziehen.. war eben alles neu.
In der "Firma" kam dann Yellow Cable für Graphische Systeme... das war, im Rückblick gesehen, ein Abenteuer :lol:
Gruß, Michael

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von Winni »

six1 hat geschrieben:
Sa 6. Nov 2021, 10:41
tja, das waren auch noch "RG58 Netzwerke" :?
Einmal kurz die Verbindung weg wegen Wackelkontakt und schon war die Sperrdatei auf einer Netzwerkfreigabe "kaputt".
Das ist, Gott sei Dank, heute viel einfacher und stabiler.
Wie oft waren die Tabellen kaputt bei BDE...
8)
Hi!

Ja, 10Base2 war abenteuerlich. Wenn die Putzfrau mit dem Staubsauger irgendwelche BNC-Verbindungen rausgerupst hatte, und man durch die Büros lief und überprüfte, wer denn noch ein Netz hat und wer nicht, um die Stelle zu finden.

Und wehe die 50-Ohm-Abschluss-Widerstände fehlten! Irgenwie waren die immer weg. Deshalb hatte ich immer 2 Stück beim Kleingeld.

Winni

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: TDBNavigator: Fehler oder falsche Verwendung ?

Beitrag von Winni »

Hi!

Ethernet seit 1983 und die verschiedenen IEEE 802 Versionen inkl IPX:

http://www.netzmafia.de/skripten/netze/netz4.html

Winni

Antworten