dim i as variant我假设i可能是个空值(null)可能是个字符串。现在我有一个问题是,可以不通过判断把i传给一个函数,在里面去执行存储过程。见代码,
Public Function GetTaskInfo(ByVal condition_1 As Variant, _
                            ByVal condition_2 As Variant, _
                            ByVal condition_3 As Variant, _
                            ByVal condition_4 As Variant) As Recordset
  Dim ado As AdoAccess
  Dim Result As Boolean
  Dim SQL As String
  Dim Rec As ADODB.Recordset
  Dim source As String
  
  Set ado = New AdoAccess
  Set GetTaskInfo = Nothing
  
  Result = ado.OpenConnection(GetSetting("CMQC", "DataBase", "ConnectString"))
  If Result = True Then
    SQL = "exec GetTaskInfoByMultiCondition" + Chr(34) + condition_1 + Chr(34) + condition_2 + condition_3 + condition_4
    Result = ado.GetRecordset(SQL, Rec)
    If Result = True Then
     Set GetTaskInfo = Rec
    End If
    
    Set Rec = Nothing
    ado.CloseConnection
  End If
  Set ado = Nothing
End Function我的condition_1,2,3,4可能是null,可能是字符串。望高手指点。谢谢了

解决方案 »

  1.   

    Public Function GetTaskInfo(ByVal condition_1 As Variant="", _
                                ByVal condition_2 As Variant="", _
                                ByVal condition_3 As Variant="", _
                                ByVal condition_4 As Variant="") As Recordset
      

  2.   

    首先因为没有可选参数,所以肯定会传值进去否则不让编译
    但是有可能传NULL进去,这样你就要检验
    你可以不检验用户给你传如的值,但是你最好在
    GetTaskInfo中进行判断Public Function GetTaskInfo(ByVal condition_1 As Variant, _
                                ByVal condition_2 As Variant, _
                                ByVal condition_3 As Variant, _
                                ByVal condition_4 As Variant) As Recordset
      Dim ado As AdoAccess
      Dim Result As Boolean
      Dim SQL As String
      Dim Rec As ADODB.Recordset
      Dim source As StringIf IsNull(condition_1) Then condition_1 = ""
    If IsNull(condition_2) Then condition_2 = ""
    If IsNull(condition_3) Then condition_3 = ""
    If IsNull(condition_4) Then condition_4 = ""
      

  3.   

    try:Public Function GetTaskInfo(ByVal condition_1 As String, _
                                ByVal condition_2 As String, _
                                ByVal condition_3 As String, _
                                ByVal condition_4 As String) As Recordset
      Dim ado As AdoAccess
      Dim Result As Boolean
      Dim SQL As String
      Dim Rec As ADODB.Recordset
      Dim source As String
      
      Set ado = New AdoAccess
      Set GetTaskInfo = Nothing
      
      Result = ado.OpenConnection(GetSetting("CMQC", "DataBase", "ConnectString"))
      If Result = True Then
        SQL = "exec GetTaskInfoByMultiCondition" + Chr(34) + condition_1 & "" + Chr(34) + condition_2 & "" + condition_3 & "" + condition_4 & ""
        Result = ado.GetRecordset(SQL, Rec)
        If Result = True Then
         Set GetTaskInfo = Rec
        End If
        
        Set Rec = Nothing
        ado.CloseConnection
      End If
      Set ado = Nothing
    End Function