Foxtable(狐表)用户栏目专家坐堂 → 代码疑问


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

主题:代码疑问

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
代码疑问  发帖心情 Post By: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

 

求解,,杂回事呢?

 


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


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40550 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2010/10/15 10:13:00 [只看该作者]

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

 

If b1 = b2 Then

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

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


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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By: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  判断不成功

 

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


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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By:2010/10/15 10:16:00 [只看该作者]

谢谢,程版

原来如此啊


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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40550 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/10/15 12:24:00 [只看该作者]

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

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

 


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By: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)就可以重新打开更新后的项目。


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


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40550 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2010/10/15 13:54:00 [只看该作者]

以下是引用czy在2010-10-15 12:33:00的发言:

 

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

 

 

哦,我还没有深入研究!


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/10/15 14:47:00 [只看该作者]

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

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

 

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


 回到顶部
总数 23 1 2 3 下一页