1

テーブル tTbl_LoginUsers からの MSID を持つドロップダウン リストを含むログイン画面があります。MSID は、以下のように PKUserId (整数) に対応します。

PKUserID    MSID
1           jjenki02
2           trensc01 

LngLongID に使用する PKUserID を書き留めるには、以下のコードが必要です。これにより、MSID に対応する 1 つまたは 2 つの PKUSERID が列 fldUserName の tTbl_LoginSessions に配置されますが、これを実行すると実行時エラー '424' オブジェクトが必要です。私は一生、理由を理解できませんか?何か案は?

Private Sub CboUser_Click()
Dim MyCon As ADODB.Connection
Dim MyRS As ADODB.Recordset

    Set MyCon = New ADODB.Connection
    MyCon.Open "DRIVER=SQL Server;SERVER=dbswd****;UID=*****;PWD=*****;DATABASE=Regulatory;"
    Set MyRS = New ADODB.Recordset

'/The following code focuses on the DropDown field that the User selects their MSID
'/if MyNum = MSID, then MoveFirst to get the PKUserID(Column 1)from tTbl_LoginUsers
CboUser.SetFocus
MyNum = CboUser.Text
MyRS.Open "Select * from dbo.tTbl_LoginUsers Where MSID = '" & MyNum & "'", MyCon
Debug.Print strSQL

NewRecordRS.MoveFirst

LngLoginId = NewRecordRS!fldUserName


End Sub

新しい調整済みコード: tTbl_LoginSessions には次のフィールドがあります: fldloginkey、fldUserName、fldLoginEvent、fld LogoutEvent、fldComputerName。.MoveFirst はそれをトリガーします

Private Sub CboUser_Click()
Dim MyCon As ADODB.Connection
Dim MyRS As ADODB.Recordset

    Set MyCon = New ADODB.Connection
    MyCon.Open "DRIVER=SQL Server;SERVER=dbswd0027;UID=Mickey01;PWD=Mouse02;DATABASE=Regulatory;"
    Set MyRS = New ADODB.Recordset

With MyRS
'/The following code focuses on the DropDown field that the User selects their MSID
'/if that MyNum = MSID, then MoveFirst to get the PKUserID(Column 1)from tTbl_LoginUsers
     CboUser.SetFocus
     MyNum = CboUser.Text
     MyRS.Open "Select * from dbo.tTbl_LoginUsers Where MSID = '" & MyNum & "'", MyCon
     Debug.Print strSQL

   If Not (.BOF And .EOF) Then
        .MoveFirst
        LngLoginId = !fldUserName
    End If
End With
Debug.Print strSQL
'NewRecordRS.MoveFirst
'LngLoginId = NewRecordRS!fldUserName


End Sub

これは、その PKUSERID をログイン セッションに配置するコードです。

Function CreateSession()
'/This function records the details regarding the login details of the person

Dim con As ADODB.Connection
Dim cmd As ADODB.Command
Dim strSQL As String
Dim WhoAmI As Long

Set NewIdentRS = New ADODB.Recordset

Dim LngLoginId As String, StrComputerName As String


'passing variables
StrMSID = LngLoginId
'old StrMSID = StrLoginName
StrComputerName = FindComputerName

   'Declaring what table you are passing the variables to
    strSQL = "Insert into dbo.tTbl_LoginSessions(fldUserName, fldLoginEvent, fldComputerName) Values ('" & StrMSID & "','" & Now() & "','" & StrComputerName & "')"
     Debug.Print strSQL

    'connect to SQL Server
    Set con = New ADODB.Connection
    With con
        .ConnectionString = cSQLConn
        .Open
    End With

    'write back
    Set cmd = New ADODB.Command
    With cmd
        .ActiveConnection = con
        .CommandText = strSQL
        .CommandType = adCmdText
        .Execute


    End With

    con.Close
    Set cmd = Nothing
    Set con = Nothing



End Function

私もこれを持っています:

Public Function GrabMSID(frmObject)
GrabMSID = LngUserID
End Function
'Call it this way:
MyMSID = GrabMSID(Me)


Option Compare Database
Public LngLoginId As Long
4

1 に答える 1

1

NewRecordRS.MoveFirstという名前の変数がないため、この行はエラーをスローします。代わりにこれが必要なようです...

'NewRecordRS.MoveFirst
MyRS.MoveFirst

または、レコードセット オブジェクト変数名をWithブロック内で 1 回使用することを検討してください ...

With MyRS
    .Open "Select * from dbo.tTbl_LoginUsers Where MSID = '" & _
        MyNum & "'", MyCon
    If Not (.BOF And .EOF) Then
        .MoveFirst
        LngLoginId = !fldUserName
    End If
End With

注: tTbl_LoginUsersにfldUserNameという名前のフィールドが含まれていない場合、そのコードは次の行でエラー ( 「要求された名前または序数に対応するコレクションに項目が見つかりません」 ) をスローします。

        LngLoginId = !fldUserName

ただし、質問の元の主題である「オブジェクトが必要です」というエラーを解決しようとしました。fldUserNameがレコードセットに存在しないためにエラーが発生した場合は、別のエラーです。

于 2013-11-01T21:42:47.947 に答える