TFDMemTable kann für dieses Problem nicht funktionieren, da die Daten darin ja nur auf dem Client liegen und damit ein auf dem Server abzuarbeitender Join nicht möglich ist.
Ich habe solche Probleme (wenn die Liste der foreign keys für die Auswahl zu lang für eine IN
query ist) traditionell mit einer normalen Tabelle für temporäre Listen auf den Server gelöst. Zusätzlich zu dem Datenfeld für die Keys für den Join enthält die Tabelle ein Feld für eine numerische "
query ID". Als Vorbereitung für den geplanten Join holt sich der Client eine neue
Query ID aus einer Sequence auf dem Server. Dann fügt er die Keys für den Join (in deinem Beispiel die primary keys der ausgewählten Firmem) in die Tabelle ein, wobei alle neuen Zeilen die gleiche
Query ID bekommen. Dann kann man die finale
Query mit einem Join auf diese Tabelle formulieren und mit Hilfe der
Query ID die zu verwendenden key auswählen. Wenn man die Ergebnisse verarbeitet hat kann man die Keys aus der Tabelle mit den temporären Daten einfach wieder löschen, sie haben ja alle die gleiche
Query ID.
Dieses Verfahren funktioniert mit praktisch jedem Datenbankserver, auch wenn er keine temporären Tabellen anbietet, deren Inhalt nach Ende der Transaktion oder Session automatisch gelöscht wird.
Der Bottleneck ist dabei normalerweise das Einfügen der Keys für die Auswahl, jedenfalls wenn der Server nicht sowas wie Oracles array DML anbietet, um die Daten für viele neue Zeilen
en bloc an den Server zu schicken. Mit Interbase kenne ich mich nicht so aus, vielleicht gibt es da was äquivalentes.