Foxtable(狐表)用户栏目专家坐堂 → 关于查询与赋值并存


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

主题:关于查询与赋值并存

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


加好友 发短信
等级:七尾狐 帖子:1691 积分:16460 威望:0 精华:0 注册:2013/7/31 13:03:00
关于查询与赋值并存  发帖心情 Post By:2015/4/28 14:31:00 [只看该作者]

看了帮助:查询与赋值并存,也有同感
我在命令窗口执行一段代码,也是300多秒
这里涉及3个表,求助帮我改写一下:
Dim st As Date = Date.Now
Dim dr As DataRow '积分表之行
Dim dr2 As  DataRow '积分表兑换之行
For Each dr1 As DataRow In DataTables("积分表消费").DataRows
    dr2 = DataTables("积分表兑换").SQLFind("会员卡号 = '" & dr1("会员卡号") & "' and 店铺 ='" & dr1("店铺") & "' and 手机号码 ='" & dr1("手机号码") & "'")
    If dr2 IsNot Nothing Then
        dr = DataTables("积分表").AddNew
        dr("会员卡号") = dr1("会员卡号")
        dr("店铺") = dr1("店铺")
        dr("手机号码") = dr1("手机号码")
        dr("积分") = dr1("积分") - dr2("积分")
        dr.Save
    Else
        dr = DataTables("积分表").AddNew
        dr("会员卡号") = dr1("会员卡号")
        dr("店铺") = dr1("店铺")
        dr("手机号码") = dr1("手机号码")
        dr("积分") = dr1("积分")
        dr.Save
    End If
Next
MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20150428141321.jpg
图片点击可在新窗口打开查看




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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/28 14:35:00 [只看该作者]

FIND会比SQLFIND快很多.你一直SQLFIND 还不如把数据都加载进来再FIND



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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/28 14:42:00 [只看该作者]

如果积分兑换表的数据量非常非常庞大,远远大于积分消费表.

你可以利用查询表生成器   用积分消费表作为左表   兑换表作为右表   关联列设置为 你条件里的列.

这样这整个查询表的数据就是 If dr2 IsNot Nothing Then 这个IF条件里面的数据里,也就是有对应数据的.能找到DR的.

复制这个查询表生成器的 SQL代码.  用SQL语句再生成一个查询表 select * f rom 消费表 where _Identify not in (select _Identify f rom (复制出来的语句))

这样得出来的表,就是不存在的. 遍历它即可 也就是Else里面的



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


加好友 发短信
等级:七尾狐 帖子:1691 积分:16460 威望:0 精华:0 注册:2013/7/31 13:03:00
  发帖心情 Post By:2015/4/28 14:55:00 [只看该作者]

改FIND也没有改观:

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20150428145042.jpg
图片点击可在新窗口打开查看

如果能像帮助“查询与赋值并存”那样,查询与赋值分开就好了,可惜我写不好。


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/28 14:57:00 [只看该作者]

Dim lst1 As New List(of DataRow)
Dim 
lst2 AS New List(of DataRow)
For Each 
dr As DataRow In DataTables("表A").DataRows
    If DataTables(
"表A").Find("第二列 = " & dr("第一列")) Is Nothing Then
        lst1
.Add(dr)
    Else

        lst2
.Add(dr)
    End If
Next
For Each 
dr As DataRow In lst1 
    dr
("第三列") = True
Next
For Each 
dr As DataRow In lst2
    dr
("第三列") = False
Next

那就用帮助这个方法试试看

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2015/4/28 14:58:00 [只看该作者]

你就按照帮助的说明改就行了,如果要别人改,你得提供例子,凭空无法改。

 回到顶部