![]() |
Datenbank: Firebird • Version: 2.5.2 • Zugriff über: DBX
Clientdataset zwischen zwei Datenbankservern wechseln
Hallo,
ich habe ganz klassisch TSQLConnection, TSQLQuery, Datasetprovider, Clientdataset in meinem Projekt und möchte zwischen zwei verschiedenen Servern umschalten (einmal remote, einmal lokaler Server). Warum geht das nur, wenn ich die SQLConnection vorher schliesse? Sobald ich connected:=False auskommentiere, wird das Clientdataset verbunden und bleibt dann stur auf der erstaufgerufenen Datenmenge stehen.
Code:
procedure TForm8.Button1Click(Sender: TObject);
begin CDSStunden.Close; if Server then begin Remoteserver.Connected:=False; Localhost.Connected:=False; SQLQStunden.SQLConnection:=Remoteserver; end else begin Remoteserver.Connected:=False; Localhost.Connected:=False; SQLQStunden.SQLConnection:=Localhost; end; CDSStunden.Open; Server:=not server; Caption:=IntToStr(StrToInt(caption)+1); end; |
AW: Clientdataset zwischen zwei Datenbankservern wechseln
So wie ich das verstehe benutzt du ja verschiedene Connections. Dann musst du eigentlich nur die Query schließen (nicht die Connections) und der Query eine andere Connection zuweisen und dann die Query wieder öffnen.
|
AW: Clientdataset zwischen zwei Datenbankservern wechseln
Genau das funktioniert ja nicht. Die SQLQuerys sind ja eh nicht active, da ich mit den Clientdatasets arbeite.
|
AW: Clientdataset zwischen zwei Datenbankservern wechseln
Wenn die SQLQuerys nicht aktiv sind, woher sollten dann die Daten kommen?
|
AW: Clientdataset zwischen zwei Datenbankservern wechseln
Aus dem Clientdataset? Die SQLQuery wird doch nur kurz vom Clientdataset geöffnet, um die Daten einzulesen und dann wieder geschlossen.
|
AW: Clientdataset zwischen zwei Datenbankservern wechseln
Hm, dann musst du wohl nochmal genau erklären was du willst, ich habs so verstanden:
- Connection1 active - Query benutzt Connection1 - Client-Dataset nimmt Daten aus Query (dazu muss Query aktiv sein) Connection-Wechsel - Connection2 active - Query benutzt Connection2 - Client-Dataset nimmt Daten aus Query (dazu muss Query aktiv sein) |
AW: Clientdataset zwischen zwei Datenbankservern wechseln
nö, Query muss dazu doch nicht ständig aktiv sein.
Clientdataset.Open (oder Clientdataset.Active:=true) öffnet selber intern die Query, zieht sich die Daten ins RAM und macht die Query wieder zu. Erst bei Refresh, ApplyUpdates und so wird wieder auf die Datenmenge zugegriffen. |
AW: Clientdataset zwischen zwei Datenbankservern wechseln
Genau, und wenn man das CDS per 'Close' schließt, bleiben die Daten im Speicher. Das CDS unterstützt das Briefcasemodel. Ergo muss man dem explizit sagen: "Saug Dir die Daten nochmal". Eventuell geht das über ein Clear+Open auch, wobei 'Refresh' irgendwie sauberer wäre.
|
AW: Clientdataset zwischen zwei Datenbankservern wechseln
Zitat:
Nebenbei, die Query wird in jedem Fall mit der Zuweisung der Connection geschlossen. |
AW: Clientdataset zwischen zwei Datenbankservern wechseln
Ein EmptyDataset und Refresh bringen auf jeden Fall nix, grade getestet
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:07 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