Foxtable(狐表)用户栏目专家坐堂 → 从后台加载数据时,如何跳过已加载数据


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

主题:从后台加载数据时,如何跳过已加载数据

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


加好友 发短信
等级:童狐 帖子:276 积分:2971 威望:0 精华:0 注册:2010/9/20 11:21:00
从后台加载数据时,如何跳过已加载数据  发帖心情 Post By:2016/8/22 23:45:00 [只看该作者]

前提:
   1、外部数据源中的表,初始不加载任何数据,使用过程中,根据加载条件加载相关数据。
 2、不同加载条件加载的行是有大量交叉的。
   3、每次加载时,都使用LOAD方法,效率很低(因为有的条件对应的行很多);
   而使用AppendLoad方法,又有部分符合条件的数据已加载,不满足AppendLoad使用要求。
希望:
   每次加载时,保留已经加载的数据(这些数据有的符合新加载条件,有的不在新加载条件范围内),只加载之前没有加载的数据,请教如何办?
 (如果采取将后台所有符合条件的行,通过主键与已经加载的行比较后,再确定是否AppendLoad,想必效率也很慢)



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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/23 8:45:00 [只看该作者]

那就只有在加载条件中做文章了。在加载条件中排除已经加载的数据

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


加好友 发短信
等级:童狐 帖子:276 积分:2971 威望:0 精华:0 注册:2010/9/20 11:21:00
  发帖心情 Post By:2016/8/23 19:34:00 [只看该作者]

想先采取逐个比较的方法,如果运行速度还可以,就采用这个办法

Dim ryid1,ryid2  As List(Of String)          
ryid1 = DataTables("ry").SQLGetValues("id",filter)    '后台筛选后的行 取ID值,因为ID都不重复,使用主键也可以
ryid2 = DataTables("ry").GetValues("id",filter)          '前台筛选后的行  ,前台行也可不作筛选,因为是拿后台的行与前台比较

For Each ryid As String In ryid1                      '后台的每一行 ID
    If ryid2.Contains(ryid)= False Then             '如果前台不存在
        DataTables("ry").AppendLoad( "[id] = "  &  ryid , False)          '加载
    End If
Next

其中:
       DataTables("ry").AppendLoad( "[id] = "  &  ryid , False)          '加载
提示出错, 请问是什么原因啊?



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


加好友 发短信
等级:三尾狐 帖子:762 积分:6302 威望:0 精华:0 注册:2011/12/1 14:47:00
  发帖心情 Post By:2016/8/23 20:58:00 [只看该作者]

差不多应该是这样:

Dim ryid1,ryid2  As List(Of String)
Dim ids As String
ryid1 = DataTables("ry").SQLGetValues("id",filter)    '后台筛选后的行 取ID值,因为ID都不重复,使用主键也可以
ryid2 = DataTables("ry").GetValues("id",filter)          '前台筛选后的行  ,前台行也可不作筛选,因为是拿后台的行与前台比较

For Each ryid As String In ryid1                      '后台的每一行 ID
    If ryid2.Contains(ryid)= False Then             '如果前台不存在
        ids = ids & ",'" & ryid & "'"
    End If
Next
ids= ids.Trim(",")
DataTables("ry").AppendLoad("[id] In (" & ids & ")", False)   '追载

[此贴子已经被作者于2016/8/23 21:06:54编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/23 21:18:00 [只看该作者]

 还不如是移除以后重新追载

 

http://www.foxtable.com/webhelp/scr/2914.htm

 


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


加好友 发短信
等级:童狐 帖子:276 积分:2971 威望:0 精华:0 注册:2010/9/20 11:21:00
  发帖心情 Post By:2016/8/23 22:43:00 [只看该作者]

1、经过测试,逐个比较的方法在此情况下(数据库在阿里云上,同一数据需经常重复加载),较为实用,在部分数据已加载时,可节省不少时间。
2、经过比较后,在不需要从后台加载数据时,也即:ids 为空时,以下两句运行时,提示语法错误。
ds= ids.Trim(",")
DataTables("ry").AppendLoad("[id] In (" & ids & ")", False) 
3、还有一种方法:
     在表中增加一个标志列,每次加载数据时,均排除已设标志的列,并将新加载的行进行标记。
 不知效率如何?
[此贴子已经被作者于2016/8/23 22:44:31编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/23 23:36:00 [只看该作者]

2、改写一下

 

ids= ids.Trim(",")
If idxs > "" Then
    DataTables("ry").AppendLoad("[id] In (" & ids & ")", False)   '追载
End If

 

3、不行,加一列最后修改时间还差不多


 回到顶部