AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi FireDAC und ADS: Daten direkt aktualisieren
Thema durchsuchen
Ansicht
Themen-Optionen

FireDAC und ADS: Daten direkt aktualisieren

Ein Thema von ioster · begonnen am 8. Aug 2019 · letzter Beitrag vom 8. Aug 2019
Antwort Antwort
ioster

Registriert seit: 15. Aug 2008
84 Beiträge
 
Delphi 10.3 Rio
 
#1

FireDAC und ADS: Daten direkt aktualisieren

  Alt 8. Aug 2019, 16:12
Datenbank: ADS • Version: 12 • Zugriff über: FireDAC
Moin,

ich möchte gerne eine Anwendung mit Delphi 10.3, den FireDAC-Komponenten und einer Datenbank entwickeln. Der Einfachheit halber nutze ich aktuell Advantage Database Server im Localmode, habe aber auch schon eine Anbindung an MS SQL Server berücksichtigt.

Nun habe ich aber ein eklatantes Problem, das ich bei Durchsicht aller Einstellungsparameter der FDConnection nicht in den Griff bekomme: die Daten werden irgendwie gecached. Dabei kommen so kuriose Sachen raus. Wenn ich auf der Datenbank einen Datensatz lösche und meine Anwendung noch offen habe, kann ich die Daten bearbeiten und abspeichern. Er steht dann mit identischem Autoinkrement anschließend wieder in der Datenbank.

Das Verhalten macht sich auch beim Einfügen von Daten über die Anwendung bemerkbar. Die Daten stehen erst nach Neustart der Anwendung zur Verfügung. Das kann es doch nicht sein.

Ich habe an den Einstellungen der Connection lediglich die Option CountUpdatedRecords deaktiviert, weil vorher das Einfügen von neuen Daten weitere Probleme bereitet hat. Das System war der Meinung, ich hätte den Datensatz gelockt und fügte meine Daten mehrfach in die Tabellen ein.

Es gibt auch keine Literatur oder Hilfeseiten, die sich mit solchen realen Problemen beschäftigen. Ein Buch habe ich mir deswegen schon zugelegt, doch die Geschichte mit dem CountUpdatedRecords war daran nicht zu finden. Gut, die Option war irgendwo aufgeführt, aber die Auswirkungen eben nicht. Ich habe nur nicht die Zeit, alle Einstellungen mit Try-and-Error durchzutesten. Dazu sind es zu viele Optionen, die in Abhängigkeit voneinander auch unterschiedlich reagieren.

Deswegen wäre ich dankbar für Infos, die mir bei der Lösung des Problems behilflich sein könnten.

Viele Grüße
Ingo
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: FireDAC und ADS: Daten direkt aktualisieren

  Alt 8. Aug 2019, 16:54
Moin,

ich möchte gerne eine Anwendung mit Delphi 10.3, den FireDAC-Komponenten und einer Datenbank entwickeln. Der Einfachheit halber nutze ich aktuell Advantage Database Server im Localmode, habe aber auch schon eine Anbindung an MS SQL Server berücksichtigt.

Nun habe ich aber ein eklatantes Problem, das ich bei Durchsicht aller Einstellungsparameter der FDConnection nicht in den Griff bekomme: die Daten werden irgendwie gecached. Dabei kommen so kuriose Sachen raus. Wenn ich auf der Datenbank einen Datensatz lösche und meine Anwendung noch offen habe, kann ich die Daten bearbeiten und abspeichern. Er steht dann mit identischem Autoinkrement anschließend wieder in der Datenbank.

Das Verhalten macht sich auch beim Einfügen von Daten über die Anwendung bemerkbar. Die Daten stehen erst nach Neustart der Anwendung zur Verfügung. Das kann es doch nicht sein.

Ich habe an den Einstellungen der Connection lediglich die Option CountUpdatedRecords deaktiviert, weil vorher das Einfügen von neuen Daten weitere Probleme bereitet hat. Das System war der Meinung, ich hätte den Datensatz gelockt und fügte meine Daten mehrfach in die Tabellen ein.

Es gibt auch keine Literatur oder Hilfeseiten, die sich mit solchen realen Problemen beschäftigen. Ein Buch habe ich mir deswegen schon zugelegt, doch die Geschichte mit dem CountUpdatedRecords war daran nicht zu finden. Gut, die Option war irgendwo aufgeführt, aber die Auswirkungen eben nicht. Ich habe nur nicht die Zeit, alle Einstellungen mit Try-and-Error durchzutesten. Dazu sind es zu viele Optionen, die in Abhängigkeit voneinander auch unterschiedlich reagieren.

Deswegen wäre ich dankbar für Infos, die mir bei der Lösung des Problems behilflich sein könnten.

Viele Grüße
Ingo
Verstehst Du, wie Transaktionen funktionieren? Welche FireDAC Componenten verwendest Du hier?
Peter Below
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: FireDAC und ADS: Daten direkt aktualisieren

  Alt 8. Aug 2019, 17:01
Der Advantage Local Server kann keine Transaktionen. Die machen nichts.

Und: Kannst du nicht einfach mal deine TFDConnection im Formular/Datenmodul kopieren und hier als Code einfügen? Dann sieht jeder was konkret eingestellt und vielleicht auffällig ist.

Auch: Welche Advantage-Version? Ah, 12. Den habe ich allerdings nie ausprobiert. Weiter als 10 oder 11 bin ich nie gekommen.


PS: Vielleicht hast du sogar ein Minimalbeispiel? Hört sich für mich ein bisschen so an als sei es z.B. ein TDBGrid und der Cursor steht noch auf dem modifizierten Datensatz und er ist noch nicht abgeschickt
  Mit Zitat antworten Zitat
ioster

Registriert seit: 15. Aug 2008
84 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: FireDAC und ADS: Daten direkt aktualisieren

  Alt 8. Aug 2019, 19:34
Danke für die Rückmeldungen. Ich möchte die Daten ganz normal über Tables und Queries in einer Desktopanwendung implementieren. Dafür benötige ich keine Transaktionen. Das Schreiben der Daten wird ganz schlicht mit Append bzw. Edit eingeleitet und mit Post abgeschlossen. Ich erwarte dann, dass diese Daten auch umgehend in der Datenbank stehen, was auch der Fall ist. Nur das Programm bekommt das nicht mit.

Ich habe im Datenmodul folgende Connection

object DBConn: TFDConnection
Params.Strings = (
'DriverID=ADS'
'ServerTypes=Local'
'Database=C:\DB\')
FetchOptions.AssignedValues = [evMode, evItems, evCache]
FetchOptions.Mode = fmAll
FetchOptions.Cache = []
ResourceOptions.AssignedValues = [rvAutoConnect]
ResourceOptions.AutoConnect = False
UpdateOptions.AssignedValues = [uvRefreshMode, uvCountUpdatedRecords]
UpdateOptions.RefreshMode = rmAll
UpdateOptions.CountUpdatedRecords = False
ConnectedStoredUsage = []
LoginPrompt = False
Left = 40
Top = 24
end

Über diese Connection komme ich an die Daten. SQL-Abfragen funktionieren auch.

Die Logik hat in der Vergangenheit mit den ADS-Komponenten als auch mit MyDAC und SDAC-Komponenten in älteren Delphi-Versionen funktioniert. FireDAC ist für mich neu und ich hatte mich im Vorfeld informiert, wie sich FireDAC und UniDAC unterscheiden. Da DevExpress die FireDAC-Technologie unterstützt, ist FireDAC für mich nun die Wahl was den Datenbankzugriff betrifft.

Geändert von ioster ( 8. Aug 2019 um 19:39 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:27 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