AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FDQuery CachedUpdates Datensatz speichern?
Thema durchsuchen
Ansicht
Themen-Optionen

FDQuery CachedUpdates Datensatz speichern?

Ein Thema von HCB · begonnen am 15. Apr 2023 · letzter Beitrag vom 15. Apr 2023
Antwort Antwort
Seite 1 von 2  1 2      
HCB

Registriert seit: 12. Feb 2020
172 Beiträge
 
Delphi 12 Athens
 
#1

FDQuery CachedUpdates Datensatz speichern?

  Alt 15. Apr 2023, 14:56
Datenbank: Access • Version: 2003 • Zugriff über: FireDac
Hallo, ich habe eine Access Datenbank mit 120 Spalten. Die Datensätze werden in einem dbGrid angezeigt. Soweit so gut.

1.) Ändere ich jetzt eine Spalte und will den Datensatz verlassen, kommt die Fehlermeldung '[FireDac][Phys][ODBC][Microsoft][ODBC-Treiber für Microsoft Access]Abfrage ist zu komplex. Der Datensatz bleibt im Edit-Modus und kann nicht gespeichert werden. Reduzier ich die Spalten um ca. 20 spalten so dass ich nur noch 100 habe, läufts. Gibts da eine Beschränkung???

2.) Stelle ich die Eigenschaft des FDQuery.CachedUpdates auf true, dann kommt keine Fehlermeldung und der Datensatz wird geändert und im dbGrid dementsprechend angezeigt. Soweit so gut.

3.) Bei einem Neustart des Programms werden jedoch wieder die alten Werte angezeigt, die zuvor geänderten Datensätze wurde offenbar nur temporär geändert und nicht in der Datenbank gespeichert. Speichern habe ich mit FDQuery.Post, FDQuery.CommitUpdates, oder mit FDQuery.UpdateRecord probiert. Es werden die Änderungen aber nicht in der Datenbak gespeichert.

Frage: Kann mir jemand helfen das Problem zu lösen? Hat jemand eine Idee woran das liegen könnte?

LG Harry
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
741 Beiträge
 
#2

AW: FDQuery CachedUpdates Datensatz speichern?

  Alt 15. Apr 2023, 15:16
iErrors := FDQuery1.ApplyUpdates;
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
172 Beiträge
 
Delphi 12 Athens
 
#3

AW: FDQuery CachedUpdates Datensatz speichern?

  Alt 15. Apr 2023, 15:37
Hallo Olli73,

vielen Dank. Leider wird nur temporär gespeichert. Hier mein code:

procedure TForm1.Button1Click(Sender: TObject);
var iErrors: integer;
begin
if DataSource1.State = dsEdit then
begin
FDConnection1.StartTransaction;
iErrors := FDQuery1.ApplyUpdates;
if iErrors = 0 then
begin
FDQuery1.CommitUpdates;
FDConnection1.Commit;
end;
end;
end;

Beim nächsten Programmstart werden wieder die vorherigen und nicht die aktualisierten Werte gezeigt.
Bei einer anderen Tabelle mit ca. 85 Spalten läufts ohne Probleme. Vielleicht gibt es doch eine Einschränkung mit access oder dem Treiber, Firedac etc.

Vielleicht hat jemand noch eine Idee?
LG Harry
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#4

AW: FDQuery CachedUpdates Datensatz speichern?

  Alt 15. Apr 2023, 16:24
Einfach mal die Suchmaschine Deiner Wahl mit Abfrage ist zu komplex füttern.

Der Fehler kommt in vielfältiger Form vor. Eine dieser Formen entspricht Deiner Beobachtung: Zuviel Spalten.

Lösungen dazu: Keine sinnvollen, sondern immer nur: Nimm doch weniger Spalten. Also eigentlich keine Lösung in Sicht, auch wenn sich der Fragezeitraum für dieses Problem schon über gefühlt zwei Jahrzehnte erstreckt.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

AW: FDQuery CachedUpdates Datensatz speichern?

  Alt 15. Apr 2023, 16:41
Kannst du mal die Einstellungen für die Query und Felder zeigen? Am besten wäre ein abgespecktes Beispiel.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
172 Beiträge
 
Delphi 12 Athens
 
#6

AW: FDQuery CachedUpdates Datensatz speichern?

  Alt 15. Apr 2023, 17:08
So wie es jetzt aussieht, muss ich wohl einige Felder löschen. Da das aber eine aktive Datenbank ist, muss ich sehen, ob wirklich alle Felder vom Hauptprogramm (nicht von mir) genutzt werden, so dass ich die überflüssigen Felder löschen kann.

Anbei mal die Test.mdb mit der Tabelle sPersKto wo ein paar Beispieldaten hinterlegt sind, zum Testen.

LG Harry
Angehängte Dateien
Dateityp: zip Test.zip (23,6 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

AW: FDQuery CachedUpdates Datensatz speichern?

  Alt 15. Apr 2023, 17:12
Interessant wären hier wirklich die Einstellungen der FDQuery.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#8

AW: FDQuery CachedUpdates Datensatz speichern?

  Alt 15. Apr 2023, 17:23
Achte darauf, dass in der FDQuery unter UpdateOptions.UpdateMode das upWhereKeyOnly eingetragen ist, und das für das Feld Nummer unter ProviderFlags das pfInKey angehakt ist. Das geht entweder über ein statisches Feld oder dynamisch im AfterOpen.

Es reicht übrigens, wenn Nummer das einzige statische Feld ist. Dazu muss in der Query unter FieldOptions der Wert für AutoCreateMode auf acCombineAlways stehen. Dann werden alle übrigen Felder dynamisch angelegt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
172 Beiträge
 
Delphi 12 Athens
 
#9

AW: FDQuery CachedUpdates Datensatz speichern?

  Alt 15. Apr 2023, 17:24
An den Eigenschaften der FDQuery wurde nichts geändert (also nur die Komponente platziert) und als SQL select * from sPersKto hinterlegt. Das ist alles.
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
172 Beiträge
 
Delphi 12 Athens
 
#10

AW: FDQuery CachedUpdates Datensatz speichern?

  Alt 15. Apr 2023, 17:34
upWhereKeyOnly ist eingetragen, AutoCreateMode steht auf acCombineAlways, aber ProviderFlags finde ich nicht.
Geht aber mit den ersten zwei Einstellungen auch nicht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:12 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