Foxtable(狐表)用户栏目专家坐堂 → [求助]+[分享]开发者删除了数据列和表达式列,怎么写代码和操作才不会影响正常使用和自动升级?


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

主题:[求助]+[分享]开发者删除了数据列和表达式列,怎么写代码和操作才不会影响正常使用和自动升级?

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[求助]+[分享]开发者删除了数据列和表达式列,怎么写代码和操作才不会影响正常使用和自动升级?  发帖心情 Post By:2017/6/29 15:21:00 [显示全部帖子]

      对于一个在用的项目,如果开发者删除了不用的数据列和表达式列,就会导致在用项目启动时出现错误并无法打开,也无法自动升级,必须等开发者发布项目后重新下载、安装项目。
      请问:有没有办法避免这种情况、自动完成升级?

解决办法:
1、删除列操作必须在没有客户登录的时间段进行;
2、删除列后必须马上发布项目;
3、参照6楼和7楼提供的相关代码。
[此贴子已经被作者于2017/7/1 9:42:52编辑过]

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/6/30 12:44:00 [显示全部帖子]


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

1、开发者先后删除了没用的税金合计(表达式列)、本年税金(数据列)、历年税金(数据列)。

2、客户端启动时出现上述错误信息,没法运行项目。

3、开发者发布项目,客户端启动时上述错误信息依旧,不执行自动升级(自编升级代码)。

4、客户端重新下载、安装项目,运行正常。

[此贴子已经被作者于2017/6/30 12:51:28编辑过]

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/6/30 21:54:00 [显示全部帖子]

谢谢甜版提供的链接。解决方法如下(红字为相关路径的公共变量):
1、因在beforeOpenProject事件中PublishDate为空值,所以,客户端须引入PublishDate.txt,存放PublishDate值作为备用。
2、项目发布按钮相关代码:因PublishDate只有在项目发布后才能获取真值,所以,包含PublishDate.txt的update1.zip和update2.zip不能通过Syscmd.Project.PublishProject生成(不要选中“发布后自动生成升级包到以下文件夹”选项),即发布项目按钮必须自己编码(调试通过):
Syscmd.Project.PublishProject()'发布项目
Dim s As String = dpath & "Publish\project\PublishDate.txt" '以下生成包含发布日期的文件
FileSys.WriteAllText(s,PublishDate,False, Encoding.Default)
s = dpath & "update.txt" '以下生成包含发布日期和开发版本日期的文件
FileSys.WriteAllText(s,PublishDate & "|" & applicationvertion,False, Encoding.Default)
Dim zip As New zipFile
Dim zFile As String = dpath & "update1.zip" '以下生成项目文件升级包
If FileSys.FileExists(zfile) Then
    FileSys.deletefile(zfile,2,2)
End If
zip.Create(zFile) '创建空文件
zip.AddFolder(dpath & "Publish\project")
zip.Close()
zFile = dpath & "update2.zip" '以下生成系统文件升级包
If FileSys.FileExists(zfile) Then
    FileSys.deletefile(zfile,2,2)
End If
zip.Create(zFile)
zip.AddFolder(dpath & "Publish")
zip.Close()
3、BeforeOpenProject相关代码(调试通过)
IP1 = "1.1.1.1" '内网
IP2 = "2.2.2.2" '外网
IPa = IP1 '初始采用值
ftpAccount = "123" '设置ftp登录用户名
ftppassword = "456" '设置ftp登录密码
'根据内网和外网登录时服务器地址的不同,选择正确IP
If Network.Ping(IP1) = False Then
    IPa = IP2
End If

'设置远程文件管理器的FTP1参数
ftp1 = new FTPClient
ftp1.Host = IPa
ftp1.Account = ftpaccount
ftp1.password = ftppassword
'ftp1.UTF8 = True

'判断是否需要自动更新
If e.file.EndsWith("foxdb") = false Then '非开发状态
    RemoteUpdate = True
    Dim s1 As Date = ftp1.GetFiletime(upath & "update.txt") '服务器上升级文件的日期时间
    Dim s2 As Date = FileSys.ReadAllText(rPath & "\publishdate.txt") '客户端文件的发布日期
    If s1 > s2 Then '如果较现在版本的日期时间新则下载并升级
        zdgx = True '自动更新(变量取首字母)标识
    End If
End If
4、BeforeLoadInnerTable事件代码
If zdgx=True Then
    e.cancel = True
Else
    e.Filter = "[_Identify] Is Null"
End If
5、BeforeLoadOuterTable事件代码
If zdgx = True Then
    e.cancel = True
else

    e.SelectString = "Select * Fro m {" & e.DataTableName & "} Where [_Identify] Is Null"

End If

[此贴子已经被作者于2018/7/19 13:24:20编辑过]

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/6/30 21:54:00 [显示全部帖子]

6、AfterOpenProject升级代码(调试通过)
If zdgx = True then
    Dim s2 As String = rpath & "\update.txt" '准备保存在客户端的升级文件日期和版本信息
    ftp1.download(upath & "update.txt",s2,False) '静默下载并另存
    Dim s3 As String = filesys.ReadAllText(s2,Encoding.Default)
    Dim s4() As String = s3.Split("|")
    Dim newdate As Date = s4(1)
    Dim oldDate As Date = filesys.ReadAllText(apath & "\bin\version.txt",Encoding.Default) '在用的版本日期
    Dim zip As New zipFile
    Dim s As String
    If olddate = newdate Then '属于小版本升级
        s2 = rpath & "\update1.zip" '升级文件
        ftp1.download(upath & "update1.zip",s2,False)
        zip.Open(s2) '打开升级文件
        zip.Extractall(rpath) '全部解压到客户端运行文件夹
        zip.Close() '关闭升级文件
        FileSys.deleteFile(s2,2,2) '删除升级文件
        s = rpath & "\update.bat" ’建立升级批命令文件
        If filesys.FileExists(s) Then
            filesys.DeleteFile(s)
        End If
        filesys.WriteAllText(s,"@echo off" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"taskkill /f /im 即时通讯系统.exe" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"echo Wscript.Sleep Wscript.Arguments(0) * 1000>Delay.vbs" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"Delay.vbs 3" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"del Delay.vbs" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"start /d " & path0 & pname & "\程序文件 /max " & ename & vbcrlf,True,Encoding.Default) 'path0为盘符根目录,pname为项目名称,ename为项目可执行文件
        filesys.WriteAllText(s,"del " & s & vbcrlf,True,Encoding.Default)
        Dim Proc As New Process '定义一个新的Process
        Proc.File = s '指定要打开的文件
        Proc.Verb = "Open" '指定动作
        Proc.Start()
        proc.WaitForExit
    Else
        If filesys.DirectoryExists(npath) = False Then ’npath为解压时用到的临时存放升级文件的文件夹
            filesys.CreateDirectory(npath)
        End If
        s2 = npath & "\update2.zip" '重大版本升级文件
        ftp1.download(upath & "update2.zip",s2,False) '静默下载并另存
        zip.Open(s2)
        zip.ExtractAll(npath)
        zip.Close()
        FileSys.deleteFile(s2,2,2)
        s = rpath & "\update.bat" ’建立升级批命令文件
        If filesys.FileExists(s) Then
            filesys.DeleteFile(s)
        End If
        filesys.WriteAllText(s,"@echo off" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"taskkill /f /im 即时通讯系统.exe" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"echo Wscript.Sleep Wscript.Arguments(0) * 1000>Delay.vbs" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"Delay.vbs 3" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"xcopy " & npath & "*.* " & path0 & pname & "\程序文件\ /y /q /s" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"Delay.vbs 3" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"rd /q /s " & npath & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"del Delay.vbs" & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"start /d " & path0 & pname & "\程序文件 /max " & ename & vbcrlf,True,Encoding.Default)
        filesys.WriteAllText(s,"del " & s & vbcrlf,True,Encoding.Default)
        Dim Proc As New Process '定义一个新的Process
        Proc.File = s '指定要打开的文件
        Proc.Verb = "Open" '指定动作
        Proc.Start()
        proc.WaitForExit
    End If
Else
    Forms("用户登录").Open()
End If

[此贴子已经被作者于2017/7/1 9:16:22编辑过]

 回到顶部