以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 从后台加载数据时,如何跳过已加载数据 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=89478) |
-- 作者:lake163 -- 发布时间:2016/8/22 23:45:00 -- 从后台加载数据时,如何跳过已加载数据 前提: 1、外部数据源中的表,初始不加载任何数据,使用过程中,根据加载条件加载相关数据。 2、不同加载条件加载的行是有大量交叉的。 3、每次加载时,都使用LOAD方法,效率很低(因为有的条件对应的行很多); 而使用AppendLoad方法,又有部分符合条件的数据已加载,不满足AppendLoad使用要求。 希望: 每次加载时,保留已经加载的数据(这些数据有的符合新加载条件,有的不在新加载条件范围内),只加载之前没有加载的数据,请教如何办? (如果采取将后台所有符合条件的行,通过主键与已经加载的行比较后,再确定是否AppendLoad,想必效率也很慢) |
-- 作者:Hyphen -- 发布时间:2016/8/23 8:45:00 -- 那就只有在加载条件中做文章了。在加载条件中排除已经加载的数据 |
-- 作者:lake163 -- 发布时间: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 -- 发布时间:2016/8/23 20:58:00 -- 差不多应该是这样: Dim ryid1,ryid2 As List(Of String) For Each ryid As String In ryid1 \'后台的每一行 ID [此贴子已经被作者于2016/8/23 21:06:54编辑过]
|
-- 作者:大红袍 -- 发布时间:2016/8/23 21:18:00 -- 还不如是移除以后重新追载
http://www.foxtable.com/webhelp/scr/2914.htm
|
-- 作者:lake163 -- 发布时间: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编辑过]
|
-- 作者:大红袍 -- 发布时间:2016/8/23 23:36:00 -- 2、改写一下
ids= ids.Trim(",")
3、不行,加一列最后修改时间还差不多 |