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;