Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Schreibschutz für Access-Tabellen (https://www.delphipraxis.net/33077-schreibschutz-fuer-access-tabellen.html)

Detlef 1. Nov 2004 13:37


Schreibschutz für Access-Tabellen
 
Hallo Delphianer,

wie kann ich eine Tabelle (und nur die) in einer MDB zum schreiben
sperren? Ich benutze zum Zugriff ADO.
Werhat einen Tip?


Detlef

shmia 2. Nov 2004 09:50

Re: Schreibschutz für Access-Tabellen
 
Zitat:

Zitat von Detlef
wie kann ich eine Tabelle (und nur die) in einer MDB zum schreiben
sperren? Ich benutze zum Zugriff ADO.

Du kannst die Datenbank exclusiv öffnen oder du kannst eine *.MDW (Workgroup-Datei) verwenden
um die Zugriffsrechte für ein bestimmtes Objekt(Tabelle, View, Bericht, ...) zu beschränken.

Du kannst nicht wirklich eine Tabelle sperren. Dies wiederspräche dem Sinn einer Datenbank.
(Stellt dir vor, ein Benutzer sperrt eine Tabelle, geht in die Pause und erleidet einen Herzinfarkt.)

Damit deine Schreibaktionen von anderen Vorgängen isoliert werden, musst du Transaktionen benutzen.
Delphi-Quellcode:
ADOConnection1.BeginTrans;
try
   // hier deine Schreibaktionen
   ...
   ADOConnection1.CommitTrans;
except
   ADOConnection1.RollbackTrans;
   Raise;
end;

Detlef 9. Nov 2004 19:04

Re: Schreibschutz für Access-Tabellen
 
Danke für die Hinweise!

clues1 11. Nov 2004 15:57

Re: Schreibschutz für Access-Tabellen
 
Öffne deine Datenbank im Exclusiven Modus und legen ein Datenbankkennwort drüber.
";Jet OLEDB:Database Password="


Diese Funktion habe ich aus meine EDB Komponenten kopiert.
Code:
function TEDBConnect.SetAccessDB_Password(Filename: string; NewDBPassword: string; OldDBPassword: string = ''): boolean;
var objCatalog: OleVariant;
      ConnStr: String;
    OleConnect: OleVariant;
    Neu, Alt: String;
begin
  result := false;
  LastErrorToZero;
  try
    Neu := 'NULL';
    Alt := 'NULL';
    ConnStr := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+Filename;
    ConnStr := ConnStr + ';Persist Security Info=True';
    if OldDBPassword <> '' then begin
       ConnStr := ConnStr + ';Jet OLEDB:Database Password='+OldDBPassword;
       Alt := OldDBPassword;
    end;
    if NewDBPassword <> '' then begin
       Neu := NewDBPassword;
    end;
    OleConnect := CreateOleObject(ADOConn);
    OleConnect.CursorLocation := 3; // User client
    OleConnect.ConnectionString := trim(ConnStr);
    OleConnect.Mode := adModeShareExclusive;
    OleConnect.Open;
    OleConnect.Execute('ALTER DATABASE PASSWORD '+Neu+' '+Alt);
    OleConnect.Close;
    result := true;
  except
     on E: EOleException do
        ErrorToLastError(E);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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-2025 by Thomas Breitkreuz