![]() |
AW: TAdoTable.Open() sprengt Arbeitsspeicherlimit
Zitat:
Notfalls kann man aber auch eigene INSERT/EDIT/DELETE-Statements angeben, wenn es gewisse Sonderfälle erfordern. Eine Query mit
Delphi-Quellcode:
entspricht der Table.
SELECT * FROM deinetablle
Lädt also auch ALLES. Teilweise kann man aber auch ein Nachladen/Paging aktieren (wenn DBMS, Treiber und QueryKomponente es ermöglichen) Dann wird nicht sofort alles geladen, sondern erst nach und nach, während man mit Next durchläuft, bzw. es wird immer nur ein kleiner Ausschnitt (Page) geladen und dann die Nächste und wieder freigeben. z.B. bei Grids muß natürlich auch das Grid und sein DataControler es unterstützen, wenn man quasi nur den grade sichbaren Bereich geladen haben will. Bei der Query kann man aber noch die Felder/Spalten auswählen/einschränken und vor allem auch die Records/Zeilen, durch ein entsprechendes WHERE und/oder LIMIT. Außerdem kann man JOINs einbinden und vieles mehr. |
AW: TAdoTable.Open() sprengt Arbeitsspeicherlimit
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Verarbeitungsmengen so wählen, dass der physikalische Speicher immer ausreicht, dann kann 1000 Mal ein Tausendstel durchaus schneller sein, als einmal alles, was ggfls. dann auch nur nach (gefühlten) Stunden mit 'ner Fehlermeldung scheitert. |
AW: TAdoTable.Open() sprengt Arbeitsspeicherlimit
|
AW: TAdoTable.Open() sprengt Arbeitsspeicherlimit
Ich würde das überhaupt nicht mit Delphi lösen, sondern auf dem SQL-Server einen Zugriff auf die Access-Datenbank einrichten. 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. 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. Eine Stored Procedure auf dem SQL-Server kannst du dann auch mit Delphi starten. |
AW: TAdoTable.Open() sprengt Arbeitsspeicherlimit
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...8-)
Zitat:
![]() * Filter einrichten - jeder Abonnent bekommt nur das was er sehen darf :lol: * Die komplette Replikation kann als Script gespeichert werden zum Neuaufbau der Replikation. * Wir machen die Synchronierung der Daten zwischen den Filialen damit. Die Niederlassung schreibt was lokal rein, in "sekundenschnelle" ist die Information in der "Zentrale"... * Wenn mal ein Abonnent "kaputt" ist, dann reorganisiert die Replikation die komplette Datenbank aus dem Verleger neu. :thumb: |
AW: TAdoTable.Open() sprengt Arbeitsspeicherlimit
Sorry, dass ich so lange nicht geantwortet habe. Erstmal danke für die vielen Antworten und Informationen. :-)
Zitat:
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 :shock: . 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 :pale: und dabei die Ziel-IDs der anderen Tabellen als Parameter angeben, oder wie? Und die Puffertabelle(n) ist/sind ja auch nicht gerade elegant. Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 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 by Thomas Breitkreuz