Foxtable(狐表)用户栏目专家坐堂 → 升级时的问题


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

主题:升级时的问题

美女呀,离线,留言给我吧!
zeta_123
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:58 积分:556 威望:0 精华:0 注册:2014/4/14 15:01:00
升级时的问题  发帖心情 Post By:2015/3/25 9:54:00 [只看该作者]

各位老师:我用的SQL数据库,建了两个,一个做测试升级用,一个是正式客户端用的。之前都没问题,在测试里做好了,改一下数据库链接字符串就好了(过去只有代码改动,表结构并没有改动)。但这次在测试版数据库里更改了表结构(删除列或增加列),之后我相应的在正式版数据库里也增加或删除了相应列,但是在客户端运行时,提示我,找不到该表中的某个列,后来我又把提示少的这个列给增加到数据库(之前改列名了),然后才提示我:升级成功,请重新打开程序。之后一切正常,新做的功能也都加上了。

下面是afteropenprojiect 中的代码,红色部分“纪要概述”过去叫做“纪要内容”  ,提示的错误信息就是:会议纪要表中不存在“会议内容“列,但是在正式版数据库中是有的。

 For Each t As RibbonMenu.Tab In RibbonTabs

t.Visible =False

Next

basemainform.controls("c1ribbon1").visible = False

TableCaptionVisible = not TableCaptionVisible

ApplicationMenu.visible= False '用于关闭左上方的大按钮

 

 

DataTables("多任务临时表").DataCols.Add("状态", Gettype(String))'在多任务临时表增加临时列 


With Tables("会议纪要表") '关闭列窗口

    .Cols("纪要概述").CloseWindow()

End With

 

DataTables("任务表").ReplaceFor("编辑者",Nothing,"编辑者 = '" & _name & "'")

DataTables("任务表").Save()

Tables("任务表").Cols.Remove("编辑者") '移除编辑者列,避免用户直接修改此列

 

'解锁非正常退出时被锁定的编辑者记录(独占式)

DataTables("多任务临时表").ReplaceFor("编辑者",Nothing,"编辑者 = '" & _name & "'")

DataTables("多任务临时表").Save()

Tables("多任务临时表").Cols.Remove("编辑者") '移除编辑者列,避免用户直接修改此列

 

'解锁非正常退出时被锁定的编辑者记录(独占式)

DataTables("会议纪要表").ReplaceFor("编辑者",Nothing,"编辑者 = '" & _name & "'")

DataTables("会议纪要表").Save()

Tables("会议纪要表").Cols.Remove("编辑者")  '移除编辑者列,避免用户直接修改此列

 

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

 Forms("用户登录").Open()

End If


[此贴子已经被作者于2015/3/25 9:54:12编辑过]

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


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

1、你的更新代码写在之前还是之后?必须写在前面

 

2、理一下顺序:你客户端打开的时候,会先执行你afteropenproject的代码,这个时候,它并没有知道数据表发生了变化,自然会报错,然后下面的代码不再执行

[此贴子已经被作者于2015/3/25 10:12:04编辑过]

 回到顶部
美女呀,离线,留言给我吧!
zeta_123
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:58 积分:556 威望:0 精华:0 注册:2014/4/14 15:01:00
  发帖心情 Post By:2015/3/25 15:08:00 [只看该作者]

我在项目属性里设置了在线升级路径,项目发布日期,没有写其他更新代码,老师的意思是我把后三句代码提的前三行吗?

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


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

以下是引用zeta_123在2015/3/25 15:08:00的发言:
我在项目属性里设置了在线升级路径,项目发布日期,没有写其他更新代码,老师的意思是我把后三句代码提的前三行吗?

 

差不多就是这个意思。


 回到顶部
美女呀,离线,留言给我吧!
zeta_123
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:58 积分:556 威望:0 精华:0 注册:2014/4/14 15:01:00
  发帖心情 Post By:2015/3/25 15:19:00 [只看该作者]

我上午试了,把后三句代码加到最上面,还是那个情况,除非我把那一列字段在数据库里再加上,不报错。问题是以后还会再有其他改动啊图片点击可在新窗口打开查看


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/3/25 15:21:00 [只看该作者]

没有办法,因为表加载发生在ALterOpenProject事件之前.  此时还没更新,加载表发现数据库这列没有了.就肯定会报错.

你升级只能增加列,不能减少列,  实在要减少列, 要确保所有客户端都完全升级了.此时再删除多余的列.

 回到顶部
美女呀,离线,留言给我吧!
zeta_123
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:58 积分:556 威望:0 精华:0 注册:2014/4/14 15:01:00
  发帖心情 Post By:2015/3/25 15:28:00 [只看该作者]

我明白bin说的了,其实我并没有删除那个列,我给他把列名给改了而已,是不是即便这样,也跟bin说的原理是一样的?

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/3/25 15:29:00 [只看该作者]

没错.

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/3/25 15:30:00 [只看该作者]

除非你使用的是动态加载表的方式,一开始不加载这些表,那就可以随意修改删除.

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2015/3/25 15:33:00 [只看该作者]

以下是引用zeta_123在2015/3/25 15:19:00的发言:

我上午试了,把后三句代码加到最上面,还是那个情况,除非我把那一列字段在数据库里再加上,不报错。问题是以后还会再有其他改动啊图片点击可在新窗口打开查看

 

升级成功后Return,不要执行后续代码,这样就不会报错了:

 

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

     Forms("用户登录").Open()

Else

   return

End If

 

For Each t As RibbonMenu.Tab In RibbonTabs

    t.Visible =False

Next

basemainform.controls("c1ribbon1").visible = False

TableCaptionVisible = not TableCaptionVisible

ApplicationMenu.visible= False '用于关闭左上方的大按钮


DataTables("多任务临时表").DataCols.Add("状态", Gettype(String))'在多任务临时表增加临时列 


With Tables("会议纪要表") '关闭列窗口

    .Cols("纪要概述").CloseWindow()

End With

 

DataTables("任务表").ReplaceFor("编辑者",Nothing,"编辑者 = '" & _name & "'")

DataTables("任务表").Save()

Tables("任务表").Cols.Remove("编辑者") '移除编辑者列,避免用户直接修改此列

 

'解锁非正常退出时被锁定的编辑者记录(独占式)

DataTables("多任务临时表").ReplaceFor("编辑者",Nothing,"编辑者 = '" & _name & "'")

DataTables("多任务临时表").Save()

Tables("多任务临时表").Cols.Remove("编辑者") '移除编辑者列,避免用户直接修改此列


'解锁非正常退出时被锁定的编辑者记录(独占式)

DataTables("会议纪要表").ReplaceFor("编辑者",Nothing,"编辑者 = '" & _name & "'")

DataTables("会议纪要表").Save()

Tables("会议纪要表").Cols.Remove("编辑者")  '移除编辑者列,避免用户直接修改此列

[此贴子已经被作者于2015/3/25 15:36:17编辑过]

 回到顶部