AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firedac SchemaAdapter Problem!

Firedac SchemaAdapter Problem!

Ein Thema von Mavarik · begonnen am 13. Nov 2014 · letzter Beitrag vom 21. Dez 2015
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#1

Firedac SchemaAdapter Problem!

  Alt 13. Nov 2014, 13:32
Datenbank: MySQL • Version: XE7 • Zugriff über: Firedac
Hallo Zusammen!
Zitat von Offtopic:
Firedac ist jenseits von intuitiv bedienbar!
Ich habe eine Tabelle "Test" auf einem lokalen MySQL Server.
FDConnection<-FDQuery<-FDSchemaAdapter
Naja und FDGUIxWaitCursor & FDStanStorageBinLink
mit
Delphi-Quellcode:
fdQuery.SQL := 'SELECT * FROM {id Test}';
fdQuery.Active := true;
Hole ich mir alle Daten in ein Grid
DBGrid<- DataSource <- FDQuery
Soweit so gut.

Mit einen Butten schreibe ich den SchemaAdapter auf die Platte.
Delphi-Quellcode:
FDSchemaAdapter.SaveToFile('DIV.DAT',sfBinary);
FDSchemaAdapter.ApplyUpdates;
Ups... ALLE Datensätze werden auf die Platte geschrieben.
Jetzt ändere ich einen Datensatz (fdquery.CachedUpdates := true) und drücke den Button nochmal.
Und schon wieder werden alle Daten auf die Platte geschrieben!
Wie schaffe ich es das nur die Änderungen vom fdSchemaAdapter gespeichert werden?

Grüsse Mavarik
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Firedac SchemaAdapter Problem!

  Alt 13. Nov 2014, 13:42
Laut Doku sollte es die Eigenschaft ".Delta" sein, die Dir die Menge der geänderten Datensätze gibt.
http://docwiki.embarcadero.com/RADSt...ates_(FireDAC)
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Firedac SchemaAdapter Problem!

  Alt 13. Nov 2014, 13:51
Laut Doku sollte es die Eigenschaft ".Delta" sein, die Dir die Menge der geänderten Datensätze gibt.
http://docwiki.embarcadero.com/RADSt...ates_(FireDAC)
Ja aber das ist die Property des FDQuery und nicht des SchemaAdapters...

Ich habe doch extra einen SchemaAdapter, der die Änderungen zentralisieren soll, oder?
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Firedac SchemaAdapter Problem!

  Alt 13. Nov 2014, 14:03
Ja, aber der zentralisiert die Änderungen aller an ihn angebundenen DataSets.
Du kannst ihn nach den Datasets fragen und dann das jeweilige Delta abrufen. Jeder dieser DataSets kann ja ein völlig anderes Feld-Layout haben, das alles in einem gemeinsamen Topf verwalten zu wollen, ergibt keinen Sinn.

Was möchtest Du denn erreichen?
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Firedac SchemaAdapter Problem!

  Alt 13. Nov 2014, 14:10
Was möchtest Du denn erreichen?
Ich möchte die Änderungen von N-Querys in einem SchemaAdapter serialisieren und die Daten von da aus per Bin-Stream oder ggf. JSon zu einem anderen (entfernten) SchemaAdapter transportieren um auf der anderen Seite einen Load und den ApplyUpdates zu machen.

Für alle Fälle wo PC1 nicht per Datenbankverbindung zu Datenserver verbinden kann.

Mavarik

PS.: Könnte ggf. auch per eMail sein.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Firedac SchemaAdapter Problem!

  Alt 13. Nov 2014, 14:20
Zur Not kannst Du ihm ja mal die Option "siData" aus dessen Eigenschaft "ResourceOptions.StoreItems" wegnehmen.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Firedac SchemaAdapter Problem!

  Alt 13. Nov 2014, 14:26
Zur Not kannst Du ihm ja mal die Option "siData" aus dessen Eigenschaft "ResourceOptions.StoreItems" wegnehmen.
OK Das war schon mal der 1. Schritt, Danke..

Jetzt müsste ich nur noch den Change-Puffer löschen, denn obwohl ich ApplyUpdates gemacht habe,
kommen beim 2., 3. usw. immer noch die Änderungen vom 1. mal mit...

Mavarik
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Firedac SchemaAdapter Problem!

  Alt 13. Nov 2014, 14:33
Zitat:
After applying updates, the changed records still remain in the changes log. To remove them from the changes log and mark them as unmodified, call the CommitUpdates method of each DataSet.
Also in etwa wie folgt:
Delphi-Quellcode:
FDConnection1.StartTransaction;
iErrors := FDSchemaAdapter1.ApplyUpdates;
if iErrors = 0 then
 begin
  for x := 0 to FDSchemeAdapter1.Count-1 do
    FDSchemaAdapter1.DataSets[x].CommitUpdates;
  FDConnection1.Commit;
end
else
  FDConnection1.Rollback;
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Firedac SchemaAdapter Problem!

  Alt 13. Nov 2014, 14:42
Zitat:
After applying updates, the changed records still remain in the changes log. To remove them from the changes log and mark them as unmodified, call the CommitUpdates method of each DataSet.
Ja schon klar... Das setzt ja aber wieder eine Verbindung zum Datenbank Server voraus...

Ich suche ja nach eine "Aktenkoffer-Lösung"...

Nach dem Motto: "arbeite mal schön weiter, auch ohne Internetverbindung auf Deinen MemTablen"...

Der SchemaAdapter merk sich alle Änderungen. Bevor ich die App beende, wird der Change-Log auf die Platte geschrieben.


Mavarik
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Firedac SchemaAdapter Problem!

  Alt 13. Nov 2014, 15:08
Aus Sicht der DB-Komponenten ist das Verhalten genau richtig. Die können ja nicht wissen, dass Du die Daten schon anderweitig losgeworden bist.

Es geht also um die Frage, wie Du einem TDataSet mitteilen kannst, dass er die Information, dass da Datensätze aktualisiert wurden, vergessen und seinen Zustand als "aktuell" betrachten kann.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz