AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Legacy-Anwendung TTable->TFDTable LockTable
Thema durchsuchen
Ansicht
Themen-Optionen

Legacy-Anwendung TTable->TFDTable LockTable

Ein Thema von Poelser · begonnen am 18. Mär 2022 · letzter Beitrag vom 18. Mär 2022
Antwort Antwort
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#1

Legacy-Anwendung TTable->TFDTable LockTable

  Alt 18. Mär 2022, 09:25
Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC
Moin zusammen,

wo gerade ein Thread über den Umgang mit Legacy-Anwendungen am Laufen ist, habe ich hier ein Problem mit dem Sprung von D7 auf D10.4.2.

In dem alten Code sind solche Sachen drin, wie TabelleXYZ.LockTable(ltWriteLock) bzw. UnLockTable(). Dies Locks sind in der alten Unit DBTables drin.
Aber die gibt es ja nicht mehr. FireDAC hat da scheinbar nix Passendes, und Google war auch nicht wirklich hilfreich 20 Jahre zu überspringen .
Hat irgendwer einen Link o.ä. um mir da mal auf die Sprünge zu helfen?
LG aus dem hohen Norden, Edmund
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Legacy-Anwendung TTable->TFDTable LockTable

  Alt 18. Mär 2022, 10:18
In dem alten Code sind solche Sachen drin, wie TabelleXYZ.LockTable(ltWriteLock) bzw. UnLockTable(). Dies Locks sind in der alten Unit DBTables drin.
Aber die gibt es ja nicht mehr. FireDAC hat da scheinbar nix Passendes,
Nein, Locking geht einfach nicht mehr. FireDAC geht da einen anderen Ansatz, so nach dem Motto: Mach erst mal und reagiere, wenn es nicht klappt.

Wenn ein geänderter Datensatz gespeichert wird, kann man über UpdateMode entscheiden, welche Felder in der WHERE Klausel angegeben werden. Bei upWhereAll werden alle abgerufenen Felder eingesetzt. Damit kann man sicherstellen, dass zwischenzeitlich keines der Felder verändert wurde. Bei upWhereChanged sind das nur die Felder, die man selbst verändert hat. Das lässt sich noch über die ProviderFlags in jedem einzelnen Feld feintunen.

Schlagt nun ein solches Update fehl, weil z.B. ein Feld von anderer Stelle verändert wurde, kann man im OnReconcileError der Query entsprechend darauf reagieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
599 Beiträge
 
Delphi XE6 Enterprise
 
#3

AW: Legacy-Anwendung TTable->TFDTable LockTable

  Alt 18. Mär 2022, 10:32
Die Frage ist: wofür wurde das verwendet? Wurden tatsächlich in einer Firebird-Datenbank ganze Tabellen gelockt?
  Mit Zitat antworten Zitat
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Legacy-Anwendung TTable->TFDTable LockTable

  Alt 18. Mär 2022, 10:46
Die Frage ist: wofür wurde das verwendet? Wurden tatsächlich in einer Firebird-Datenbank ganze Tabellen gelockt?
Ja. Das hatte wohl den Sinn, dass da z.B. irgendwelche Prozentsätze nicht geändert werden durften, wenn die in einer Kalkulation gelesen wurden.

Wie Uwe schon geschrieben hatte, ist diese Vorgehensweise wohl ohnehin nicht mehr möglich. Ich bin momentan da wohl eher besser beraten, dass ganze transactionbasiert umzusetzen. Glücklicherweise bin ich in der Situation, dass nicht 1:1 umsetzen zu müssen. Und der Aufwand dafür hält sich in Grenzen, da diese alte Technik in dem Fossil nicht sooo oft benutzt wurde .
LG aus dem hohen Norden, Edmund
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#5

AW: Legacy-Anwendung TTable->TFDTable LockTable

  Alt 18. Mär 2022, 11:26
Da ich die BDE nicht mehr installiert habe, kann ich nur vermuten, dass das nur innerhalb von Anwendungen funktioniert, die die BDE verwenden. Sollte ich mich richtig erinnern, gab es eine Datei, auf die alle Anwendungen Zugriff haben mussten. Das standen dann die Sperren usw. drin.
Aber 100% sicher bin ich mir da nicht.

Wir haben das in Firebird mit eine Sharetabelle gelöst. Da stehen der Tabellenname, die ID des Datensatzen oder ID = 0 für die ganze Tabelle drin. Zusätlich so Name, Grund und eine ConnectionID, so dass erkannt werden kann, ob die Sperre noch gültig ist.
Über den Tabellennamen + ID gibt es einen eindeutigen Index, wodurch eine Sperre nur einmal möglch ist.

Dadurch funktionier das ganze nur, wenn man die Sharetabelle auch auswertet und beschreibt.
  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 11:42 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