经典“谁登录”问题... [英] Classic "Who is logged-on" problem...

查看:50
本文介绍了经典“谁登录”问题...的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个表单,我从一个数据库名称列表中选择一个列表

在一个文本框中出现了计算机ID号和一个相关的

(来自一个表)用户名。有没有办法从查看此代码到

告诉网络ID名称?我希望不必用

" Dev Ashish"编写代码。 API代码,我肯定很棒,但我不知道如何以像我这样的形式实现它。请查看以下代码

并告诉我是否可以修改它以提供网络ID。我正在使用A2000并且

没有访问安全性。

谢谢!


选项比较数据库

Option Explicit

Private Const ms_UNKNOWN As String =" Unknown User"

私函数CreateListHeader()As String

Dim strFill As String

strFill =" No.;计算机ID;用户名;已连接?;可疑状态?;"

CreateListHeader = strFill

结束功能


私有子cboDBName_Change()

Dim strDB As String

Dim strMsg As String

如果是IsBlank(Me.cboDBName)那么

strMsg =&无法在没有有效数据库的情况下执行操作

名称。

MsgBox strMsg,vbInformation,数据库名称为空白

退出子

否则

strDB = Me.cboDBName

ShowUsersInDB(strDB)

结束如果


End Sub


Private Sub cboDBName_Click( )

Dim strDB As String

Dim strMsg As String

strDB = Me.cboDBName

ShowUsersInDB(strDB)

结束如果


结束子


私有子ShowUsersInDB(ByVal strDB As String)

Dim cnn As New ADODB.Connection

Dim rec As ADODB.Recordset

Dim fld As ADODB.Field

Dim intUser As Integer

Dim intFldCount As Integer

Dim varVal As Variant

Dim strPC As String

Dim strUser As String

Dim strConnected As String

Dim strSuspect As String

Dim strData As String

Dim strInfo As String


''获取数据库名称

strFile = GrabDBPath(strDB)

DoCmd.Hourglass True

''如果它到了 - 看看谁在数据库中

strData = CreateListHeader

strFile = strFile& strDB& DB_EXT


''打开连接和记录集

cnn.Open JET_PROVIDER& 数据源= &安培; strFile& ""

设置rec = cnn.OpenSchema(架构:= adSchemaProviderSpecific,

SchemaId:= adhcUsers)


使用rec

Debug.Print rec.RecordCount

Do Until .EOF

intUser = intUser + 1

strNo = CStr(intUser)& ""

intFldCount = 0

For Fld in .Fields

intFldCount = intFldCount + 1

varVal = fld.Value

选择案例intFldCount

案例1

strPC = StripNullChar(varVal)

案例2''获取ID的用户名

如果是IsNull(varVal)那么

strUser = ms_UNKNOWN& " ;;"

Else

strUser = GrabUserName(strPC)

结束如果

案例3

strConnected = StripNullChar(varVal)

案例4''怀疑状态

如果是IsNull(varVal)那么

strSuspect = "假QUOT; &安培; ""

Else

strSuspect = StripNullChar(varVal)

结束如果

结束选择

下一页

strData = strData& strNo& strPC& strUser& strConnected

& strSuspect

.MoveNext

循环

结束


Me.lstUsers.RowSource = strData


rec.Close

设置rec = Nothing

设置fld = Nothing

设置cnn = Nothing

结束子


私函数GrabUserName(ByVal strPCID As String)As String


Dim cnn As New ADODB .Connection

Dim cmd As ADODB.Command

Dim rec As ADODB.Recordset

Dim strSQL As String

Dim strUser As String


设置cnn = CurrentProject.Connection

设置cmd =新ADODB.Command


strSQL =" SELECT * FROM tblUserIDs WHERE PCID Like''" &

剩余$(strPCID,Len(strPCID) - 1)& "''"


cmd.ActiveConnection = cnn

cmd.CommandType = adCmdText

cmd.CommandText = strSQL


设置rec = cmd.Execute


如果不是rec.EOF那么

strUser = rec(1)

否则

strUser = ms_UNKNOWN

结束如果


rec.Close

cnn.Close

设置cnn = Nothing


结束功能

解决方案

(strPCID,Len(strPCID) - 1)& "''"


cmd.ActiveConnection = cnn

cmd.CommandType = adCmdText

cmd.CommandText = strSQL


设置rec = cmd.Execute


如果不是rec.EOF那么

strUser = rec(1)

否则

strUser = ms_UNKNOWN

结束如果


rec.Close

cnn.Close

设置cnn = Nothing


结束功能


我使用这段代码。

私有声明函数apiGetComputerName Lib" kernel32" Alias

" GetComputerNameA" (ByVal lpBuffer As String,nSize As Long)As long


函数fOSMachineName()As String

''返回computername

Dim lngLen As Long,lngX As Long

Dim strCompName as String


lngLen = 16

strCompName = String

(lngLen,0)

lngX = apiGetComputerName(strCompName,lngLen)

如果lngX<> 0然后

fOSMachineName =左


I have a form that I choose from a list of database names and a list
within a textbox comes up with the computer ID number and an associated
(from a table) user name. Is there a way from looking at this code to
tell the network ID name? I hope not to have to write the code with the
"Dev Ashish" API code, which I''m sure is great but I can''t figure out
how to implement it in a form like mine. Please look at the below code
and tell if I can modify it to give network ID. I''m using A2000 and
without access security in place.
Thanks!

Option Compare Database
Option Explicit
Private Const ms_UNKNOWN As String = "Unknown User"

Private Function CreateListHeader() As String
Dim strFill As String
strFill = "No.;Computer ID;User Name;Connected?;Suspect State?;"
CreateListHeader = strFill
End Function

Private Sub cboDBName_Change()
Dim strDB As String
Dim strMsg As String
If IsBlank(Me.cboDBName) Then
strMsg = "Unable to perform operation without a valid database
name."
MsgBox strMsg, vbInformation, "Database Name is Blank"
Exit Sub
Else
strDB = Me.cboDBName
ShowUsersInDB (strDB)
End If

End Sub

Private Sub cboDBName_Click()
Dim strDB As String
Dim strMsg As String
strDB = Me.cboDBName
ShowUsersInDB (strDB)
End If

End Sub

Private Sub ShowUsersInDB(ByVal strDB As String)
Dim cnn As New ADODB.Connection
Dim rec As ADODB.Recordset
Dim fld As ADODB.Field
Dim intUser As Integer
Dim intFldCount As Integer
Dim varVal As Variant
Dim strPC As String
Dim strUser As String
Dim strConnected As String
Dim strSuspect As String
Dim strData As String
Dim strInfo As String

''get the db name
strFile = GrabDBPath(strDB)

DoCmd.Hourglass True
''if it gets here - see who is in the database
strData = CreateListHeader
strFile = strFile & strDB & DB_EXT

''open the connection and recordset
cnn.Open JET_PROVIDER & "Data Source=" & strFile & ";"
Set rec = cnn.OpenSchema(Schema:=adSchemaProviderSpecific,
SchemaId:=adhcUsers)

With rec
Debug.Print rec.RecordCount
Do Until .EOF
intUser = intUser + 1
strNo = CStr(intUser) & ";"
intFldCount = 0
For Each fld In .Fields
intFldCount = intFldCount + 1
varVal = fld.Value
Select Case intFldCount
Case 1
strPC = StripNullChar(varVal)
Case 2 ''get the user name for the ID
If IsNull(varVal) Then
strUser = ms_UNKNOWN & ";"
Else
strUser = GrabUserName(strPC)
End If
Case 3
strConnected = StripNullChar(varVal)
Case 4 ''suspected state
If IsNull(varVal) Then
strSuspect = "False" & ";"
Else
strSuspect = StripNullChar(varVal)
End If
End Select
Next
strData = strData & strNo & strPC & strUser & strConnected
& strSuspect
.MoveNext
Loop
End With

Me.lstUsers.RowSource = strData

rec.Close
Set rec = Nothing
Set fld = Nothing
Set cnn = Nothing
End Sub

Private Function GrabUserName(ByVal strPCID As String) As String

Dim cnn As New ADODB.Connection
Dim cmd As ADODB.Command
Dim rec As ADODB.Recordset
Dim strSQL As String
Dim strUser As String

Set cnn = CurrentProject.Connection
Set cmd = New ADODB.Command

strSQL = "SELECT * FROM tblUserIDs WHERE PCID Like ''" &
Left$(strPCID, Len(strPCID) - 1) & "''"

cmd.ActiveConnection = cnn
cmd.CommandType = adCmdText
cmd.CommandText = strSQL

Set rec = cmd.Execute

If Not rec.EOF Then
strUser = rec(1)
Else
strUser = ms_UNKNOWN
End If

rec.Close
cnn.Close
Set cnn = Nothing

End Function

解决方案

(strPCID, Len(strPCID) - 1) & "''"

cmd.ActiveConnection = cnn
cmd.CommandType = adCmdText
cmd.CommandText = strSQL

Set rec = cmd.Execute

If Not rec.EOF Then
strUser = rec(1)
Else
strUser = ms_UNKNOWN
End If

rec.Close
cnn.Close
Set cnn = Nothing

End Function


I use this code.
Private Declare Function apiGetComputerName Lib "kernel32" Alias
"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function fOSMachineName() As String
''Returns the computername
Dim lngLen As Long, lngX As Long
Dim strCompName As String

lngLen = 16
strCompName = String


(lngLen, 0)
lngX = apiGetComputerName(strCompName, lngLen)
If lngX <> 0 Then
fOSMachineName = Left


这篇关于经典“谁登录”问题...的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆