Foxtable(狐表)用户栏目专家坐堂 → 这个需求该如何来实现


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

主题:这个需求该如何来实现

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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
这个需求该如何来实现  发帖心情 Post By:2017/8/1 15:21:00 [显示全部帖子]

版主您好,我的资料模块想每次打开模块的时候,判断当前用户是否已经下载了这个资料,并在“缓存”这一列显示。

由于不同的用户的资料情况不同,所以该列的数据不能保存,只能根据每个客户端的情况判别,我在数据表的DrawCell中使用如下代码:

If e.Col.Name = "缓存" Then  '请改为实际列名
For Each dr As DataRow In DataTables("项目资料表").DataRows
Dim path As String = ProjectPath & "RemoteFiles\" & FileSys.GetName(dr("资料名称"))
If FileSys.FileExists(path) Then
dr("缓存")="1"
Else
dr("缓存")="0"
End If
Next
End If

但是发现每次打开数据表都特费劲,很慢,而且每次都要改动数据表的数据,不知道有没有别的方式能够实现。


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


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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/8/1 15:42:00 [显示全部帖子]

只有方案一了,这样可以每次对比是否本地存在,方案二只能记录是否已经下载。

如果每次都判断本地是否存在该文件,如果列表中有10万条数据,这个判断是不是也很费时?

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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/8/1 16:20:00 [显示全部帖子]

我的意思是,如果判断10万条数据,是不是会很费时,普通电脑会用多少时间?

每个客户的资料情况不一样,这个数据当然不能保存啊。我需要的是,在每个客户电脑上在这一列显示的是自己的情况。如果保存了,岂不是所有客户端都是一个结果?
[此贴子已经被作者于2017/8/1 16:21:27编辑过]

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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/8/1 17:00:00 [显示全部帖子]

当然是用户本地文件少,首先要判断用户目录下的文件,

Dim path As String = ProjectPath & "RemoteFiles\"

For Each File As String In FileSys.GetFiles(path)
    Output.Show(File)  '这里的结果带有 
ProjectPath & "RemoteFiles\"路径
Next


下面查找表数据如何查找呢?又要循环表数据吗?岂不是又全部循环一遍?


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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/8/1 17:25:00 [显示全部帖子]

多谢版主指导,

Dim path As String = ProjectPath & "RemoteFiles\"
For Each File As String In FileSys.GetFiles(path)
    Dim name As String = filesys.GetName(file)

    Dim fdr As Datarow = DataTables("表A").Find("资料名称 = '" & name & "'")
Next


如果在资料名称的一列找到同名的本地文件,则该行“缓存”一列的值等于1,否则等于0.这个如何写?没有一点思路。


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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/8/1 17:31:00 [显示全部帖子]

Dim path As String = ProjectPath & "RemoteFiles\"
For Each File As String In FileSys.GetFiles(path)
    Dim name As String = filesys.GetName(file)

    Dim fdr As Datarow = DataTables("表A").Find("资料名称 = '" & name & "'")

    if fdr isnot Nothing then

    Datatables("表A").Rows(fdr)(“缓存”)=“0”

    else

      Datatables("表A").Rows(fdr)(“缓存”)=“1”

     End if

Next


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


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/8/1 18:12:00 [显示全部帖子]

这代码有意思,为什么要把没有找到赋值为3,然后又用1替换3呢?和直接赋值等于1,其他赋值为0的思路有什么不同? 
 Dim path As String = ProjectPath & "RemoteFiles\" 
For Each File As String In FileSys.GetFiles(path) 
 Dim name As String = filesys.GetName(file) 
 Dim fdr As DataRow = DataTables("表A").Find("资料名称 = '" & name & "'") 
 If fdr IsNot Nothing Then 
 fdr("缓存")="1" 
 else 
 fdr("缓存")="0" 
 End If 
Next
[此贴子已经被作者于2017/8/2 7:19:40编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/8/2 7:34:00 [显示全部帖子]

版主,我用
Dim path As String = ProjectPath & "RemoteFiles\" 
For Each File As String In FileSys.GetFiles(path) 
 Dim name As String = filesys.GetName(file) 
 Dim fdr As DataRow = DataTables("表A").Find("资料名称 = '" & name & "'") 
 If fdr IsNot Nothing Then 
 fdr("缓存")="1" 
 else       '难道是这里有什么错误?
 fdr("缓存")="0" 
 End If 
Next
 提示:未将对象引用设置到对象的实例。
这个哪里错了?

Dim path As String = ProjectPath & "RemoteFiles\"
For Each File As String In FileSys.GetFiles(path)
    Dim name As String = filesys.GetName(file)
    Dim fdr As DataRow = DataTables("表A").Find("资料名称 = '" & name & "'")
    If fdr IsNot Nothing Then
        fdr("缓存")="3"
    End If
Next
DataTables("表A").ReplaceFor("缓存", 0, "缓存=‘’")  '你的代码是  缓存=1,实际上即使不存在缓存,数据表中也没有等于1的值,所以我改为判断是否是空值
DataTables("表A").ReplaceFor("缓存", 1, "缓存 = 3")

没有错误提示,但是当本地没有缓存文件时,“缓存”列的值还是不等于0.
[此贴子已经被作者于2017/8/2 7:58:33编辑过]

 回到顶部