以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  为什么启动程序时会报 某列不存在?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=122167)

--  作者:ycwk
--  发布时间:2018/7/20 9:24:00
--  为什么启动程序时会报 某列不存在?
为什么会报下面这个错?

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




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



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


--  作者:有点甜
--  发布时间:2018/7/20 9:27:00
--  

增加列的代码为什么不写到afterOpenProject事件去?

 

有可能启动的时候没有触发增加列代码,但执行了筛选代码。


--  作者:ycwk
--  发布时间:2018/7/20 9:56:00
--  
换到afteropenProject里面去了,还是报错, 但管理员工号登录不报错

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

授权也打开了,虽然报错的这个工号 没有实际使用到这个表,但也加载了。

--  作者:有点甜
--  发布时间:2018/7/20 10:07:00
--  

1、贴出你afterOpenProject写的代码;

 

2、如果自己不会调试,做个实例发上来测试。


--  作者:ycwk
--  发布时间:2018/7/20 10:15:00
--  
If Syscmd.Project.Update(False,False) = False Then \'如果没有升级



BaseMainForm.Text = "信息化项目管理系统"    \'让程序窗体最上面不显示成  foxtable 信息化项目管理系统

MyTimers("扫描任务跟踪表中待提醒任务").Enabled=False  \'暂停计划
Tables("短信通知回执表").Sort = "_Identify"     \'把短信通知回执表排序
Tables("任务跟踪").Sort="任务_责任人"
Tables("任务跟踪.子任务跟踪").AutoSizeCols      \'自动设置所有列的宽度
Tables("协作任务跟踪表").Sort="任务_责任人"
Tables("问题或需求跟踪表").Sort="ID"
Tables("三甲条款_条款分类表").Sort="条款号"
Tables("三甲条款_条款明细表").Sort="条款号,等级"
Tables("服务器管理表").Sort="计算机中心管理员"
Tables("电脑终端管理表").Sort="所在楼,所在科室,所在房间 DESC"
Tables("其它终端管理表").Sort="设备类型,所在楼,所在科室,所在房间"
Tables("IP汇总表").Sort="设备类型,所在楼,所在科室,所在房间 DESC"



StatusBar.Message2= "当前操作员:" &  user.Name           \'状态栏左侧第二处信息


\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'

If user.Group<>"管理员"  Then 
For Each tb As Table In Tables     \'tb轮询每一张表
      Dim drs As List(of DataRow)  =DataTables("授权表").sqlselect("分组名=  \'" & user.group & "\'  And 表名=  \'" & tb.name & "\'"  )        \'找到分组名=当前操作员分组,且表名是当前轮询的表名那行   
      
          If drs.Count > 0 Then     \'如果找到分组名=当前操作员分组  ,且表名是当前轮询表的行
            For Each dr As DataRow In drs 
          \'  MessageBox.show(user.group & tb.name & "找到该行")
                If dr.IsNull("列名") Then               \'如果某个分组名,只有表名,而列名为空  ,则通过下面的语句,将相应的表置为  可不可见,可不可编辑   
                   Tables(dr("表名")).Visible = Not dr("不可见")
                   Tables(dr("表名")).AllowEdit = Not dr("不可编辑")
                Else                                      \'否则(有表名,也有列名,则通过下面的语句,将相应的表置为  可不可见,可不可编辑)          
                   Tables(dr("表名")).Cols(dr("列名")).Visible = Not dr("不可见")
                   Tables(dr("表名")).Cols(dr("列名")).AllowEdit = Not dr("不可编辑") 
                End If
            Next
           Else      \'如果没有找到该表表名,则该表置为不可见,也不可编辑
                    \' MessageBox.show( user.group & tb.name & "没找到该行")  
              Tables(tb.Name).Visible = False
              Tables(tb.Name).AllowEdit = False 
          End If 
     
Next 

End If



\'If CurrentTable.Name="任务跟踪" Then        \'加载任务后,为"任务跟踪表" 增加一行临时 bool列.
\'增加一列临时列   提醒标志
    If DataTables("任务跟踪").DataCols.Contains("提醒标志")=False Then
        DataTables("任务跟踪").DataCols.Add("提醒标志",Gettype(Boolean))
    End If
\'End If

\'If CurrentTable.Name="协作任务跟踪表" Then        \'加载任务后,为"协作任务跟踪表" 增加一行临时 bool列.
\'增加一列临时列   提醒标志
    If DataTables("协作任务跟踪表").DataCols.Contains("提醒标志")=False Then
        DataTables("协作任务跟踪表").DataCols.Add("提醒标志",Gettype(Boolean))
    End If
\'End If


\'为文件协作表增加一列保存按钮
If DataTables("文件协作表").DataCols.Contains("上传") = False Then
    DataTables("文件协作表").DataCols.Add("上传",Gettype(String),1)
    Tables("文件协作表").Cols("上传").Width = 35
    Tables("文件协作表").Cols("上传").Move(5)
End If


If DataTables("电脑终端管理表").DataCols.Contains("内网_Ping结果")=False Then
        DataTables("电脑终端管理表").DataCols.Add("内网_Ping结果",Gettype(Boolean))
        Tables("电脑终端管理表").Cols("内网_Ping结果").Width = 65
        Tables("电脑终端管理表").Cols("内网_Ping结果").Move(14)
End If


If DataTables("电脑终端管理表").DataCols.Contains("外网_Ping结果")=False Then
        DataTables("电脑终端管理表").DataCols.Add("外网_Ping结果",Gettype(Boolean))
        Tables("电脑终端管理表").Cols("外网_Ping结果").Width = 65
        Tables("电脑终端管理表").Cols("外网_Ping结果").Move(22)
    
End If


\'解锁非正常退出时被锁定的记录
DataTables("文件协作表").ReplaceFor("编辑者",Nothing,"编辑者 = \'" & User.Name & "\'")
DataTables("文件协作表").Save()
\'Tables("文件协作表").Cols.Remove("编辑者")       \'移除编辑者列,避免用户直接修改此列


Vars("ls") = new Dictionary(of String, object)


End If

--  作者:有点甜
--  发布时间:2018/7/20 10:19:00
--  

这种代码,写到前面去,比如第一行

 

    If DataTables("任务跟踪").DataCols.Contains("提醒标志")=False Then
        DataTables("任务跟踪").DataCols.Add("提醒标志",Gettype(Boolean))
    End If

 


--  作者:ycwk
--  发布时间:2018/7/20 14:48:00
--  
现在把升级的代码放在这里,每次要登录进去了才会升级,如果想让用户在双击程序后,进行登录界面之前就升级,是否可以把下面这段升级的代码放在beforeopenproject里面?




If Syscmd.Project.Update(False,False) = False Then \'如果没有升级

   BaseMainForm.Text = "信息化项目管理系统"    \'让程序窗体最上面不显示成  foxtable 信息化项目管理系统
   MyTimers("扫描任务跟踪表中待提醒任务").Enabled=False  \'暂停计划
   Tables("短信通知回执表").Sort = "_Identify"     \'把短信通知回执表排序
   Tables("任务跟踪").Sort="任务_责任人"
   Tables("任务跟踪.子任务跟踪").AutoSizeCols      \'自动设置所有列的宽度
   Tables("协作任务跟踪表").Sort="任务_责任人"
   Tables("问题或需求跟踪表").Sort="ID"
   Tables("三甲条款_条款分类表").Sort="条款号"
   Tables("三甲条款_条款明细表").Sort="条款号,等级"
   Tables("服务器管理表").Sort="计算机中心管理员"
   Tables("电脑终端管理表").Sort="所在楼,所在科室,所在房间 DESC"
   Tables("其它终端管理表").Sort="设备类型,所在楼,所在科室,所在房间"
   Tables("IP汇总表").Sort="设备类型,所在楼,所在科室,所在房间 DESC"


  StatusBar.Message2= "当前操作员:" &  user.Name           \'状态栏左侧第二处信息

\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'
  If user.Group<>"管理员"  Then 
    For Each tb As Table In Tables     \'tb轮询每一张表
      Dim drs As List(of DataRow)  =DataTables("授权表").sqlselect("分组名=  \'" & user.group & "\'  And 表名=  \'" & tb.name & "\'"  )        \'找到分组名=当前操作员分组,且表名是当前轮询的表名那行   
      
          If drs.Count > 0 Then     \'如果找到分组名=当前操作员分组  ,且表名是当前轮询表的行
            For Each dr As DataRow In drs 
          \'  MessageBox.show(user.group & tb.name & "找到该行")
                If dr.IsNull("列名") Then               \'如果某个分组名,只有表名,而列名为空  ,则通过下面的语句,将相应的表置为  可不可见,可不可编辑   
                   Tables(dr("表名")).Visible = Not dr("不可见")
                   Tables(dr("表名")).AllowEdit = Not dr("不可编辑")
                Else                                      \'否则(有表名,也有列名,则通过下面的语句,将相应的表置为  可不可见,可不可编辑)          
                   Tables(dr("表名")).Cols(dr("列名")).Visible = Not dr("不可见")
                   Tables(dr("表名")).Cols(dr("列名")).AllowEdit = Not dr("不可编辑") 
                End If
            Next
           Else      \'如果没有找到该表表名,则该表置为不可见,也不可编辑
                    \' MessageBox.show( user.group & tb.name & "没找到该行")  
              Tables(tb.Name).Visible = False
              Tables(tb.Name).AllowEdit = False 
          End If   
    Next 
  End If



End If

--  作者:有点甜
--  发布时间:2018/7/20 17:05:00
--  
升级代码,只能写到afterOpenProject,不能写到beforeOpenProject,这个没办法。