Foxtable(狐表)用户栏目专家坐堂 → 为什么启动程序时会报 某列不存在?


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

主题:为什么启动程序时会报 某列不存在?

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


加好友 发短信
等级:六尾狐 帖子:1220 积分:8483 威望:0 精华:0 注册:2016/2/2 21:52:00
为什么启动程序时会报 某列不存在?  发帖心情 Post By:2018/7/20 9:24:00 [只看该作者]

为什么会报下面这个错?

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




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



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


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/20 9:27:00 [只看该作者]

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

 

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


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


加好友 发短信
等级:六尾狐 帖子:1220 积分:8483 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/7/20 9:56:00 [只看该作者]

换到afteropenProject里面去了,还是报错, 但管理员工号登录不报错

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

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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/20 10:07:00 [只看该作者]

1、贴出你afterOpenProject写的代码;

 

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


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


加好友 发短信
等级:六尾狐 帖子:1220 积分:8483 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By: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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/20 10:19:00 [只看该作者]

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

 

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

 


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


加好友 发短信
等级:六尾狐 帖子:1220 积分:8483 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By: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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/20 17:05:00 [只看该作者]

升级代码,只能写到afterOpenProject,不能写到beforeOpenProject,这个没办法。

 回到顶部