Sub Main()
Dim paras As ADODB.Parameters
Dim para  As ADODB.Parameter    Set para = MakePara("TableName", adVarWChar, adParamInput, 50, TableName)    paras.Append para   <-- 此句出错, 提示对象变量或With块变量未设置    Set para = MakePara("FieldName", adVarWChar, adParamInput, 50, FieldName))
    paras.Append para
    ...
End FunctionPublic Function MakePara(Name As String, DataType As ADODB.DataTypeEnum, Direction As ADODB.ParameterDirectionEnum, DataSize As ADO_LONGPTR, Value As Variant) As ADODB.Parameter
Dim para As New ADODB.Parameter
    para.Name = Name
    para.Type = DataType
    para.Direction = Direction
    para.Size = DataSize
    para.Value = Value
    Set MakePara = para
End Function

解决方案 »

  1.   

    给你看一段.
        Dim param As ADODB.Parameter
        Dim mConn As ADODB.Connection
        Dim cmd As ADODB.Command
        Set cmd = New ADODB.Command
        
        Set mConn = New Connection
        mConn.Open ConnectString
        
        cmd.ActiveConnection = mConn
        cmd.CommandType = adCmdStoredProc
        cmd.CommandText = "procedure1"
        
        If MSFlexGrid1.Rows > 1 Then
            For i = 1 To MSFlexGrid1.Rows - 1
                Set param = cmd.CreateParameter("@code", adVarChar, adParamInput, 20, MSFlexGrid1.TextMatrix(i, 0))
                cmd.Parameters.Append param
                Set param = cmd.CreateParameter("@custname", adVarChar, adParamInput, 50, MSFlexGrid1.TextMatrix(i, 1))
                cmd.Parameters.Append param
                Set param = cmd.CreateParameter("@rebackmoney", adDouble, adParamInput, , Val(MSFlexGrid1.TextMatrix(i, 2)))
                cmd.Parameters.Append param
                Set param = cmd.CreateParameter("@codemoney", adDouble, adParamInput, , Val(MSFlexGrid1.TextMatrix(i, 3)))
                cmd.Parameters.Append param
                Set param = cmd.CreateParameter("@codedate", adVarChar, adParamInput, 50, MSFlexGrid1.TextMatrix(i, 4))
                cmd.Parameters.Append param
                Set param = cmd.CreateParameter("@oppuser", adVarChar, adParamInput, 50, UserName)
                cmd.Parameters.Append param
                
                Set param = cmd.CreateParameter("@oppstate", adInteger, adParamOutput, 1, 0)
                cmd.Parameters.Append param
                
                cmd.Execute
    '……
      

  2.   

    大侠, 你是用Command的, 我的意思是不用Command搞定, 不知道可以不可以
      

  3.   

    不行,Parameter和Parameters都是基于command对象的直接用ado的insert 或update好了
      

  4.   

     不知道大家为什么都喜欢用CreateParameter的方法来生成Command的参数,这样多麻烦,代码多,而且一不小心写错类型的还会出错,楼主甚至用MakePara来做,这样不会更影响么,为什么不直接用obj.parameters("@param1")=...  这样的方式不是很简单么
      

  5.   

    paras 无法初始化, 可以定义成 
    Dim paras As ADODB.Parameters但是不可以这样定义:
    Dim paras As new ADODB.Parameters似乎此路不通 
      

  6.   

    Command --> Parameters --> Parameter  Dim cmd As ADODB.Command
        Dim paras As ADODB.Parameters
        Dim para  As ADODB.Parameter
        Dim sql As String    Set cmd = New ADODB.Command
        With cmd
            .ActiveConnection = "Provider = SQLOLEDB.1;" & _
                "Persist Security Info = False;" & _
                "User ID = sa;Password = 123;" & _
                "Data Source = 192.168.11.218;" & _
                "Initial Catalog = TEST"
            .CommandType = adCmdText
            .CommandText = sql
        End With
        Set paras = cmd.Parameters
        Set para = MakePara("TableName", adVarWChar, adParamInput, 50, TableName)
        paras.Append para ' --此句出错, 提示对象变量或With块变量未设置    Set para = MakePara("FieldName", adVarWChar, adParamInput, 50, TableName)
        paras.Append para    '......