Zeos kann Datenbank DLL nicht laden?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6924
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von af0815 »

Es ist alles in den fixes Branchen gefixt (Ich habe Zeos8.0-fixes getestet). OPM natürlich noch nicht, das dauert natürlich..
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1605
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4.2 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von MmVisual »

Kann man in Zeos die sybdb DLL's ebenfalls aktualisieren?
Damit haben dann andere nicht auch noch das gleiche Problem.
Sybdb.dll.zip
(350.65 KiB) 57-mal heruntergeladen
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6924
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von af0815 »

Das eine hat nur bedingt mit dem Anderen zu tun. Die DLL ist keine stabile Version.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1605
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4.2 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von MmVisual »

"Stabil" ist ohnehin relativ gesehen.
Immerhin hat die neuere DLL den von Zeos erzeugten Speicherleck gezeigt, die alte DLL hat das einfach ignoriert und mit einem Speicherleck irgendwie funktioniert.

Zeos V8 ist derzeit auch "Stabil", funktioniert leider dennoch (noch) nicht so wie ich es brauche.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6924
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von af0815 »

Zwischen 7 und 8 gibt es natürlich Unterschiede und sicher auch breaking changes.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1605
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4.2 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von MmVisual »

Das sind so meine Problemchen, das war zumindest noch mit SVN 8320 so:

- TDBMemo: Gelöschter Text wird nicht in der DB gelöscht
- ReadOnly Fields werden nicht in die DB geschrieben
- Berechnete Felder: Sortierung nicht möglich (Quicksort)
- Update RefreshSQL liefert kein Ergebnis
- GetTabelNames bei OleDB

Ich habe dazu auch Bugreports geschrieben, die wurden jedoch noch nicht bearbeitet, sonst hätte ich eine Mail bekommen.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6924
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von af0815 »

Hast du einzelne Testprogramme für die Sachen ?

Weil zB. ReadOnly Fields nicht in die DB geschrieben werden, erscheint mir nur logisch.

Und berechnete Felder zu sortieren ist für eine DB nicht möglich, das muss auf einer anderen Ebene gemacht werden, also direkt im lokalen Cache.

Aber genau deswegen braucht man Beispiele. Bzw. wenn es schon welche gibt, die Links dazu.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1605
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4.2 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von MmVisual »

Doch, ReadOnly Felder müssen zwingend auch geschrieben werden können.

Ich habe jede Menge Status Felder, die in der Tabelle mit angezeigt werden, jedoch der Benutzer nie ändern darf. Jedes dieser Felder sind per ReadOnly geschützt. Wenn ich die schreibe, dann wird ReadOnly auf False gesetzt, Wert gesetzt und wieder auf True.
Dieses Zeos Problem konnte ich selbst lösen:

Code: Alles auswählen

procedure TZGenerateSQLCachedResolver.FillInsertColumnsPairList(NewRowAccessor: TZRowAccessor);
: : :
 if (Tmp = '') or (* Metadata.IsReadOnly(I) or *) not Metadata.IsWritable(I) or
Leider ist das Verständnis der Zeos Entwickler noch nicht so ganz klar was der Anwender so alles braucht.
Wenn man wenigstens in der TZConnecten ein Parameter setzen könnte, damit das wieder geht.

Nein, ich habe kein extra Testprogramm, ich hatte das in meine "große" EXE rein gemacht und viele Dinge habe ich selbst auch nicht bemerkt sondern erst andere User.

Die Berechnete Felder konnten früher mit der Zeos eigenen Quicksort Funktion lokal sortiert werden, doch von den berechneten Feldern kann die Funktion nicht mehr die richtigen Werte lesen. Es wird der im berechneten Feld deklarierten Datentyp nicht beachtet und der Wert einfach nur irgendwie als Pointer gelesen. Soweit hatte ich das raus gefunden, jedoch im Nirwana der Zeiger konnte ich den Fehler doch nicht finden, da muss ein echter Zeos Experte ran.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6924
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von af0815 »

Nur zum Verständnis. Man hat eine Datenbank Schicht = Datenbank, eine Schicht für die Abfrage und Transport, wo auch der Zwischenspeicher liegt = SqlDb oder Zeos, die Schicht die die Daten verarbeitet bzw. aufbereitet = Dataset, Fields das ist Lazarus und die GUI = interagiert mit dem Benutzer ist auch Lazarus.

Beispiel
Wenn du ein ReadOnly Feld machst, wo ist es ReadOnly? Laut deiner Beschreibung jetzt ist das ReadOnly nur in den letzten beiden Schichten, also GUI und Dataset. Dann setz es dort durch und hänge es nicht SqlDb oder Zeos um, weil in der DB und in den Puffern willst du ja die Felder änderbar haben. Daher ist das aus der Sicht der DB und somit auch Zeos eine ganz normale Spalte.
Machst du die Trennung nicht, wirst das auch keinen Entwickler hinter den Ofen hervorholen, weil hier ist dein GUI und Business Logik Part verantwortlich und nicht ein Hilfskonstrukt an einer falschen Stelle.

Auch bei Sortierungen von berechneten Feldern, bist du genaugenommen schon wieder im Business Logik Bereich, weil die Daten wurden vom Server und Zeos (SqlDb) abgeholt und übergeben, das du jetzt ein Feld hinzugefügst ist schön, aber für die gelieferten Daten nicht mehr relevant. Eine Änderung der Sortierung ist jetzt in der Business Logik vorzunehmen oder du bringst es auf den Server als berechnetes Feld. Dann musst du dich aber Daum kümmern, falls das nicht RO ist, das geänderte Daten zerlegt und auf die richtigen Felder gebucht wird.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1605
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4.2 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von MmVisual »

Ich habe in einer Tabelle 10 Spalten. Eine davon soll ReadOnly sein.
Nun habe ich ein TDBGrid, in der will ich zulassen dass man die 9 Felder editieren kann. Wie bringe ich es dem TDBGrid bei, ohne extra viel Code, dass dieses eine Feld ReadOnly ist?
---> genau, man macht bei der Eigenschaft von TField.ReadOnly = TRUE.
Genau dafür ist auch die Eigenschaft in TField da, um Global sagen zu können dass man von keiner einzigen Verknüpfung, weder TDBEdit, noch TDBGrid, noch sonst eine dynamische Verknüpfung, das Feld von einer Benutzereingabe beschrieben werden darf.
Wenn jetzt Zeos einfach nur für sich beschließt, dass man solche Felder nieeeemals wieder in einer DB speichern darf dann ist das schlicht weg ein Fehler, ein absoluter Denkfehler von Leuten die mit gewalt wollen dass Features in Lazarus nicht mehr nutzbar sind.
Wenn man den absoluten Sonderfall hat, dass man so ein Feld mit 100% Sicherheit niemals in eine Datenbank schreibt, dann hat der Anwender ein TZUpdateSQL einzusetzen, damit hat er dann selbst unter Kontrolle was geschrieben und was nicht geschrieben werden darf.
Aber dass Zeos jetzt einfach von sich aus mal so entscheidet dass Felder jetzt einfach so nicht in die DB geschrieben werden, das ist nicht OK.
Sorry, für alle die das zu verantworten haben und dafür auch noch gerade stehen habe ich leider kein Verständnis. :cry:
Und ich habe bereits die Codeänderung als Bugreport geschrieben, von daher braucht der Zeos Entwickler das auch nur übernehmen.

Zeos bietet die Möglichkeit der Sortierung der Daten nachdem die Daten vom Server abgeholt werden. Ich nutze diese Möglichkeit sehr gerne, da es viel schneller ist als wie jedes mal beim umsortieren die Daten neu vom Server zu laden.
Früher konnte Zeos die Inhalte der berechneten Felder ebenfalls korrekt berechnen. Wenn das nun nicht mehr geht ist das ein Bug.
Alternative: Zeos kann natürlich auch diese ganze Funktionen für das Sortieren im RAM auch komplett löschen. Es wäre schade, jedoch deiner Aussage nach konsequent.

Ich verstehe jetzt nicht was jetzt das RO mit der Sortierung zu tun hat, mir fehlt da jetzt der Zusammenhang, wieso sollte ein ReadOnly Feld nicht auch sortierbar sein?
EleLa - Elektronik Lagerverwaltung - www.elela.de

Sieben
Beiträge: 294
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von Sieben »

Wie bringe ich es dem TDBGrid bei, ohne extra viel Code, dass dieses eine Feld ReadOnly ist?
Hast du schon mal versucht, nur TColumn.ReadOnly zu setzen...?

MmVisual
Beiträge: 1605
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4.2 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Zeos kann Datenbank DLL nicht laden?

Beitrag von MmVisual »

Wie kann man bei TColumn zur Designzeit deklarieren?

Bei TField kann man das mit Rechtsklick auf TZQuery mit "Felder bearbeiten..." ganz einfach machen. Da drin nochmals Rechtsklick und kann alle Felder laden, die DisplayWith, DisplayFormat, unsw. einstellen und die Ereignisse OnGetText verwenden. Das ganze ist innerhalb weniger Sekunden eingestellt/programmiert.

Ich nutze die Möglichkeiten die eine Datenbank so bietet komplett aus.
Bisher hat mich noch niemand davon überzeugen können warum diese ReadOnly Felder nicht auch in die Datenbank geschrieben werden sollen.
Für mich sieht das nur so aus, dass Zeos V8 versucht krampfhaft schneller zu werden, bei diesem jedoch wurde eher zu viel optimiert, was schlussendlich die Möglichkeiten die Komponente gut zu benutzen enorm einschränkt.

Wie schon vorgeschlagen:
Bei TZConnection einen Parameter einfügen UpdateReadOnlyFields: Boolean, damit kann man dem Anwender überlassen ob er diese Zeos Optimierung haben möchte oder nicht. Da sollte Zeos nicht einfach so blockieren.

Ein Traum habe ich auch noch ... dass man für einzelne Datenätze deklarieren kann ob das einzelne Feld ReadOnly ist.
EleLa - Elektronik Lagerverwaltung - www.elela.de

charlytango
Beiträge: 1154
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: Zeos kann Datenbank DLL nicht laden?

Beitrag von charlytango »

MmVisual hat geschrieben: Do 7. Aug 2025, 08:53 Bei TField kann man das mit Rechtsklick auf TZQuery mit "Felder bearbeiten..." ganz einfach machen. Da drin nochmals Rechtsklick und kann alle Felder laden, die DisplayWith, DisplayFormat, unsw. einstellen und die Ereignisse OnGetText verwenden. Das ganze ist innerhalb weniger Sekunden eingestellt/programmiert.
Das gleiche/ähnliche System gibt es auch auf der Ebene von TDBGrid.
Rechtsklick auf TDBGrid und "Felder bearbeiten..."
Damit kannst du jede TColumn zur Designzeit einstellen.
Auch ReadOnly

Antworten