Foxtable(狐表)用户栏目专家坐堂 → [求助]一段查询代码问题,一直找不到原因


  共有10745人关注过本帖树形打印复制链接

主题:[求助]一段查询代码问题,一直找不到原因

帅哥哟,离线,有人找我吗?
飞鱼
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:176 积分:1535 威望:0 精华:0 注册:2010/8/23 14:57:00
[求助]一段查询代码问题,一直找不到原因  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
飞鱼
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:176 积分:1535 威望:0 精华:0 注册:2010/8/23 14:57:00
  发帖心情 Post By:2011/11/22 11:07:00 [只看该作者]

  果然解决了!

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

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/22 11:10:00 [只看该作者]

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

find才会返回nothing


 回到顶部