Einzelnen Beitrag anzeigen

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