Foxtable(狐表)用户栏目专家坐堂 → 再求 高效率查询代码


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

主题:再求 高效率查询代码

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2011/5/26 19:26:00 [显示全部帖子]

以下是引用xmj09663在2011-5-26 18:07:00的发言:

 下载信息  [文件大小:10.7 KB  下载次数:2]
图片点击可在新窗口打开查看点击浏览该文件:查询与赋值.rar

 

老爹   说明 写作 文本 里面了    辛苦你了   嘎嘎

我又没看懂····  

 

A
物料代码 需求数量 第三列
H.TA01.019 2
H.TA01.019 9

表B:

 

物料代码 在制数量 第四列
H.TA01.019 10 F002-20
H.TA01.019 40 F002-20

 

 

上面这样的要怎么弄才符合你的要求? 


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2011/5/26 20:05:00 [显示全部帖子]

就是看不懂你的文本啊, 9楼的表A第三列应该等于什么吧。。。。。


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2011/5/26 20:44:00 [显示全部帖子]

b表哪有第三列???

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2011/5/26 20:49:00 [显示全部帖子]

应该是表B的第四列吧:

 

For i As Integer = 0 To CurrentTable.count-1
    Dim r As Row = CurrentTable.Rows(i)   
    If r.isnull("第三列")
        Dim drs As List(Of DataRow)
        drs = DataTables("表A").Select("[物料代码] = '" & r("物料代码") & "'")
        For Each dr As DataRow In drs
            Dim drb As DataRow
            drb = DataTables("表B").Find("[物料代码] = '" & r("物料代码") & "'")
            If drb IsNot Nothing Then
                dr("第三列") = drb("第四列")
            End If
        Next
    End If
Next


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2011/5/26 23:14:00 [显示全部帖子]

以下是引用xmj09663在2011-5-26 21:33:00的发言:

这个方法不够效率。。。

 

效率的标准是什么,几秒?


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2011/5/26 23:33:00 [显示全部帖子]

我测试我的后,一万行也就5秒钟(我的电脑是06年的)。

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2011/5/27 0:10:00 [显示全部帖子]

以下是引用狐狸爸爸在2011-5-26 23:47:00的发言:

提示,查询过程尽量少用Select语句,直接逐行比较,效率必须Select和Find高,一边赋值一边Select的效率比较低的:

 

尽量这样:

 

For Each r1 As DataRow In DataTables("表A").DataRows
    For Each r2 As DataRow In DataTables("表B").DataRows
        If r2("物料代码") = r1("物料代码") Then

        End if

    Next

Next

确实如此,又可减少1秒。


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2011/5/27 0:20:00 [显示全部帖子]

这样最快:2秒

For Each r1 As DataRow In DataTables("表A").DataRows
    Dim drb As DataRow
    drb = DataTables("表B").Find("[物料代码] = '" & r1("物料代码") & "'")
    If drb IsNot Nothing Then
        r1("第三列") = drb("第四列")
    End If
Next


 回到顶部