![]() |
Datenbank: Advantage Database • Version: 12 • Zugriff über: Firedac
Firedac: Öffnen einer ADS-DB dauert ewig
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; |
AW: Firedac: Öffnen einer ADS-DB dauert ewig
Du hast doch einen Debugger. Was genau dauert ewig? Das
Delphi-Quellcode:
?
DM1.FDTAdressen.Open()
Oder halte doch mal mittendrin mit dem Debugger an, dann siehst du, was er grade macht. |
AW: Firedac: Öffnen einer ADS-DB dauert ewig
Mal mit einem Profiler schauen, wo es hängt?
Zitat:
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) |
AW: Firedac: Öffnen einer ADS-DB dauert ewig
Leider arbeitet FireDAC in diesem Fall nicht wie die ADS Komponenten, da es keinen direkten ISAM-mode gibt. Wie bereits genannt: FetchOptions anschauen.
![]() speziell FetchOptions.CursorKind auf ckAutomatic, FetchOptions.Mode auf fmOnDemand sollten Besserung bringen. |
AW: Firedac: Öffnen einer ADS-DB dauert ewig
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! |
AW: Firedac: Öffnen einer ADS-DB dauert ewig
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! :-D |
AW: Firedac: Öffnen einer ADS-DB dauert ewig
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.
|
AW: Firedac: Öffnen einer ADS-DB dauert ewig
Danke für den Tipp:thumb:!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 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