Sorry, dass ich so lange nicht geantwortet habe. Erstmal danke für die vielen Antworten und Informationen.
Die
Query kann auch .Edit und .Append?
Natürlich ... so lange das SELECT der
Query ein Rückschreiben erlaubt.
Notfalls kann man aber auch eigene INSERT/EDIT/DELETE-Statements angeben, wenn es gewisse Sonderfälle erfordern.
Eine
Query mit
SELECT * FROM deinetablle
entspricht der Table.
Lädt also auch ALLES.
Das habe ich jetzt mal ausprobiert und dabei hat sich dann herausgestellt, dass der "serverseitige Cursor" (clUseServer) tatsächlich nur mit TAdoQuery funktioniert, aber nicht mit TAdoTable. Zumindest für meine Kombination aus
DB, Provider usw. kann ich das so sagen: Wo eine Table selbst mit clUseServer wie oben beschrieben endlos lange lädt bis an's Limit, kommt eine
Query auf das "select * ..." hin sofort zurück und braucht keinen lokalen Speicher. Und auch .Edit() und .Append() funktionieren. So hatte ich mir das vorgestellt.
Dafür dauert dann das .Locate() viel länger. Wenn in einer
Query zu vielen Datensätzen positioniert werden muss, wartet man dann eben auch lange. Ich glaube aber, ich kann einen guten Kompromiss finden, bei welchen Tabellen ich mit clUseServer arbeite und bei welchen besser mit clUseClient.
Auch zu der Variante mit
SQL "Merge" habe ich experimentiert. Das Fiese dabei ist ja, dass das nicht zwischen verschiedenen Datenbanken geht, die einzumergenden Daten müssen also schon in der Ziel-
DB sein. Das kriege ich zwar mit einer leeren Puffertabelle mit derselben Struktur hin und mache dann das Merge zwischen der Puffertabelle und der Zieltabelle. Das ist dann wirklich sensationell schnell
. Aber anschließend sind die Datensätze der Zieltabelle nicht mit den anderen Ziel-
DB-Tabellen verknüpft, weil die Datensätze dort ja andere IDs haben. Statt eines einzigen "Merge" müsste ich dann wohl jeden Datensatz einzeln mergen
und dabei die Ziel-IDs der anderen Tabellen als Parameter angeben, oder wie? Und die Puffertabelle(n) ist/sind ja auch nicht gerade elegant.
Moin...
Wie wäre es die Anwendung grundsätzlich auf
MSSQL laufen zu lassen und eine Replikation einzurichten. Die kümmert sich um die Daten...was wo hin muß...
https://learn.microsoft.com/de-de/sq...l-server-ver16
* Filter einrichten - jeder Abonnent bekommt nur das was er sehen darf
* Die komplette Replikation kann als Script gespeichert werden zum Neuaufbau der Replikation.
[...]
Ja, liest sich auch gut. Aber die Quelltabellen stehen hier nicht von vornherein fest, sondern werden von den Anwendern aus verschiedensten Verzeichnissen interaktiv ausgewählt und ad hoc auf den
SQL Server kopiert. Und die Lernkurve mit der Replikation würde ich mir auch gerne erstmal sparen. Ich bin von Hause aus kein Datenbankprogrammierer.
Ich würde das überhaupt nicht mit Delphi lösen, sondern auf dem
SQL-Server einen Zugriff auf die
Access-Datenbank einrichten.
Hier gilt dann auch wieder das Argument mit der Ad-hoc-Auswahl einzelner, wild verstreuter
Access-Datenbanken. Die müsste man ja jedesmal einzeln einrichten.
Zitat:
Anschließend wird der Abgleich auf dem
SQL-Server gemacht. Dafür bietet sich eine Stored Procedure an. Das dürfte um ein Vielfaches schneller sein und um die Speicherverwaltung kümmert sich
SQL-Server.
Allerdings setzt das Kenntnisse in
SQL voraus. Falls die bei dir nicht ausreichend sind, solltest du dafür jemanden beauftragen. Das spart vermutlich dennoch mehr Zeit und Kosten ein, als du jetzt für den Umbau in Delphi investieren musst. ... Eine Stored Procedure auf dem
SQL-Server kannst du dann auch mit Delphi starten.
Mit einer kleinen Stored proc hatte ich auch mal kurz experimentiert und es auch geschafft, die von Delphi aus aufzurufen. Allerdings müsste ich dann die Identitätsprüfung komplett neu in
SQL selber programmieren und die ist reichlich verzwickt und verschachtelt. Für den Originalprogrammierer dieses Algos wäre es sicher machbar, aber ich habe das Projekt schon von seinem Nachfolger übernommen, der sich selber nicht da rantraute...
Zitat:
Ich gehe aber davon aus, dass eine Firma, die einen
SQL-Server betreibt, auch jemanden hat, der über ausreichend
SQL-Kenntnisse verfügt. Somit blieben die Kosten zumindest im Haus.
Im Prinzip richtig, aber den Server betreibt ja der Kunde und dann müssten wir ihm den Algo offenlegen - und das wollen wir auch wieder nicht.
Habe ich mal kurz probiert und hat überhaupt nicht funktioniert, es entstanden lauter Dubletten.