AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firedac: Öffnen einer ADS-DB dauert ewig

Firedac: Öffnen einer ADS-DB dauert ewig

Offene Frage von "oltrop"
Ein Thema von oltrop · begonnen am 28. Sep 2022 · letzter Beitrag vom 30. Sep 2022
Antwort Antwort
oltrop

Registriert seit: 24. Okt 2003
13 Beiträge
 
#1

Firedac: Öffnen einer ADS-DB dauert ewig

  Alt 28. Sep 2022, 13:02
Datenbank: Advantage Database • Version: 12 • Zugriff über: Firedac
Hallo Zusammen,

ich arbeite hauptsächlich mit Delphi XE und bin jetzt bei Delphi 11 gelandet.
Ich möchte eine ADS-Tabele (Advantage Database Server) mit Firedac öffnen.

Nach dem Öffnen läuft die Eieruhr eine Ewigkeit. Ist die Tabelle zu groß,
kommt auch ein Memory-Fehler. Eigentlich soll er einfach, wie früher, die DB
öffnen und z.B. in einem DBGrid die ersten Zeilen anzeigen.

Wie muss ich das machen?

Da wir demnächst auf eine PostgreSQL-DB umstellen bin ich etwas am testen.
Ich habe 2 FDConnection Objekte (Eine für ADS und eine für PG)
Verbinde ich nun meine TFDTable zuerst mit der PG Datenbank. Wird diese
schnell geöffnet. Verbinde ich danach die ADS mit der FDTable, wird
diese auch ruckzuck geöffnet.

Öffne ich zuerst die ADS, dauert es ewig.

Ich habe euch hier mal den Code mit gepostet. Dann wird es vielleicht etwas deutlicher

Delphi-Quellcode:
  // checked = ADS benutzen, sonst PostgreSQL
  if checkBox1.Checked then
  begin
   // vor ADS, erstmal PostgreSQL öffnen
   // So funktioniert das öffnen der ADS zügig
   // Lasse ich diese If-Struktur weg,
   // liest er sich die komplette ADS-Tabelle ein.
   if DM1.FDTAdressen.Connection = NIL then
   begin
     DM1.FDTAdressen.Close;
     DMStart.FDConADS.Connected := False;
     DMStart.FDConPG.Connected := True;
     DM1.FDTAdressen.Connection := DMStart.FDConPG;
     DM1.FDTAdressen.TableName := 'v2ad1001';
     DM1.FDTAdressen.Open;
   end;
   // jetzt ADS öffnen
   DM1.FDTAdressen.Close;
   DMStart.FDConPG.Connected := False;
   DMStart.FDConADS.Connected := True;
   DM1.FDTAdressen.Connection := DMStart.FDConADS;
   DM1.FDTAdressen.TableName := 'Adressen\V2AD1001';
   DM1.FDTAdressen.Open;
  end
  else begin
   // PostgreSQL öffnen
   DM1.FDTAdressen.Close;
   DMStart.FDConADS.Connected := False;
   DMStart.FDConPG.Connected := True;
   DM1.FDTAdressen.Connection := DMStart.FDConPG;
   DM1.FDTAdressen.TableName := 'v2ad1001';
   DM1.FDTAdressen.Open;
  end;
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.092 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Firedac: Öffnen einer ADS-DB dauert ewig

  Alt 28. Sep 2022, 13:17
Du hast doch einen Debugger. Was genau dauert ewig? Das DM1.FDTAdressen.Open() ?

Oder halte doch mal mittendrin mit dem Debugger an, dann siehst du, was er grade macht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#3

AW: Firedac: Öffnen einer ADS-DB dauert ewig

  Alt 28. Sep 2022, 13:20
Mal mit einem Profiler schauen, wo es hängt?

Zitat:
eine Ewigkeit. Ist die Tabelle zu groß
...
die ersten Zeilen anzeigen
Warum alle Daten laden?

Lade nur das, was du brauchst. (SELECT mit WHERE anstat die ganze TABLE)
Und Firedac sollte in den FetchOptions bereits was bieten, also wo es selbstständig nur das lädt, was aktuell nötig ist.
(natürlich sollte das verwendete Grid auch soeinen Modus unterstüzen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Firedac: Öffnen einer ADS-DB dauert ewig

  Alt 28. Sep 2022, 14:05
Leider arbeitet FireDAC in diesem Fall nicht wie die ADS Komponenten, da es keinen direkten ISAM-mode gibt. Wie bereits genannt: FetchOptions anschauen.
https://docwiki.embarcadero.com/RADS...tzen_(FireDAC)
speziell FetchOptions.CursorKind auf ckAutomatic, FetchOptions.Mode auf fmOnDemand sollten Besserung bringen.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
oltrop

Registriert seit: 24. Okt 2003
13 Beiträge
 
#5

AW: Firedac: Öffnen einer ADS-DB dauert ewig

  Alt 28. Sep 2022, 14:09
Erstmal vielen Dank für die Antworten.
Ich weiß schon was da los ist. Er versucht die komplette Tabelle in den Speicher zu laden.


Ich schaue mir die Optionen

"FetchOptions.CursorKind auf ckAutomatic, FetchOptions.Mode auf fmOnDemand"

an und melde mich nochmal!
  Mit Zitat antworten Zitat
oltrop

Registriert seit: 24. Okt 2003
13 Beiträge
 
#6

AW: Firedac: Öffnen einer ADS-DB dauert ewig

  Alt 29. Sep 2022, 15:36
So, hab mir nochmal dank eurem Tipp die Doku angeschaut.

Eingestellt habe ich jetzt:

Minimale Verzögerung beim Öffnen der Abfrage.
CursorKind = ckDynamic
Mode = fmOnDemand RowsetSize = 50 Schließen Sie fiMeta aus Items aus.

Das hat jetzt geklappt.

Vielen Dank euch allen!
  Mit Zitat antworten Zitat
Frickler

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

AW: Firedac: Öffnen einer ADS-DB dauert ewig

  Alt 30. Sep 2022, 12:20
Genau an dem Punkt sind wir auch aktuell bei einem Projekt. Dazu haben wir das FireDAC-Buch von Cary Jensen besorgt, welches sehr hilfreich ist.
  Mit Zitat antworten Zitat
oltrop

Registriert seit: 24. Okt 2003
13 Beiträge
 
#8

AW: Firedac: Öffnen einer ADS-DB dauert ewig

  Alt 30. Sep 2022, 13:46
Danke für den Tipp!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz