AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MyDac Erfahrung

Ein Thema von Edelfix · begonnen am 31. Mär 2025 · letzter Beitrag vom 1. Apr 2025
Antwort Antwort
Seite 1 von 2  1 2      
fred.ahrens

Registriert seit: 11. Aug 2007
Ort: Ketzin/Havel
49 Beiträge
 
Delphi 12 Athens
 
#1

AW: MyDac Erfahrung

  Alt 31. Mär 2025, 15:30
Das Problem sind nach wie vor die großen Datenmengen. Die Table Komponente kommt damit nicht zu recht.
Mit "FetchAll" true dauert der Open Befehl viel zu lange und mit "FatechAll" false kommen die genannten Fehlermeldungen.
[...]
Das kommt mir aber sehr umständlich vor. Das müsste auch anders gehen.
Das Suchen musst du dem Server überlassen - genau dafür ist er da und optimiert. Sobald du anfängst große Datenmengen vom Server zu holen und dann erst auszuwerten, baust du dir solche Probleme ins Projekt ein.

Wir haben genau die selbe Situation hier gehabt und haben dann schweren Herzens auf Queries umgestellt, die nach Möglichkeit alle Auswertungen auf dem Server ausführen. Am Ende hat es sich aber gelohnt. Der Serverzugriff ist extrem beschleunigt und Probleme durch zu große Ergebnissätze gibt's auch nicht mehr.
Fred Ahrens (ZeeBORN GmbH)
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
619 Beiträge
 
Delphi XE6 Enterprise
 
#2

AW: MyDac Erfahrung

  Alt 31. Mär 2025, 16:54
In MySQL gibt es noch so einen obskuren Zugriffsmodus namens "Handler". Der funktioniert wohl ähnlich wie beim guten alten dBase mit "Tabelle öffnen", "Index setzen", "nächsten Datensatz anfahren" usw. Soll angeblich deutlich schneller sein als per "Select". Man kann ihn in "MyTable" mit der Option "UseHandler" einschalten.
Siehe https://docs.devart.com/mydac/devart...usehandler.htm
Vielleicht bringt das ja was.
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
777 Beiträge
 
#3

AW: MyDac Erfahrung

  Alt 31. Mär 2025, 17:40
Zum Glück hatte ich mich damals mit Firebird als Datenbank durchgesetzt. Wir haben nämlich, von der BDE kommend, sehr viele Table Komponenten im Einsatz. Mit Firebird kann man Server-Cursor mit Filter und Locate etc. nutzen. Zumindest mit FireDAC wird das dann alles am Server ausgeführt.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.395 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: MyDac Erfahrung

  Alt 31. Mär 2025, 20:28
habe mydac mit Lazarus am Laufen unter Linux. Keine Problem, auch beim Verarbeiten großer (also wirklich großer) Datenmengen.

Jetzt habe ich aber festgestellt das der Befehl "Locate" nur in der im Client befindlichen Menge sucht.
Wenn ich "LIMIT 100" einstelle dann findet "Locate" nur etwas in den 100. Wenn der Datensatz gerade nicht dabei ist dann wird auch nichts gefunden.
scnr: Wer mit locate und DBMS arbeitet, hat eh jegliche Kontrolle verloren

Vergiss es einfach. vergiss irgendwelche Tablekomponenten.

nimm Querykomponenten, nimm spezialisierte SQL, die genau das tun, was du willst, und nur das.

Bitte verzeih, wenn ich das nicht explizit raus suche:
Ich habe mal eine BDE Anwendung auf Postgresql umgebaut und dabei pgDac verwendet. Und natürlich für die Umbauzeit TTable mit TpgTable ersetzt. Aber selbst für die Übergangszeit war das ne "sch****" selbst der Support hat mir damals geschrieben: TxTable Komponenten sind eigentlich nicht für einen wirklichen Einsatz gedacht.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: MyDac Erfahrung

  Alt 31. Mär 2025, 22:08
Ich kann ähnliche Erfahrungen bei der Nutzung von *Table Komponenten berichten. Wir haben ein Produkt von Uralt (Paradox + BDE, ganz früher lief das sogar noch unter DOS (ja, TurboPascal) mit dBASE) auf MySQL umgestellt. Erst mit den Zeos-Komponenten. Als dann das Lizenzgeraffel mit MySQL anfing kamen wir zu MyDAC, und haben seit ein paar Jahren auch das DBMS auf MariaDB umgestellt.

Während all dieser Zeit haben wir immer noch hier und da *Table Komponenten mitgeschleppt, die immer wieder zu Problemen diversester Art geführt haben. Der gedankliche Schritt von der alten BDE-like Arbeitsweise hin zu vernünftigen SQL-Queries ist am Anfang ungewohnt, aber es lohnt sich!!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
619 Beiträge
 
Delphi XE6 Enterprise
 
#6

AW: MyDac Erfahrung

  Alt Gestern, 08:40
scnr: Wer mit locate und DBMS arbeitet, hat eh jegliche Kontrolle verloren

Vergiss es einfach. vergiss irgendwelche Tablekomponenten.
Und dann ersetzt man
Delphi-Quellcode:
tbl.Tablename := 'Blubb';
tbl.Filter := 'artikelnr = 4711';
tbl.Filtered := true;
tbl.Open;
if tbl.FindFirst then begin
  repeat
    tbl.Edit;
    tbl.FieldByName('bla').AsBoolean := false;
    tbl.Post;
  until not tbl.FindNext;
end;
tbl.Close;
durch
Delphi-Quellcode:
qry.SQL.Text := 'SELECT * FROM Blubb WHERE artikelnr = 4711';
qry.Open;
while not qry.Eof do begin
  qry.Edit;
  qry.FieldByName('bla').AsBoolean := false;
  qry.Post;
  qry.Next;
end;
qry.Close;
...und hat "von Table auf Query umgestellt"

Wer Verschlüsselung nutzen will mit den DevArt-Komponenten, ist sogar gezwungen, das so zu machen...

Geändert von Frickler (Gestern um 08:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.221 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: MyDac Erfahrung

  Alt Gestern, 11:00
qry.SQL.Text := 'SELECT * FROM Blubb WHERE artikelnr = 4711';
Und jetzt auch noch parametrisierte perpared Abfragen und man wird schneller und sichererer ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
333 Beiträge
 
Delphi 12 Athens
 
#8

AW: MyDac Erfahrung

  Alt Gestern, 11:23
qry.SQL.Text := 'SELECT * FROM Blubb WHERE artikelnr = 4711';
Und jetzt auch noch parametrisierte perpared Abfragen und man wird schneller und sichererer ...
Das ist richtig und wichtig!
Also wenns wirklich nur so eine "Billo" Aufgabe ist würde ich das sogar komplett in einen Einzeiler Paken
Sparst dir dadurch das ganze Cursor-Geschubse in gänze.

Delphi-Quellcode:
qry.Execute('UPDATE Blubb SET bla=:bla WHERE artikelnr = :artikelnr',[false,4711]);
...
Solange die SQL Query eine Connection hat, brauchst du dich um nichts mehr kümmern. Außer du brauchst natürlich die SQL danach wieder um die Daten darzustellen, dann würde ich es wahrscheinlich so lösen.

Delphi-Quellcode:
qry.connection.Execute('UPDATE Blubb SET bla=:bla WHERE artikelnr = :artikelnr',[false,4711]);
qry.open('SELECT * FROM Blubb WHERE artikelnr = :artikelnr ',[4711]);
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.395 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: MyDac Erfahrung

  Alt Gestern, 11:43
...und hat "von Table auf Query umgestellt"
boah ernsthaft? Den Satz habe ich geschrieben, dass man das halt auch nicht mahcen soll, ihn dann aber wieder gelöscht vor dem Post


Wer Verschlüsselung nutzen will mit den DevArt-Komponenten, ist sogar gezwungen, das so zu machen...

wie meinen?
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
228 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: MyDac Erfahrung

  Alt Gestern, 15:11
Unsere Tabellen Komponenten sind immer mit einem DBGrid verbunden. Das DBGrid liegt auf einer Form aber die Table Komponente auf einem DataModul. Auch wenn die Maske grad nichts anzeigt so ist die Table von überall erreichbar. Es wird von unterschiedlichen Stellen aus ein Locate gemacht dann der Datnsatz (fals gefunden) in ein Record geladen und dann verarbeitet oder im DBGrid angezeigt.
Bis jetzt war das eine Zeile mit Locate. Wir mussten uns nicht darum kümmern ob das Locate dafür da ist ein Datensatz zu holen oder im Grid zu positionieren. Und davon etwas 2.000 mal im Projekt.
Jetzt muss ich mit „LIMIT 100“ für das DBGrid arbeiten und dafür sorgen das der gesucht Datensatz bei den 100 dabei ist um dann im DBGrid darauf zu positionieren oder nur ein Datensatz um dann mit einem Record zu arbeiten.
Der SQL Befehl währe dann:
1. Ich brauche eine separate SQL Komponente um den Datensatz zu suchen.
2. Jetzt der SQL Aufruf mit LIMI 100 und OFFSET (gesuchter Datensatz).
3. Und noch mit Locate im DBGrid auf den Datensatz positionieren.
Das ist mehr als nur eine Zeile.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz