以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于查询与赋值并存 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=67651) |
-- 作者:czy66ds -- 发布时间: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 & "秒") |
-- 作者:Bin -- 发布时间:2015/4/28 14:35:00 -- FIND会比SQLFIND快很多.你一直SQLFIND 还不如把数据都加载进来再FIND |
-- 作者:Bin -- 发布时间: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 -- 发布时间:2015/4/28 14:55:00 -- 改FIND也没有改观: 如果能像帮助“查询与赋值并存”那样,查询与赋值分开就好了,可惜我写不好。
|
-- 作者:Bin -- 发布时间: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 那就用帮助这个方法试试看
|
-- 作者:狐狸爸爸 -- 发布时间:2015/4/28 14:58:00 -- 你就按照帮助的说明改就行了,如果要别人改,你得提供例子,凭空无法改。 |