Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADS_LOCAL Zugriff mehrer Nutzer (https://www.delphipraxis.net/198945-ads_local-zugriff-mehrer-nutzer.html)

mjank 13. Dez 2018 16:27

Datenbank: ADS_LOCAL • Version: 10.10 • Zugriff über: Delphi

ADS_LOCAL Zugriff mehrer Nutzer
 
Ich habe eine kleine Anwendung in Delphi geschrieben,
die Projektdaten organisieren soll.
Dies erfordert nun den gleichzeitigen Zugriff mehrerer Personen.
Meist wollen alle nur lesen. Es wird maximal einer schreiben.

Nachdem, was ich bislang hier gelesen habe, müsste der Zugriff für maximal 5 Nutzer möglich sein.
Wird die Anwendung von einem zweiten Nutzer gestartet, bekomme ich einen EADSDatabaseError.

In der Table ist Exclusive := False;

Ich hoffe, ihr habt einen Tip für mich.

joachimd 13. Dez 2018 16:55

AW: ADS_LOCAL Zugriff mehrer Nutzer
 
es gibt sicherlich noch mehr Information über den Fehler ...

mjank 13. Dez 2018 16:59

AW: ADS_LOCAL Zugriff mehrer Nutzer
 
Delphi-Quellcode:
procedure Tfrm_Hauptform.Timer1Timer(Sender: TObject);
var
  FDock    : boolean;
  Fa       : integer;
  FClients : integer;

begin

  Timer1.Enabled := false;

  try

    //
    // ALS-Datenbanken
    //

    AdsConnection_Daten.IsConnected := False;
    AdsConnection_Daten.ConnectPath
      := extractfilepath(application.exename) + 'Daten';
    AdsConnection_Daten.IsConnected := true;


    // Datenbank "DB_Projekte" prüfen und öffnen
    If FileExists(extractfilepath(application.exename)
        + 'Daten\DB_Projekte.adt')
      then begin

        DB_Projekte.Exclusive := false;
        DB_Projekte.Active    := false;
        DB_Projekte.TableName := 'DB_Projekte.ADT';
        DB_Projekte.Active    := true;
        DB_Projekte.edit;


  FClients := Panel1.DockClientCount - 1;
  if FClients = (-1) then FDock := true;


  for Fa := 0 to FClients do
   begin
     Panel1.DockClients[Fa].hide;
     if Fa = FClients
       then FDock := true
       else FDock := false;
   end;

  repeat
    if FDock = true
      then begin

        frm_Hauptform.Caption := 'Projekte';
        frm_Projektsuche.ManualDock(frm_Hauptform.panel1,nil,alclient);
        frm_Projektsuche.show;
      end;
  until FDock = true;


      end;

   except
     on EADSDatabaseError do
       begin
         if MessageDlg(
           'Das Programm ist bereits durch einen anderen Nutzer geöffnet.'
           + #13 +
           'Es kann immer nur ein Nutzer zeitgleich arbeiten.',
           mtWarning, [mbOk], 0) = mrOk then
           begin
             //Close;
           end;
       end;

   end;
end;
In einer anderen kleinen Anwendung hatte ich das Problem schon einmal.
Dort war ich jedoch der einzige Nutzer und habe es mit einer Fehlermeldung abgefangen,
falls ich aus Versehen die Anwendung zweimal gestartet habe.

Ist es grundsätzlich richtig, dass ich mit mehreren Nutzern zugreifen kann?
Derzeit sind es maximal drei.

mjank 13. Dez 2018 17:04

AW: ADS_LOCAL Zugriff mehrer Nutzer
 
Wenn ich EADSDatabaseError nicht abfange, kommt folgende Meldung:

Zitat:

DB_Projekte: Error 5035: The requested lock could not be granted.
The file or record may be locked by another user.

joachimd 13. Dez 2018 17:13

AW: ADS_LOCAL Zugriff mehrer Nutzer
 
Zitat:

Zitat von mjank (Beitrag 1420773)
Wenn ich EADSDatabaseError nicht abfange, kommt folgende Meldung:

Zitat:

DB_Projekte: Error 5035: The requested lock could not be granted.
The file or record may be locked by another user.

Das meinte ich mit etwas mehr Information ... Du versuchst, einen Datensatz zu sperren/editieren, welcher schon von einem anderen Benutzer gesperrt/editiert ist.

mjank 13. Dez 2018 17:15

AW: ADS_LOCAL Zugriff mehrer Nutzer
 
In der Mitte meines Codes habe ich die Tabelle mit DB_Projekte.edit;
schon in den Bearbeitungsmodus gesetzt.
Das ist an dieser Stelle (sofort nach Programmstart) noch nicht nötig!
:warn: Schlamperei!

Wenn ich das Edit auskommentiere, scheint es zu gehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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