以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  代码疑问  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=8379)

--  作者:卟离卟弃
--  发布时间:2010/10/15 10:03:00
--  代码疑问

Dim b1 As String =Tables("客户端版本号")(0)("客户端版本号")
Dim b2 As String =Tables("服务器版本号")(0)("服务器版本号")
If b1 <> b2 Then
    MessageBox.Show("系统有更新,请更新文件!!", "提示")
    Forms("登陆窗口").Close()
    Forms("软件更新").OPEN()
End If

 

"服务器版本号" 与 "客户端版本号" 我改成一模一样的,也会 得到 MessageBox.Show("系统有更新,请更新文件!!", "提示") 这个提示,,改成不一样的,也会有提示.

If b1 <> b2 Then搞不懂这个怎么失效了.

 

版本号 列都是 字符型, 长度都是10

 

求解,,杂回事呢?

 


--  作者:程兴刚
--  发布时间:2010/10/15 10:13:00
--  

因为是字符型,您判断的是小于大于,应该是永远得不到结果,改成这样试试:

 

If b1 = b2 Then

    MessageBox.Show("您的系统已经是最新版本,暂时不需要更新!", "提示")

else
    MessageBox.Show("系统有更新,请更新文件!!", "提示")
    Forms("登陆窗口").Close()
    Forms("软件更新").OPEN()
End If


--  作者:卟离卟弃
--  发布时间:2010/10/15 10:13:00
--  

Tables("客户端版本号")(0)("客户端版本号")  在 客户端版本号 中输入 10 个 C
Tables("服务器版本号")(0)("服务器版本号")  在 服务器版本号 中输入 10 个 C
If b1 <> b2 Then  判断成功

 

 

Tables("客户端版本号")(0)("客户端版本号")  在 客户端版本号 中输入 1 个 C
Tables("服务器版本号")(0)("服务器版本号")  在 服务器版本号 中输入 1 个 C

If b1 <> b2 Then  判断不成功

 

不知道杂回事...求解...


--  作者:卟离卟弃
--  发布时间:2010/10/15 10:16:00
--  

谢谢,程版

原来如此啊


--  作者:卟离卟弃
--  发布时间:2010/10/15 10:37:00
--  

没有发布成系统时,测试登录窗口没有问题.

发布成系统后,又和一楼一模一样.......

 

登录窗口 AfterLoad 代码

 

Dim cmd As New SQLCommand
Dim dt As datatable
Dim cmb As WinForm.ComboBox = e.Form.Controls("UserName")
cmd.C
cmd.CommandText = "SELECT DISTINCT Name From {Users} where [设备清单]= \'Y\' "
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.Datarows
    cmb.Items.Add(dr("Name"))
Next
cmb.SelectedIndex = 0
Forms("登陆窗口").Controls("PassWord").Select() \'返回窗口中 TB1控件
Dim b1 As String =Tables("客户端版本号")(0)("客户端版本号")
Dim b2 As String =Tables("服务器版本号")(0)("服务器版本号")
If b1 = b2 Then
MessageBox.Show("不需要!!", "提示")
Else
    Dim Proc As New Process
    MessageBox.Show("系统有更新,请更新文件!!", "提示")
    Forms("登陆窗口").Close()
    Forms("软件更新").OPEN()
End If

[此贴子已经被作者于2010-10-15 10:38:50编辑过]

--  作者:程兴刚
--  发布时间:2010/10/15 12:06:00
--  

自动升级的几点思路,仅供大家讨论、参考:

  1、其实可以将版本号改为小数型,每次升级版本号不断递加,用SQL外部数据源,保存在您的服务器(开发者专用服务器,),用户对比这个版本号的大小来升级,这里先将系统命名为system.foxdb,以便后面的介绍。

  2、再另外设计一个隐藏系统主界面的.foxdb文件(这里暂且命名为update.foxdb),使update.foxdb文件仅仅显示一个模式窗口,update.foxdb文件的AfterOpenProject事件设置FTP下载指定文件的代码,通过代码下载最新的到system.foxdb到项目文件夹,覆盖旧版本的system.foxdb(如果有图片、图标等更新的附件,在这里通过代码一并下载,更新文件不能包含update.foxdb),下载完毕,通过代码关闭update.foxdb,在update.foxdb文件的BeforeCloseProject事件中设置代码提示更新完毕并打开system.foxdb文件。

 

    主要操作思路及原理:由于不关闭system.foxdb,直接通过system.foxdb来下载覆盖,会被windows操作系统禁止覆盖,因为system.foxdb文件是打开的,所以用了一个update.foxdb来切换,作一下升级过度,update.foxdb一次设计,不需要每次更新。所以,通过system.foxdb文件手动(或自动检测:判断网络及版本号)检测网络及新的版本并提示用户更新(当网络未链接时,自动更新方式不需要提示更新),得到确认后,打开update.foxdb并关闭system.foxdb,在update.foxdb进行自动下载、覆盖完毕以后,提示更新完毕,再通过代码先打开system.foxdb并自动关闭update.foxdb,让整个升级过程完全自动进行。

 

     由于本人暂时没有精力研究,仅做纸上谈兵,理论上应该可行(曾经用易表做的工程造价管理系统,就是按此原理进行本地数据库更新),供大家讨论参考。

[此贴子已经被作者于2010-10-15 12:14:03编辑过]

--  作者:czy
--  发布时间:2010/10/15 12:24:00
--  

楼主的问题好象有点无厘头了,字符型用<>做比较是可行的,测试结果也表明是没问题的,可楼主就是不行。

发布前后发布后又不一样的结果,这让人摸不着头脑了。

 


--  作者:czy
--  发布时间:2010/10/15 12:33:00
--  
以下是引用程兴刚在2010-10-15 12:06:00的发言:

 

    主要操作思路及原理:由于不关闭system.foxdb,直接通过system.foxdb来下载覆盖,会被windows操作系统禁止覆盖,因为system.foxdb文件是打开的,所以用了一个update.foxdb来切换

 

下载完成后用CopyFile进行复制并重命名打开的项目名称是可以覆盖的,升级完成后只需syscmd.Project.Open(ProjectFile)就可以重新打开更新后的项目。


--  作者:程兴刚
--  发布时间:2010/10/15 13:54:00
--  
以下是引用czy在2010-10-15 12:33:00的发言:

 

下载完成后用CopyFile进行复制并重命名打开的项目名称是可以覆盖的,升级完成后只需syscmd.Project.Open(ProjectFile)就可以重新打开更新后的项目。

 

 

哦,我还没有深入研究!


--  作者:czy
--  发布时间:2010/10/15 14:47:00
--  

如果是sql数据源,我觉得按下面的步骤就可以了。

假设在原项目中进行升级:

 

\'判断是否可以升级
\'获取下载文件大小,将值保存到变量中
DownloadFile \'下载更新文件到指定目录
\'获取刚下载的文件的大小,将值保存到变量中
\'比较服务器文件和已下载的文件大小是否一致(如果不一致说明下载中出错)
CopyFile \'复制刚下载的文件,并重命名覆盖原项目
DeleteFile \'删除下载的文件
syscmd.Project.Open(ProjectFile) \'重启项目