Информация о подключенных к базе на сервере юзерах...
Автор Administrator
24.08.2001 г.
Этот разговор еще не совсем закончен... Но, как кажется, он не должен сгинуть в глубинах форума. И если бы его все-таки закончить...
Tich 10.07.2001
Too many active users. (Error 3239) Кто знает где кроме ldb файла хранится информация о подключенных к базе на сервере юзерах?
Timour 10.07.2001
а почему она должна еще где-то храниться ? По-моему достаточно ldb (правда она там хранится весьма по хитрому)
Tich 11.07.2001
Re: а почему она должна еще где-то храниться ? Просто я могу взять и удалить(сократить) информацию в этом файле, но после этого активных пользователей не станет меньше. По крайней мере сообщение об ошибке остается - значит информация хранится еще где-то, может на сервере, а может в системных таблицах базы?
silich 11.07.2001
не... всё проще и сложнее :)) например в 97 базе инфа помимо ЛДБ-файла хранится в самом МДБ-шнике в диапазоне с 600 по 800, кажись итого 512 байт :)) формат описан в КноледжБуук на мастдае - кому интересно 0- даю ссылку...
Timour 11.07.2001
дай ссылку плиз Интересно, я не знал что в mdb тоже кодируется.
silich 11.07.2001
вот http://support.microsoft.com/support/kb/articles/Q176/6/70.ASP
Jetutils.exe The Jetutils.exe file contains the following file: Jetlock.doc Understanding Microsoft Jet Locking White Paper Readme.txt Readme file with Installation information LDBView.exe LDBView utility Dblck.exe Self-extracting executable that contains the setup files for DBLock Msldbusr.exe Self-extracting executable that contains Msldbusr.dll and associated files
я руководствовался этой инфой
ДиД 11.07.2001
Из Гетца (не проверял) ' From Access 2000 Developer's Handbook, Volume II ' by Litwin, Getz, and Gilbert. (Sybex) ' Copyright 1999. All rights reserved.
Set rst = cnn.OpenSchema( _ Schema:=adSchemaProviderSpecific, _ SchemaId:=adhcUsers)
With rst Do Until .EOF intUser = intUser + 1 For Each fld In .Fields varVal = fld.Value ' Некоторые из полученных значений представлений ' собой нуль-терминированные строки, так что ' нуль-символы нужно отбросить If InStr(varVal, vbNullChar) > 0 Then varVal = Left(varVal, _ InStr(varVal, vbNullChar) - 1) End If strUser = strUser & ";" & varVal Next .MoveNext Loop End With txtUsers = intUser lboUsers.RowSource = strUser 'где lboUsers - список в форме
' Убираем за собой rst.Close Set rst = Nothing Set fld = Nothing Set cnn = Nothing End Sub Получив соответствующее значение параметра SchemaId, метод OpenSchema заполняет набор записей ADO списком пользователей БД. Некоторые из возвращаемых этим методом значений представляют собой нуль-терминированные строки. Процедура BuildUserList пробегает по таким строкам и отбрасывает все, что следует за нуль-символом, а остаток помещает в список.
silich 11.07.2001
:)) а тем, у кого 97-ой ? :)) Кен Гетц - это круто!!! Но - самому порыться тоже полезно ;))
Однин человек, Эйнштейн по-моему, как то сказал :"Все знают, что этого нельзя сделать, но я не знал - и сделал великое открытие"
Это я к тому, что иногда полезно поизобретать велосипед :))
silich 11.07.2001
http://support.microsoft.com/support/kb/articles/q186/3/04.asp я на базе всей этой инфы сделал в своей проге - просмотр всех, кто работате с программой(базой)
Tich 11.07.2001
Ага! Лед тронулся.../Остап Б. Списибо за инфу - будем копать.
Статья 10.07.2001
ACC97: How to Read .LDB Files
The information in this article applies to:
Microsoft Access 97
Microsoft Visual Basic for Applications
SUMMARY
Advanced: Requires expert coding, interoperability, and multiuser skills.
In Microsoft Access 97, the .ldb file is used to determine which records are locked in a shared database and by whom. It is created automatically when any user opens a database and deleted when the last user closes the database. While the .ldb file cannot be opened directly for reading, Microsoft provides a dynamic link library that exposes functions that you can use to read the .ldb file. This article contains sample code for using the DLL to read an .ldb file.
Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support professionals can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific needs. If you have limited programming experience, you may want to contact a Microsoft Certified Partner or the Microsoft fee-based consulting line at (800) 936-5200. For more information about Microsoft Certified Partners, please see the following page on the World Wide Web:
The dynamic link library Msldbusr.dll contains functions that enable you to do the following:
View all computers that have logged into a database since the .ldb file was created.
View only computers that are currently logged into a database.
View computers that are causing a database file to be corrupted.
View the count of computers logged into a database.
Msldbusr.dll is part of the Jetutils.exe file. For more information about Jetutils.exe or Msldbusr.dll and its usage, please see the following article in the Microsoft Knowledge Base:
Q176670 ACC: Microsoft Jet Utilities Available in Download Center
The following sample Visual Basic for Applications code calls the LDBUser_GetUsers function of Msldbusr.dll to print a list of computers currently connected to a database in the Debug window.
After installing Msldbusr.dll to the C:WindowsSystem (Microsoft Windows 95) or C:WinntSystem32 (Microsoft Windows NT) folder, follow these steps to create and use the sample function:
Create a new module in Microsoft Access 97
Type or paste the following function declaration statement into the Declarations section of the module:
Declare Function LDBUser_GetUsers Lib "MSLDBUSR.DLL" _ (lpszUserBuffer() As String, ByVal lpszFilename As String, _ ByVal nOptions As Long) As Integer
Type or paste the following sample function into the module:
Public Function GetUsers(Optional StrDbPath As String)
ReDim lpszUserBuffer(1) As String Dim intLooper As Integer Dim Cusers As Long Dim strMsgBox As String
On Error GoTo Err_GetUsers
' Check to see if a database path was passed ' to the function. If the argument was not used, ' assume that we're to investigate the .ldb ' of the current database. If IsMissing(StrDbPath) Or StrDbPath = "" Then StrDbPath = CurrentDb.Name End If
' Set Cusers to the number of computers currently connected ' to the database. Insert computer information into the ' lpszUserBuffer array.
' Arguments of LdbUser_Get Users: ' 1 = All users who have logged in since the LDB file was ' created ' 2 = Only users who are currently logged in ' 4 = Only users who are causing the database file to be ' corrupted ' 8 = Just return the count of users
' Print possible errors returned by the function. Select Case Cusers Case -1 strMsgBox = "Can't open the LDB file" Case -2 strMsgBox = "No user connected" Case -3 strMsgBox = "Can't Create an Array" Case -4 strMsgBox = "Can't redimension array" Case -5 strMsgBox = "Invalid argument passed" Case -6 strMsgBox = "Memory allocation error" Case -7 strMsgBox = "Bad index" Case -8 strMsgBox = "Out of memory" Case -9 strMsgBox = "Invalid Argument" Case -10 strMsgBox = "LDB is suspected as corrupted" Case -11 strMsgBox = "Invalid argument" Case -12 strMsgBox = "Unable to read MDB file" Case -13 strMsgBox = "Can't open the MDB file" Case -14 strMsgBox = "Can't find the LDB file" End Select
If Not IsEmpty(strMsgBox) And strMsgBox <> "" Then MsgBox strMsgBox, vbCritical, "Error" Exit Function End If
' Print computer names to Debug window. For intLooper = 0 To Cusers - 1 Debug.Print "User"; intLooper + 1; ":"; _ lpszUserBuffer(intLooper) Next
Exit_GetUsers: Exit Function Err_GetUsers: MsgBox Err.Description Resume Exit_GetUsers
End Function
To test this function, type the following line in the Debug window, and then press ENTER:
?getusers()
REFERENCES
For more information about Msldbusr.dll, review the Msldbusr.doc file found in Jetutils.exe.