以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]+[分享]开发者删除了数据列和表达式列,怎么写代码和操作才不会影响正常使用和自动升级? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=103041) |
-- 作者:shenyl0211 -- 发布时间:2017/6/29 15:21:00 -- [求助]+[分享]开发者删除了数据列和表达式列,怎么写代码和操作才不会影响正常使用和自动升级? 对于一个在用的项目,如果开发者删除了不用的数据列和表达式列,就会导致在用项目启动时出现错误并无法打开,也无法自动升级,必须等开发者发布项目后重新下载、安装项目。 请问:有没有办法避免这种情况、自动完成升级? 解决办法: 1、删除列操作必须在没有客户登录的时间段进行; 2、删除列后必须马上发布项目; 3、参照6楼和7楼提供的相关代码。
[此贴子已经被作者于2017/7/1 9:42:52编辑过]
|
-- 作者:有点色 -- 发布时间:2017/6/29 15:41:00 -- 1、表达式列?那个是存放在项目里面的,不存放在数据库,你删除怎么会影响?
2、打开后出错提示什么?
3、默认的升级,是先连接数据库、加载表之后,才能升级的。建议你改成自己做的升级吧,默认的升级真不好用。 |
-- 作者:shenyl0211 -- 发布时间:2017/6/30 12:44:00 -- 1、开发者先后删除了没用的税金合计(表达式列)、本年税金(数据列)、历年税金(数据列)。 2、客户端启动时出现上述错误信息,没法运行项目。 3、开发者发布项目,客户端启动时上述错误信息依旧,不执行自动升级(自编升级代码)。 4、客户端重新下载、安装项目,运行正常。 [此贴子已经被作者于2017/6/30 12:51:28编辑过]
|
-- 作者:有点蓝 -- 发布时间:2017/6/30 14:29:00 -- 如果是外部表,确实有这个问题。 |
-- 作者:有点甜 -- 发布时间:2017/6/30 15:15:00 -- 1、你删除的是数据列,而不是表达式列,肯定有问题的啊。
2、你删除数据列,数据库就没有对应的列,而你的客户端还有税金合计列,那自然会报错。
3、如果修改了表结构,客户端都是会报错的。
4、如果想打开项目加载表之前升级,这个升级需要自行编写代码实现。
5、如果想绕过去也行,beforeOpenProject事件写代码检测是否要升级,如果要升级,就不加载表打开,如
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=100315&skin=0
|
-- 作者:shenyl0211 -- 发布时间: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 -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2017/6/30 22:26:00 -- 一句就行 |
-- 作者:tongliaozyr -- 发布时间:2017/7/1 10:06:00 -- 好 |
-- 作者:zhangjian222200 -- 发布时间:2017/9/20 17:54:00 -- mark |