以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  从后台加载数据时,如何跳过已加载数据  (http://foxtable.net/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)
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编辑过]

--  作者:大红袍
--  发布时间: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(",")
If idxs > "" Then
    DataTables("ry").AppendLoad("[id] In (" & ids & ")", False)   \'追载
End If

 

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