Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO Tabelle per Code Sperren und freigeben (https://www.delphipraxis.net/121372-ado-tabelle-per-code-sperren-und-freigeben.html)

sventeq 26. Sep 2008 10:44

Datenbank: Access • Version: 2003 • Zugriff über: ADO

ADO Tabelle per Code Sperren und freigeben
 
Hallo zusammen,
ich habe ein Programm an dem mehrere Benutzer gleichzeitig arbeiten, daher muss ich eine Tabelle sperren und nach ablauf eines Algorithmus wieder freigeben. Ich hab hier schon gelesen, dass das per Lock funktionieren soll. Hat da jemand wohl einen Code? Hab ich hier leider nicht gefunden :oops:

Delphi-Quellcode:
 
  programmdb.ADOEintragsID.Open;
 
  programmdb.ADOEintragsID.First;
  eintragsID:=programmdb.ADOEintragsIDID.Value;

  programmdb.ADOEintragsID.Delete;
  try
    programmdb.ADOEintragsID.insert;
    programmdb.ADOEintragsIDID.Value:=eintragsID+1;
    programmdb.ADOEintragsID.Post;
  except
    MessageDlg('Fehler', mtError, [mbOK], 0);
  end;

  programmdb.ADOEintragsID.Close;
Während dieser Procedure muss ich die Tabelle ADOEintragsID sperren und wieder freigeben.
Wäre für jede Hilfe sehr dankbar

sventeq 26. Sep 2008 11:03

Re: ADO Tabelle per Code Sperren und freigeben
 
Kann mir da keiner helfen? :(

sventeq 26. Sep 2008 11:19

Re: ADO Tabelle per Code Sperren und freigeben
 
Wirklich niemand, der mir da wenigstens einen Tipp geben kann??

nahpets 26. Sep 2008 11:21

Re: ADO Tabelle per Code Sperren und freigeben
 
Hallo,
Zitat:

Zitat von sventeq
Kann mir da keiner helfen? :(

nur Geduld, wir sind doch keine D-Züge :wink:

Schau in der Hilfe mal nach TADOLockType, ltPessimistic sollte für Dich das passende sein.

Stephan

sventeq 26. Sep 2008 11:32

Re: ADO Tabelle per Code Sperren und freigeben
 
Zitat:

Zitat von nahpets
Hallo,
Zitat:

Zitat von sventeq
Kann mir da keiner helfen? :(

nur Geduld, wir sind doch keine D-Züge :wink:

Schau in der Hilfe mal nach TADOLockType, ltPessimistic sollte für Dich das passende sein.

Stephan

Sorry, bin da echt dran verzweifelt. Danke für deine Hilfe.

Wie schreibt man das dann im Code?
Delphi-Quellcode:
  programmdb.ADOEintragsID.LockType:=ltPessimistic;
So vielleicht?
Und wie gibt man die Tabelle wieder frei oder passiert das nach der Bearbeitung des Datensatzes automatisch?

nahpets 26. Sep 2008 11:44

Re: ADO Tabelle per Code Sperren und freigeben
 
Hallo,

der Code sollte richtig sein und die Tabelle solange gesperrt, bis die aktuelle Transaktion abgeschlossen ist.
Bitte ausprobieren, hab's selbst noch nicht benutzt und müsste jetzt auch raten.

so in der Art?
Delphi-Quellcode:
programmdb.ADOEintragsID.LockType := ltPessimistic;
programmdb.ADOEintragsID.Connection.BeginTrans;
...
programmdb.ADOEintragsID.Connection.CommitTrans;
Stephan

sventeq 26. Sep 2008 11:57

Re: ADO Tabelle per Code Sperren und freigeben
 
Zitat:

Zitat von nahpets
Hallo,

der Code sollte richtig sein und die Tabelle solange gesperrt, bis die aktuelle Transaktion abgeschlossen ist.
Bitte ausprobieren, hab's selbst noch nicht benutzt und müsste jetzt auch raten.

so in der Art?
Delphi-Quellcode:
programmdb.ADOEintragsID.LockType := ltPessimistic;
programmdb.ADOEintragsID.Connection.BeginTrans;
...
programmdb.ADOEintragsID.Connection.CommitTrans;
Stephan

Da bekomme ich eine Fehlermeldung: Undefinierter Bezeichner: ltPessimistic

DeddyH 26. Sep 2008 11:58

Re: ADO Tabelle per Code Sperren und freigeben
 
Die Unit ADOdb ist eingebunden?

sventeq 26. Sep 2008 12:05

Re: ADO Tabelle per Code Sperren und freigeben
 
Zitat:

Zitat von DeddyH
Die Unit ADOdb ist eingebunden?

Jetzt ja.... :oops:

sventeq 26. Sep 2008 12:21

Re: ADO Tabelle per Code Sperren und freigeben
 
Vielen Dank für die Hilfe.
Eine Frage hab ich noch. Wenn der Datensatz dann gesperrt ist und ein anderer Benutzer dann zugreifen will, bekommt der dann eine Fehlermeldung mit "Der Datensatz ist momentan gesperrt" oder sowas, oder muss er einfach einen Moment länger warten bis der Datensatz wieder freigegeben ist.
Ich kann das im Moment nicht testen, da sich das Netzwerk in der Uni befindet und ich es nicht immer zur Verfügung habe.

sventeq


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz