![]() |
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 ??????? ![]() |
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 ![]() 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 |
Re: Benachrichtigung über Datenänderung
Ich benutze die BDE.
Danke für die Info ich schaue mir das mal an. |
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. ![]() bye |
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 |
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 |
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. ![]()
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:
Greetings,
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; Delphi Lover. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 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