以文本方式查看主题

-  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 & "秒")

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




--  作者: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也没有改观:

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

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


--  作者: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
--  
你就按照帮助的说明改就行了,如果要别人改,你得提供例子,凭空无法改。