以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]一段查询代码问题,一直找不到原因  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=14507)

--  作者:飞鱼
--  发布时间:2011/11/22 10:47:00
--  [求助]一段查询代码问题,一直找不到原因
 我写了一段事件代码,实现的功能是:
1、定义一个数组
2、历遍数组中的每一个字符串,在另外一个表中查找这个字符串
3、把找到的内容填充到一个临时表,同时退出查找,如果没有找到,就继续下一个字符串的查找

现在的问题是:
如果数组中的第一个字符串没找到,程序就不会查找下一个字符串的信息了。

大侠帮我看下这段代码,错误到底出在哪里?谢谢!

Dim dr As DataRow=e.DataRow
Dim drs As List(of DataRow)

If e.DataCol.Name="查找的多型号资料"   Then    \'如果没有输入查询则清空该行
   If e.DataRow.IsNull("查找的多型号资料") Then
      For Each a As DataCol In DataTables("多型号兼容查询").Datacols
          dr(a.name)=Nothing
      Next
   Else
      Dim s As String
      s=dr("查找的多型号资料")
      s=s.ToLower()                           \'统一转换为小写
      Dim s1 As String                        \'定义数组中的单个字符串
      Dim values() As String                \'定义一个字符串数组
      values=s.split(",")                      \'把s分割后的字符,组成数组values
                   
     For Index As Integer = 0 To Values.Length -1   \'从数组中取出一个值
         s1=Values(Index)  
              
         Dim filter As String
         filter="[ReplacementFor] like \'*" & s1 & "*\' or [FitMachineModels] Like \'*" & s1 & "*\'"    \'定义查找条件                        
         drs=DataTables("BPB量产电池").Select(filter)          
       If drs IsNot Nothing Then  ‘如果找到了
         Dim n As Integer=drs.count
         dr("符合数量")=n
         dr("可查到的型号")=s1

         With DataTables("多兼容型号查询").DataRows  \'清除临时表所有历史行
           .Clear()          
         End With
   
         Dim f As New Filler                                \'把查找到的结果填充到临时表
             f.SourceTable = DataTables("BPB量产电池")
             f.filter=filter
             f.DataTable = DataTables("多兼容型号查询")
             f.DataCols ="产品名称,Code,Capacity,Voltage"
             f.Fill() 

         Exit For    \'找到的话就退出循环
          
       Else   \'没找到就继续
         Continue For
       End If
    Next
  
  End If
End If

--  作者:狐狸爸爸
--  发布时间:2011/11/22 11:02:00
--  
Dim dr As DataRow=e.DataRow
Dim drs As List(of DataRow)
If e.DataCol.Name="查找的多型号资料"   Then    \'如果没有输入查询则清空该行
    If e.DataRow.IsNull("查找的多型号资料") Then
        For Each a As DataCol In DataTables("多型号兼容查询").Datacols
            dr(a.name)=Nothing
        Next
    Else
        Dim s As String
        s=dr("查找的多型号资料")
        s=s.ToLower()                           \'统一转换为小写
        Dim s1 As String                        \'定义数组中的单个字符串
        Dim values() As String                \'定义一个字符串数组
        values=s.split(",")                      \'把s分割后的字符,组成数组values
        For Index As Integer = 0 To Values.Length -1   \'从数组中取出一个值
            s1=Values(Index)
            Dim filter As String
            filter="[ReplacementFor] like \'*" & s1 & "*\' or [FitMachineModels] Like \'*" & s1 & "*\'"    \'定义查找条件
            drs=DataTables("BPB量产电池").Select(filter)
            If drs.Count > 0   Then  \'如果找到了
                Dim n As Integer=drs.count
                dr("符合数量")=n
                dr("可查到的型号")=s1
                With DataTables("多兼容型号查询").DataRows  \'清除临时表所有历史行
                    .Clear()
                End With
                Dim f As New Filler                                \'把查找到的结果填充到临时表
                f.SourceTable = DataTables("BPB量产电池")
                f.filter=filter
                f.DataTable = DataTables("多兼容型号查询")
                f.DataCols ="产品名称,Code,Capacity,Voltage"
                f.Fill()
                Exit For    \'找到的话就退出循环
            Else   \'没找到就继续
                Continue For
            End If
        Next
    End If
End If

--  作者:飞鱼
--  发布时间:2011/11/22 11:07:00
--  
  果然解决了!

那么If drs IsNot Nothing为什么不可以呢?

--  作者:狐狸爸爸
--  发布时间:2011/11/22 11:10:00
--  

drs怎么可能为Nothing,你这是select,即使没有任何一行,也会返回一个集合,只是集合中的行数等于0而已。

find才会返回nothing