Foxtable(狐表)用户栏目专家坐堂 → 自定义函数第一次调用出错以后的就正常了


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

主题:自定义函数第一次调用出错以后的就正常了

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


加好友 发短信
等级:童狐 帖子:215 积分:1886 威望:0 精华:0 注册:2017/1/8 15:53:00
自定义函数第一次调用出错以后的就正常了  发帖心情 Post By:2017/10/12 21:07:00 [只看该作者]

自定义函数权限判断   (他只在第一次调用的时候弹出这个错误窗口是为什么呢? 下面就是自定义函数的全部代码)
调用的目标发生了异常。

System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.Runtime.InteropServices.ExternalException: 所请求的剪贴板操作失败。
   在 System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr)
   在 System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay)
   在 System.Windows.Forms.Clipboard.SetText(String text, TextDataFormat format)
   在 System.Windows.Forms.Clipboard.SetText(String text)
   在 UserCode.AJMi5keGe3em3rR4X(Object[] Args)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 Foxtable.UserFunctions.Execute(String Name, Object[] Args)






下面的内容是自定义函数
'Args(0) TmpModuleID   '传入模块名称
'Args(1) QX   '传入需要判断的权限(读取,编辑,删除,增加,分享...等等)
'可传入的参数有,addon   assign     audit  back  deleteon  editon  printon  readon  Share
'               插件    指派分配   审计   返回  删除?     编辑?   打印?    只读?   分享
'---------------------------------------下面是 人员ID 和部门ID  的判断参数(判断是否本人是否本部门)
'Args(2) SalesManID2   '传入销售员ID(判断参数)   '修改数据的时候才传入这个参数作为判断,(用来判断以前的数据的人员是不是本人)
'Args(3) DepartmentID2  '传入部门ID(判断参数)   '用作数据对比的部门ID(旧数据中的)

Dim ModuleID2 As String = Args(0)
Dim QX As String = Args(1)
Dim SalesManID2 As String =  Args(2)
Dim DepartmentID2 As String = Args(3)


Dim cmd As New SQLCommand
cmd.C

cmd.CommandText = "Select " & QX & " f rom {QX_roleDetail} where RoleID = '" & TmpRoleID & "' And ModuleNO = '" & ModuleID2 & "'"


Dim Res As  String = cmd.ExecuteScalar

Select Case Res
    Case "0"
        Return("无权限")  '返回
    Case "1"
        If  SalesManID2 <> "" Then  '销售员ID 如果不等于是空
            If SalesManID2 <> TmpUserID Then  '销售员ID 不等于用户ID
                Return("无权限")
            End If
        End If
    Case "2"
        If DepartmentID2 <> "" Then '如果部门本表ID 不等于空
            If DepartmentID2 <> TmpDepartmentID Then  '如果部门本表ID 不等于 全局变量的部门ID
                Return("无权限")
            End If
        End If
    Case "3"
        ' 这个判断是是不是本部门的,如果不是就不能修改
        If TmpDepartmentID.SubString(0,TmpDepartmentID.length-2)  <> DepartmentID2.SubString(0,TmpDepartmentID.length-2) Then
            Return("无权限")
        End If
    Case "4"
        ' 如果  8866.substring(0.2)   不等于  887766.substring(0,2)
        If DepartmentID2.SubString(0,2) <> TmpDepartmentID.SubString(0,2) Then '同上 (主要是判断相等就能编辑)
            Return("无权限")
        End If
    Case Else
        Return Nothing
        
End Select
Return Nothing


[此贴子已经被作者于2017/10/12 21:08:02编辑过]

 回到顶部
帅哥,在线噢!
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:42968 积分:215921 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/12 22:36:00 [只看该作者]

调用函数之前,有调用剪切板的代码?Clipboard

 

做个例子看看。


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


加好友 发短信
等级:童狐 帖子:215 积分:1886 威望:0 精华:0 注册:2017/1/8 15:53:00
  发帖心情 Post By:2017/10/13 11:20:00 [只看该作者]

以下是引用有点甜在2017/10/12 22:36:00的发言:

调用函数之前,有调用 ?Clipboard

 

做个例子看看。



cmd.CommandText = "Select " & QX & " fr om {QX_roleDetail} where RoleID = '" & TmpRoleID & "' And ModuleNO = '" & ModuleID2 & "'"

ClipBoard.SetText(cmd.CommandText)


Dim Res As  String = cmd.ExecuteScalar

上面的代码   我删除了调用 剪切板 这段


 回到顶部
帅哥,在线噢!
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:42968 积分:215921 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/13 11:25:00 [只看该作者]

1、bin文件夹删除,重新测试。

 

2、加入msgbox,定位出错位置。


 回到顶部