2

VBScript でクラスを作成し、それを asp クラシックで使用してオブジェクトを開始しました。これが私のクラスです。

    <%
Class RBAC

    Public dateTimeValue
    Public userIdValue
    Public fileIdValue
    Public actionValue

    Public Property Get DateTime()
            'Gets the propery value
            DateTime = dateTimeValue
        End Property    
    Public Property Set DateTime(value)
            'Sets the property value
            dateTimeValue = value
    End Property

    Public Property Get UserId()
            'Gets the propery value
            UserId = userIdValue
        End Property
    Public Property Set UserId(value)
            'Sets the property value
            userIdValue = value
    End Property

    Public Property Get FileId()
            'Gets the propery value
            FileId = fileIdValue
        End Property
    Public Property Set FileId(value)
            'Sets the property value
            fileIdValue = value
    End Property

    Public Property Get Action()
            'Gets the propery value
            Action = actionValue
        End Property
    Public Property Set Action(value)
            'Sets the property value
            actionValue = value
    End Property

    Public Sub Insert()
        sqlMethods = "INSERT INTO RBAC ([DateTime],[UserId],[FileId],[Action]) VALUES ("+dateTimeValue+","+userIdValue+","+fileIdValue+","+actionValue+",)"
        Conn.Execute(sqlMethods)
    End Sub

End Class
 %>

ここでは、オブジェクトをインスタンス化し、そのプロパティを設定します。

    Dim RbacObject
Set RbacObject = New RBAC
Set RbacObject.DateTime = Now
Set RbacObject.UserId = Cstr(Session("cgsid"))
sqlFileId = "SELECT int_fileid FROM tbl_SecFiles where str_filename = '"&split(Request.ServerVariables("SCRIPT_NAME"),"/cgs/")(1)&"'"
Set RS = Conn.Execute(sqlFileId)
Set RbacObject.FileId = RS("int_fileid")
Set RbacObject.Action = "<"&stringMethods&"><old>"&enabled_profiles_old&"</old><new>"&enabled_profiles_old&siteid&",</new></"&stringMethods&">"

RbacObject.Insert

問題は、値を設定しても、 FileIdのみが値を取得し、残りのフィールドは空であることです。私は何を間違っていますか?

4

2 に答える 2

6

Setオブジェクトを変数に割り当てるために使用されます。そう

Set RbacObject = New RBAC

は正しいですが、他のすべてのステートメントは次のようになります

Set RbacObject.DateTime = Now

ではありません。使用する

RbacObject.DateTime = Now

代わりは。

Set RbacObject.FileId = RS("int_fileid")

ボーダーラインのケースです: fileIdValueFieldオブジェクトを含みますが、「オブジェクト以外のコンテキスト」(IO や計算など) で使用されると、その .Value に評価されます。

with/under で疑わしいコードを実行しないでくださいOn Error Resume Next

デモ:

copy con 10.vbs
Class C
 Public V
End Class
Set O = New C
Set O.V = "don't do this at home."
^Z

cscript 10.vbs
... 10.vbs(5, 1) Microsoft VBScript runtime error: Object required: 'O.V'

デモ II (非オブジェクトの割り当てに使用しない場合に「機能する」ことを証明し、Set「それでも機能しない」場合は悪意のある OERN によって隠されている他のエラーがあることを示すため):

Class C
 Public V
End Class
Set O = New C
On Error Resume Next
Set O.V = "don't do this at home."
WScript.Echo Err.Description
On Error GoTo 0
WScript.Echo "Set O.V => '" & O.V & "'"
O.V = "don't do this at home."
WScript.Echo "O.V => '" & O.V & "'"

出力:

cscript 10.vbs
Object required
Set O.V => ''
O.V => 'don't do this at home.'
于 2013-05-15T07:05:12.923 に答える