Foxtable(狐表)用户栏目专家坐堂 → 独占编辑


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

主题:独占编辑

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


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/1/31 17:28:00 [显示全部帖子]

移植到其它项目上,把表定向到sqlserver数据库中,报这个错

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

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


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/2/1 14:50:00 [显示全部帖子]


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


为了防止别人把文件下载下来,在本地编辑好了,再上传至服务器上,程序怎么控制,普通人只能打开,不能插入文件、插入目录以及清除内容?  
[此贴子已经被作者于2018/2/1 14:50:19编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/2/1 16:29:00 [显示全部帖子]


.NET Framework 版本:2.0.50727.8825
Foxtable 版本:2017.12.18.1
错误所在事件:计划检测协作文件开关状态
详细错误信息:
未设置对象变量或 With 块变量。

用如下定时器代码,偶尔启动程序会报上面的错误,咋回事?

For Each key As String In vars("ls").keys
    try
       '如果是当前用户退出编辑文档,则try语句可以正常执行
        vars("ls")(key).ExitTime 
        Dim dr As DataRow= DataTables("文件协作表").SQLFind("[_identify]=" & key )     
        '以下代码为删除关闭的文件的编辑人  ,
         If dr IsNot Nothing And dr("编辑者")=User.Name Then                   ' 如果编辑者是当前用户(表示是当前用户退出了编辑文档),则修改当前编辑者为空
         Dim cmd As New SQLCommand
         cmd.C
         cmd.CommandText = "U  pdate {文件协作表} Set 编辑者 = Null Where [_identify] = " & key            ' e.DataRow("_Identify")
            If cmd.ExecuteNonQuery = 1 Then
               '  e.DataRow("编辑者") = Nothing
               'Dim dr As DataRow= DataTables("员工").SQLFind("_identify='" & key & "'"   )
               dr("编辑者")=Nothing
            End If
         End If 
      '  msgbox(key & ":正常关闭,并删除编辑人")
    catch ex As exception    '如果当前用户没有退出编辑的文档,则执行以下代码
     '   msgbox(key & ":正常打开")
    End try
Next

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


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/2/1 17:16:00 [显示全部帖子]

and andalso有什么区别?

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


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/2/4 17:56:00 [显示全部帖子]

为什么编辑者字段, 如果是自己打开, 点“刷新” 按钮, 编辑者字段就会消失。  如果是别人打开,编辑者字段仍然会保留,咋回事?


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2018/2/4 17:57:27编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/2/4 18:06:00 [显示全部帖子]

刷新的代码
Dim t As Table = Tables("表A")
Dim temp As String = t.Filter
t.DataTable.Load
t.Filter = temp

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


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/2/5 8:46:00 [显示全部帖子]

这是左上角的刷新按钮,所有的表点它都可以刷新当前数据。


代码如下:
   Dim t As Table = CurrentTable
   Dim temp As String = t.Filter
   t.DataTable.Load
   t.Filter = temp

如果此时某人打开这个"文件协作表"中的附件进行编辑, 则"编辑者"字段会填上该人的名字,这个没有问题。  问题是:  如果是打开者本人点“刷新”按钮,则编辑者会消失(我查看了,打开附件时编辑者的名字也写到数据库的表中“编辑者”字段了,刷新后数据库中的这个字段也被清除了),这是怎么回事呢?
[此贴子已经被作者于2018/2/6 8:32:27编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/2/5 10:12:00 [显示全部帖子]

发现是点刷新按钮的时候,触发了 BeforSaveDataRow事件,怎么会这样呢? 要怎么改?

'文件协作相关代码
If e.DataRow.RowState = DataRowState.Added Then '如果是新增行
'msgbox("新增行")
    e.DataRow("编辑者") = Nothing
Else     '如果只是普通行点保存
'msgbox("已有行")
    Dim cmd As New SQLCommand
    cmd.C
    cmd.CommandText = "U pdate {文件协作表} Set 编辑者 = Null Where [_Identify] = " & e.DataRow("_Identify")
    If cmd.ExecuteNonQuery = 1 Then
        e.DataRow("编辑者") = Nothing
    End If
End If

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


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/2/5 10:19:00 [显示全部帖子]

在BeforeOpenFile事件之中:



'文件协作相关代码

If user.Group="管理员"  Then
Dim str_FileName As String =e.FileName
str_FileName=str_FileName.TrimStart("//")

Dim str_path="\\172.16.11.5\pm文件\test\" & str_FileName


Dim cmd As New SQLCommand
cmd.C
cmd.CommandText = "S elect 编辑者 From {文件协作表} Where [_Identify] = " & e.DataRow("_Identify")
Dim nm As String = cmd.ExecuteScalar

'msgbox(nm)
If nm>"" And  e.DataRow("编辑者") = User.Name Then '如果编辑者不为空 且 编辑者是当前用户,则退出此事件 
     e.Cancel=True 
     Return

Else If nm > "" And e.DataRow("编辑者")<>User.Name  Then     '如果查询的编辑者字段不为空,且编辑者字段不是当前用户
        
      MessageBox.show(nm & "正在编辑此行,你不能同时编辑!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
      e.Cancel=True    '禁止文件管理器打开附件
'Else If nm= ""  Then     
'        MessageBox.show("此行可能已经被删除,无法编辑!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
Else If nm = "" And e.DataRow.RowState <> DataRowState.Added     '如果等于当前编辑者的记录没有查询到 且 当前行不是新增行,则把当前编辑者插入进去
 
     Dim exp As String  = "编辑者 Is Null And [_Identify] = " & e.DataRow("_Identify")
     cmd.C
     cmd.CommandText = "U pdate {文件协作表} Set 编辑者 = '" & User.Name & "' Where " & exp

     If cmd.ExecuteNonQuery = 1 Then   '如果在数据库中字段成功写入编辑者
        e.DataRow("编辑者") = User.Name     '在显示的表中也改一下

     '以下为打开附件列中的附件
      If e.DataCol.Name = "附件" Then    '如果鼠标操作的是附件列
            If vars("ls").ContainsKey(e.DataRow("_identify")) Then      '如果vars("ls")字典包含  当前列的  序列号
               Vars("ls")(e.DataRow("_identify")) = system.Diagnostics.Process.Start(str_path)
            Else             '如果不包含
               Vars("ls").add(e.DataRow("_identify"),system.Diagnostics.Process.Start(str_path))
            End If   
            'msgbox(1) 
            e.Cancel = True '取消系统默认的打开文件操作,因为前面已经编码打开了       '成功也要取消打开文件,下面的失败也要取消,因为已经用代码打开了,不再需要文件管理器自动打开
      End If
     End If
 
End If

End If    '如果当前用户是管理员

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


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/2/5 10:23:00 [显示全部帖子]

不行

 回到顶部
总数 38 上一页 1 2 3 4 下一页