AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datensatzsperre mit Access
Thema durchsuchen
Ansicht
Themen-Optionen

Datensatzsperre mit Access

Ein Thema von SvB · begonnen am 2. Feb 2011 · letzter Beitrag vom 3. Feb 2011
Antwort Antwort
Seite 1 von 2  1 2      
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Datensatzsperre mit Access

  Alt 2. Feb 2011, 12:33
Datenbank: Access • Version: 2003 • Zugriff über: ADO
Hi, ich habe ein mittelschweres Problem und komme nicht dahinter. Ich muss an einer bestehenden Anwendung eine Änderung vornehmen. Die Anwendung benutzt eine Access-Datenbank, die im Netzwerk abgelegt ist. Für eine spezielle Funktion muss ich in einer Tabelle einen Datensatz sperren, bzw. muss prüfen können, ob der Datensatz schon von einem anderen Client gesperrt ist. Ich bekomme es einfach nicht hin.
Ich habe mit allen möglich Einstellungen der ADO Komponente gespielt, allerdings ohne ein Ergebnis.
Delphi-Quellcode:
.CursorLocation := clServer
.Cursortype := ctStatic
.CommandType := ctTableDirect
.LockType := ltPessimistic
Also, der Client 1 soll diesen bestimmten Datensatz sperren, diesen Datensatz aktualisieren und dann die Sperre wieder aufheben. Das dauert vielleicht 50ms, also ganz kurz.
Wenn der Client 2 das selbe macht, dann muss ich irgendwie feststellen können, ob der Datensatz gesperrt ist oder nicht. Falls er gesperrt ist, dann muss das Programm einen kurzen Moment warten und dann noch mal probieren, damit ich den aktuellen Wert auslesen kann.

Kann mir jemand helfen, wie ich das anstellen kann?

Edit: Ich habe schon hier im Forum gesucht und alles was ich gefunden habe, hat mir nicht geholfen. Im Web steht dann auch nur mit TableDirect und Pessimistic locking, aber anscheinend bin ich zu doof.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.

Geändert von SvB ( 2. Feb 2011 um 12:34 Uhr) Grund: Was vergessen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Datensatzsperre mit Access

  Alt 2. Feb 2011, 12:38
Imho ist Access absolut nicht für multiuser-Zugriff geeignet.
Markus Kinzler
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Datensatzsperre mit Access

  Alt 2. Feb 2011, 12:57
Ja, das ist mir auch klar, aber ich kann da im Moment leider nichts dran ändern, da mir das vorgegeben wurde. Zu 98% wird das Programm ja auch als Einzelplatz-Version benutzt und da gibt es ja auch keine Probleme. Nur für diese 2% bei dem mal zwei Benutzer gleichzeitig auf die Datenbank zugreifen, bzw. den einen Datensatz aktualisieren müssen, muss ich eine Lösung finden. Über die ganzen Infos, die ich im Web gefunden habe, muss es auch irgendwie möglich sein, nur bekomme ich es einfach nicht hin.

Über das grundsätzliche Access Problem brauchen wir hier nicht zu diskutieren, das ist mir bekannt und wenn es nach mit ginge, würde ich das auch ändern, aber wie das immer so geht, nach mir geht es halt nicht.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Datensatzsperre mit Access

  Alt 2. Feb 2011, 13:21
Hallo,

bekommst Du die Sperrung hin, wenn Du mit BeginTransaction anfängst, dann die Änderungen machst und dann ein Commit und EndTransaction?
  Mit Zitat antworten Zitat
hoda

Registriert seit: 26. Sep 2002
14 Beiträge
 
#5

AW: Datensatzsperre mit Access

  Alt 2. Feb 2011, 14:22
Vielleicht hilft es wenn du vor der Tabelle eine Protokoll-Tabelle vorschaltest. Zwar ist das nicht die optimale Lösung, aber vielleicht hilft es um die 2% Fälle abzudecken.

Geändert von hoda ( 2. Feb 2011 um 14:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Datensatzsperre mit Access

  Alt 2. Feb 2011, 14:48
Quick and Dirty:
Ein zusätzliches Feld in der Tabelle anlegen, das gesetzt wird, sobald der Datensatz bearbeitet wird und das vor jedem Bearbeiten geprüft wird. Alternativ in einer separaten Tabelle beim Bearbeiten eines Datensatzes den Namen der Tabelle und die ID des gerade Datensatzes speichern und die Tabelle vor jedem Bearbeiten abfragen, ob der aktuelle Datensatz dort aufgeführt ist.

Und für die Zukunft folgende Aussage:
Zitat:
Der Einsatz in Netzwerk wird nicht unterstützt.
Jeder kann ein Held werden und Leben retten!
Einfach beim NKR oder der DKMS als Stammzellenspender registrieren! Also: worauf wartest Du noch?

Geändert von HeikoAdams ( 2. Feb 2011 um 14:50 Uhr)
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Datensatzsperre mit Access

  Alt 2. Feb 2011, 14:49
Mit Transaktionen habe ich auch schon probiert, da komme ich aber auch zu keinem Ergebnis. Wenn ich testweise mit zwei Arbeitsstationen für den besagten Fall zur gleichen Zeit auf "Speichern" klicke, bekomme ich jedesmal die selbe (fotlaufende) Nummer vergeben. Ich bekomme keine Fehlermeldung, dass da jetzt was gesperrt ist oder so.
Mit einer "Protokoll-Tabelle" habe ich es auch schon probiert. Ich schreibe da einen Datensatz mit dem Computernamen beim Speichern, dann suche ich mir die nächste Nummer raus, dann prüfe ich noch mal den Computernamen in der "Protokoll-Tabelle" und wenn das der gleiche ist, dann nehme ich die Nummer, ansonsten hole ich noch mal die "Neue". Funktioniert aber auch nicht.

Ich bin der Meinung, dass es nicht viel sein kann, dass ich einfach in den entsprechenden Eigenschaften falsche Werte drin habe. Oder es ist ein grundsätzlicher Bug in den ADO-Komponenten und da wird es schwer etwas zu finden.

Als Dirty-Version habe ich mir schon überlegt, dass ich eine Datei Exclusiv in dem Ordner erstelle, in dem die Access-Datenbank liegt und und diese wieder lösche, wenn der Vorgang beendet ist. Wenn der zweite Client das selbe versuchen will, gibt es da halt eine Fehlermeldung, da er die Datei ja nicht auch noch anlegen kann. Die Fehlermeldung fange ich dann natürlich ab und probiere es dann z.B. nach 50ms noch mal, solange bis es klappt. Wie gesagt, dirty und es könnten mir eventuell dadurch noch andere Probleme entstehen, wie z.B. die Datei kann nicht gelöscht werden usw.

Laut meinen Informationen müsste es aber auch direkt in Access gehen. Ich hoffe, ich bekomme das noch raus oder es hat schon mal jemand mit dem selben Problem zu tun gehabt.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Datensatzsperre mit Access

  Alt 2. Feb 2011, 14:52
@HeikoAdams: Wo ist denn das Zitat her?
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: Datensatzsperre mit Access

  Alt 2. Feb 2011, 15:04
Vielleicht ist dies hier interessant.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Datensatzsperre mit Access

  Alt 2. Feb 2011, 15:14
@HeikoAdams: Wo ist denn das Zitat her?
Von mir
Wenn bei meinen Programmen irgendein Szenario Probleme macht, wird es solange nicht offiziell unterstützt, bis es eine praktikable und sichere Lösung für die Probleme gibt
Jeder kann ein Held werden und Leben retten!
Einfach beim NKR oder der DKMS als Stammzellenspender registrieren! Also: worauf wartest Du noch?
  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 08:26 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