AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Prüfe vor Post, ob der Datensatz gesperrt ist
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfe vor Post, ob der Datensatz gesperrt ist

Ein Thema von Ackerjan · begonnen am 25. Aug 2008 · letzter Beitrag vom 26. Aug 2008
Antwort Antwort
Seite 2 von 2     12   
Ackerjan

Registriert seit: 4. Jun 2007
Ort: Potsdam
17 Beiträge
 
Delphi 2009 Enterprise
 
#11

Re: Prüfe vor Post, ob der Datensatz gesperrt ist

  Alt 25. Aug 2008, 16:54
Zitat von HeikoAdams:
Vielleicht hilft Dir die CanModify-Eigenschaft von TDataSet weiter:
Zitat:
Gibt an, ob die Datenmenge Schreibzugriffe auf Daten zulässt.
Leider nicht. Habe ich mit als erstes ausprobiert. CanModify gibt mir leider auch true zurück, wenn der Datensatz gesperrt ist.
Zitat:
Wenn CanModify den Wert False hat, kann die Tabelle nur gelesen werden.
Canmodify bezieht sich wohl auf generelle Lese und Schreibrechte.
Jan
Niemals aufgeben, niemals kapitulieren! - galaxy quest
  Mit Zitat antworten Zitat
Ackerjan

Registriert seit: 4. Jun 2007
Ort: Potsdam
17 Beiträge
 
Delphi 2009 Enterprise
 
#12

Re: Prüfe vor Post, ob der Datensatz gesperrt ist

  Alt 25. Aug 2008, 17:10
Zitat von DeddyH:
Was ich auf die Schnelle ergooglen konnte, war das Programm onstat. Aber evtl. hilft Dir auch diese Seite schon mal ein wenig weiter.
onstat ist ein Programm was die sysmaster-datenbank von Informix ausliest. Hier speichert Informix auch welche Datensätze gelockt werden. Über die row_id der tabelle, welche im TTable-Objekt nicht verfügbar ist, kann man dann auslesen, welcher Datensatz es ist.

Select kunden where rowid = X führt dann zu dem gelockten datensatz.

Allerdings müßte ich dann in meiner Anwendung eine weitere Datenbankverbindung (sysmaster db) aufmachen, über eine andere systabelle meine tabellen_id bestimmen, dann über die entsprechende Locktabelle die interne rowid der gelockten Datensätze bestimmen und dann könnte ich über ein Select nachsehen ob mein Datensatz dabei ist.. Oder so ähnlich.
Jan
Niemals aufgeben, niemals kapitulieren! - galaxy quest
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Prüfe vor Post, ob der Datensatz gesperrt ist

  Alt 25. Aug 2008, 18:53
Was spricht denn dagegen?
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 mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#14

Re: Prüfe vor Post, ob der Datensatz gesperrt ist

  Alt 25. Aug 2008, 20:07
Moin, moin,

Das Grundproblem liegt eingentlich schon vorher. Ein zweiter User kann den Datensatz bearbeiten während der erste noch in Bearbeitung ist. Gehe davon aus, dass das DBMS den Datensatz vor einem Query.Refresh; auch nicht zuläßt, wenn die Bearbeitung durch den ersten Nutzer abgeschlossen ist. Welcher Isolationlevel wird verwendet?

Grüße // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Ackerjan

Registriert seit: 4. Jun 2007
Ort: Potsdam
17 Beiträge
 
Delphi 2009 Enterprise
 
#15

Re: Prüfe vor Post, ob der Datensatz gesperrt ist

  Alt 26. Aug 2008, 12:19
Hallo Martin
Zitat von mschaefer:
Welcher Isolationlevel wird verwendet?

Grüße // Martin
Na, ob ich das beantworten kann?

1. Leider arbeiten wir ohne Transactionen, womit das ein oder andere Sperrenproblem erst garnicht auftauchen würde.
2. Die Datenbank erlaubt Dirty Read auf gesperrte Datensätze.
Also ein Select ist immer möglich.

3. In der 4GL-Sprache nutzten wir deswegen Update-Cursor, welche restriktiver sind und kein dirtyread erlauben und einen Datensatz generell erst versuchen zu sperren. Wird dieser bearbeitet, erfolgt die Fehlermeldung ist bereits gesperrt! Und ein FETCH auf den Cursor wirft einen Fehler .

4. Die BDE bietet mir diese Möglichkeit leider nicht. (Glaube ich zumindest).
Nutze ich z.B. ein TTable-Objekt, kann ich ersteinmal die Daten eines gesperrten Satzes ändern. Mit dem folgenden verhalten:

a. Bei einem Post wird dann geprüft, ob sich in der Zwischenzeit die Daten durch einen anderen User geändert haben.
Fehlermeldung: Daten wurden geändert, speichern ist nicht möglich..
b. Oder wie der Fall hier. Gibt die Datenbank an sich den Fehler zurück: Datensatz gesperrt. Die BDE, scheint mir bekommt das garnicht mit!

Es bleibt mir also nichts anderes als mich selber darum zu kümmern. Das DBMS in Verbindung mit der BDE ist mir da wohl keine Hilfe.
Jan
Niemals aufgeben, niemals kapitulieren! - galaxy quest
  Mit Zitat antworten Zitat
Ackerjan

Registriert seit: 4. Jun 2007
Ort: Potsdam
17 Beiträge
 
Delphi 2009 Enterprise
 
#16

Re: Prüfe vor Post, ob der Datensatz gesperrt ist

  Alt 26. Aug 2008, 15:32
Zitat von DeddyH:
Was spricht denn dagegen?
1. muss ich zu einer weiteren Datenbank auf dem Server eine Verbindung herstellen.
2. muss ich zwei zusätzliche SQL-Anfragen machen.
Eine auf der Sysmaster
Eine auf der Anwenderdb
3. kann ich mir nicht sicher sein, das Informix in den nächsten Versionen dieselben systabellen hat.

Naja und ich habe gehofft, dass es einfacher geht.

Aber ich habe es ersteinmal so programmiert.

Vielen Dank
Jan
Niemals aufgeben, niemals kapitulieren! - galaxy quest
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 02:47 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