AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Interbase Update sperren realisierem

Interbase Update sperren realisierem

Ein Thema von Albi · begonnen am 22. Feb 2005 · letzter Beitrag vom 31. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2   
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#1

Interbase Update sperren realisierem

  Alt 22. Feb 2005, 09:45
Datenbank: Interbase • Zugriff über: Standardkompo
Hallo,

ich möchte für die Interbase eine Updatesperre basteln und weiß nicht genau wie das am besten realisieren kann.

Mein Ausgangspunkt ist bis jetzt, dass ich ein eine Eingabemaske habe. Sobald der User einen gesuchten Eintrag gefunden hat, sind die Edits enable = False. Wenn nun der User auf den Bearbeitung Btn klickt werden die Edits enable = true und er kann die Daten bearbeiten. Soweit ist das auch kein Problem.

Ich will nun aber, dass der DS sobald ein User diesen Bearbeiten will für alle anderen user gesperrt wird bzw. nur gelesen werden kann.

Nun habe ich hier im Forum von einer Sperrtabelle oder simulierten Updates gelesen und nun habe ich gefragt ob es da noch eine andere Möglichkeit gib.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Interbase Update sperren realisierem

  Alt 22. Feb 2005, 10:09
Hallo,
der Interbase/Firebird arbeitet mit einer Multigenerationenarchitekur Bei Google suchenMGA Interbase.
Da werden keine Locks unterstützt.

Wenn in der Zwischenzeit ein anderer User den Datensatz geändert hat könntest Du wie folgt darauf reagieren:
Wenn Du eine Tabelle mit Vor- und Nachnamen hast könntest Du das Update folgendermaßen
realisieren

UPDATE tabelle SET vname='Delphi', nname='PraxisWHERE (vname=alter_vorname) and (nname=alter_nachname) alter_vorname und alter_nachname stehen für die Werte, die beim Lesen des Datensatzes aus der Datenbank gekommen sind. Wenn jetzt ein anderer User den Datensatz geändert hat, geht das Update schief. Dann könntest vom User bestätigen lassen ob der inzwischen geänderte Datensatz überschrieben werden soll.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#3

Re: Interbase Update sperren realisierem

  Alt 22. Feb 2005, 10:38
Das ist mir schon klar gewesen, dass es die Sperrmechanismen bei Interbase gibt, nutze ich auch.

Aber ich will halt, dass der DS bereits beim klicken auf Edit eine Sperre erhält und nicht erst wenn die Transaction gestartet wird.

Beim Klick auf Edit werden nur die Edit enable = true gesetzt, somit weiß die DB aber noch nicht, dass der DS gerade bearbeitet wird. Aber das genau will ich der DB auf irgendeine Art&Weise mitteilen.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Interbase Update sperren realisierem

  Alt 22. Feb 2005, 10:41
Eine Mögichkeit wäre sicher Firebirds event system (User X ändert etwas -> Clients von User Y & Z werden benachritigt)
Aber alles was man da auch basteln kann ist in einer simplen C/S Architektur nur Rumgebastel.
Wirklich konsistent kannst du sowas IMHO nur mit einer MiddleTier lösen.
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#5

Re: Interbase Update sperren realisierem

  Alt 22. Feb 2005, 11:19
Das wäre für diese Anwendung doch ein wenig hochgegriffen. Da lasse ich es lieber so wie es ist und es gib ne Meldung für darüber, dass der DS bereits von einem anderem User geändert wurde.
  Mit Zitat antworten Zitat
proitsystems

Registriert seit: 4. Nov 2003
Ort: Augsburg
29 Beiträge
 
#6

Re: Interbase Update sperren realisierem

  Alt 22. Feb 2005, 11:33
der aktuelle Firebird unterstützt doch die Anweisung "SELECT .... FOR UPDATE". Damit werden die Daten gelockt. Bevor das Dataset in den Editmode geht könnte man auf der gleichen Transaktion dieses SELECT Statement ausführen.

Eine andere Möglichkeit wäre (bevor das Dataset in den Editmode geht) ein Pseude Update zu fahren (UPDATE Tabelle SET Feld = Feld WHERE ID = x). Natürlich in der gleichen Transaktion.

Beim Commit oder Rollback ist das Lock dann wieder aufgehoben.


Gruss,

Marc
----
PRO IT SYSTEMS
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#7

Re: Interbase Update sperren realisierem

  Alt 22. Feb 2005, 12:25
Zitat von proitsystems:
der aktuelle Firebird unterstützt doch die Anweisung "SELECT .... FOR UPDATE". Damit werden die Daten gelockt
Vielen Dank, diese Variante werde ich mal versuchen.

Nur so zur Sicherheit. Die Anweisung sollte dann im ganzen so in etwa aussehen

select ID From DB WHERE ID = :iID For Update
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#8

Re: Interbase Update sperren realisierem

  Alt 30. Dez 2008, 22:13
Hier mag ich nochmal nachhaken:

Das ein User einen gerade in Bearbeitung befindlichen Datensatz nicht bearbeiten kann
ist bei Delphi mit FB eine reine Katastrophe im Gegenatz zu Oracle-Forms-Anwendungen
wo dies mit einer Selbstverständlichkeit völlig automatisch realisiert ist.



Möglichkeit für einen einzelnen Datensazt:

- Dummy edit und Post -> Error, dann gelocked


Möglichkeiten in einem Grid als momentan Anzeige darzustellen welche Datensätze gerade gelockt sind:

- Für jeden Datensatz duchgehen: Dummy edit und Post -> Error, dann gelocked


Erstaunlich ist allerdings, das sowas noch nicht in eine erweiterte Query-Komponente eingebauet worden ist.
Denn letzlich geht es doch nur darum beim umstellen auf 'edit' gleich einen 'post' zusenden. Kommt dann keine
Fehlermeldung wird wieder auf 'edit' geschaltet, andernfalls bleibt es im 'browse' Mode.


Grüße // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Interbase Update sperren realisierem

  Alt 30. Dez 2008, 23:23
Zitat:
as ein User einen gerade in Bearbeitung befindlichen Datensatz nicht bearbeiten kann
ist bei Delphi mit FB eine reine Katastrophe
Wie meinst du das? Änderungen in eine Tranaktion sind für andere Transaktionen doch nicht sichtbar. Und welchen Sinn würde eine parallele Änderung machen ( würde das ganze Transaktionsprinzip adabsurdum führen).
Ich kann mir nicht vorstellen, das dies bei Oracle anders ist.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#10

Re: Interbase Update sperren realisierem

  Alt 31. Dez 2008, 09:55
Moin, moin,

Wenn man da ein Grid hat gibt es banal Zeilen die sind nicht zu ändern und andere eben doch.

Es da ganz einfach so, dass Datensätze die in Bearbeitung nur zum lesen für andere im Zugriff sind. Man kann nicht in den Editmodus gehen. Das scheint mir auch sinnvoll, denn wenn der zweite Nutze erst am Ende seiner Eingaben erfährt, dass er sie nicht speichern kann, dann hat er da banal Zeit reingesteckt und eventuell auch Daten verloren.

Grüße // Martin
Martin Schaefer
Phaeno
  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 05:40 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