Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Benachrichtigung über Datenänderung (https://www.delphipraxis.net/7116-benachrichtigung-ueber-datenaenderung.html)

D.BraunSoft 2. Aug 2003 13:12


Benachrichtigung über Datenänderung
 
Wer kann mir helfen ?

Ich möchte alle User einer Datenbank über Änderung Informiern und
den jeweiligen Datensatz der in Bearbeitung ist für ander sperren.

Ich arbeite mit ACCESS DB.

Hat jemand eine Lösung ???????



Dirk Braun

Duffy 2. Aug 2003 13:39

Re: Benachrichtigung über Datenänderung
 
Hallo D.BraunSoft,
welche Komponenten setzt Du für die Access Datenbank ein?. Als Tip könnte ich Dir die KADao von Kiril Antonov aus Sofia, Bulgaria empfehlen. Damit kannst Du die Online Benutzer der Datenbank erkennen. Oder Du hast eine statische Benutzerliste in einer Tabelle.
Der Rest ist ist dann nur Makulatur. Einfach in die Table Ereignisse BeforePost, AfterPost einklinken und machen was Du willst.
Ich hoffe, daß es das ist was Du vorhast?
bye

D.BraunSoft 2. Aug 2003 13:48

Re: Benachrichtigung über Datenänderung
 
Ich benutze die BDE.

Danke für die Info ich schaue mir das mal an.

Duffy 2. Aug 2003 14:02

Re: Benachrichtigung über Datenänderung
 
Hallo D.BraunSoft,
noch ein Nachtrag. Falls Du die KADao Komponenten benutzen willst, brauchst Du noch eine Unit "msldbusr.dll". Diese bekommst Du mit nachfolgenden Link.
ACC: Microsoft Jet Utilities Available in Download Center
bye

D.BraunSoft 3. Aug 2003 06:03

Re: Benachrichtigung über Datenänderung
 
Hab mal einiges Versucht

Ich bekomme damit keine Info welcher Datensatz in welcher Tabelle
gerade in Arbeit ist.
Somit kann ein ein anderer Benutzer den gleichen Datensatz zur gleichen Zeit bearbeiten.

Wenn ein Datensatz mit ApplyUpdates abgeschlossen ist, habe ich keine Probleme.

HELP HELP HELP

Duffy 3. Aug 2003 09:56

Re: Benachrichtigung über Datenänderung
 
Hallo D.BraunSoft,
hast Du das mal mit der Satzsperre probiert. Soviel wie ich weiß bekommst Du einen Fehler in dem Moment, in den Du den Datensatz in den Edit Mode versetzt. Sicher bin ich mir da aber nicht.
bye

Delphi-Lover 17. Jan 2006 14:01

How to use the MSLDBUSR.DLL to analyse the Access LDB file.
 
Hello,

I'll post this for users searching for a way to interface with MSLDBUSR.DLL with Delphi.
The code is copied from the opensource software "Opus Direct Access" which is a
Plug-in Access/Jet database driver for Borland Delphi and C++Builder (BDE replacement)
In this driver there is a piece of code to analyse the Access LDB file.

Opus Direct Access


Delphi-Quellcode:
unit OpDAOUsers;


interface

const
  OptAllUsers = $1;
  OptLoggedUsers = $2;
  OptCorruptUsers = $4;
  OptUserCount = $8;
  OptUserAuthor = $b0b;

function GetUsers( const _LDBFileName: string; _opt: integer;
    out _users: array of string ): integer;

function GetError( _result: integer ): string;


implementation
uses
  ActiveX, Windows, SysUtils, Variants; //Variants for later delphi versions

const
  DLLName = 'MSLDBUSR.DLL';

function LDBUser_GetUsers( lpszUserBufferArray: PSafeArray; const lpszFilename: TBStr;
    nOptions: longint ): longint; stdcall;
  external DLLName;

function LDBUser_GetError( nErrorNo: longint ): TBStr; stdcall;
  external DLLName;


function GetUsers( const _LDBFileName: string; _opt: integer;
    out _users: array of string ): integer;
  var
    pfn: TBStr;
    usr: variant;
    i: integer;
    p: ^pChar;
  begin
    pfn:= SysAllocStringByteLen( nil, Length(_LDBFileName) + 1 );
    try
      StrCopy( pChar(pfn), pChar(_LDBFileName) );
      usr:= VarArrayCreate( [Low(_users), High(_users)], varOleStr );
      result:= LDBUser_GetUsers( @TVarData(usr).vArray, pfn, _opt );
      if result > 0 then begin
        p:= VarArrayLock( usr );
        try
          for i:= 0 to result - 1 do begin
            _users[i]:= StrPas( p^ );
            Inc( p );
          end;
        finally
          VarArrayUnlock( usr );
        end;
      end {if ok};
    finally
      SysFreeString( pfn );
    end;
  end {GetUsers};


function GetError( _result: integer ): string;
  var
    perr: TBStr;
  begin
    perr:= LDBUser_GetError( _result );
    try
      result:= StrPas( pChar(perr) );
    finally
      SysFreeString( perr );
    end;
  end {GetError};

end.

Here is how to call the LDBUser_GetUsers API function:

Delphi-Quellcode:
implementation

uses OpDAOUsers;

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
Var CUsers : Integer;
    psFilename : String;
    lstUsers: array of string;
begin
  SetLength(lstUsers, 20);
  //set the max on 20. increase if needed, otherwise error !!!

  psFilename:='C:\accessdatabase.mdb';
  CUsers:=GetUsers(psFilename,1,lstUsers);
  Showmessage(lstUsers[0]);
  //loop here to see all the users....
end;
Greetings,

Delphi Lover.


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