Foxtable(狐表)用户栏目专家坐堂 → [分享]再谈系统日期格式冲突


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

主题:[分享]再谈系统日期格式冲突

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


加好友 发短信
等级:六尾狐 帖子:1249 积分:9474 威望:0 精华:0 注册:2013/5/12 9:22:00
[分享]再谈系统日期格式冲突  发帖心情 Post By:2016/11/28 21:45:00 [显示全部帖子]

晚上看以前的Foxtable笔记时,发现以前学习时,已记录了一个如何修正系统日期的方法,代码更简捷:


'代码写入项目BeforeOpenProject事件中
Dim d As Date = Date.Today
Dim s As String = CStr(d)
Dim l As Integer = s.Length
If l > 10 Then '判断系统日期是否符合标准
    Registry.SetValue("HKEY_CURRENT_USER\Control Panel\International","sShortDate","yyyy-MM-dd")

    e.Cancel = True
    e.HideSplashForm = True
    MessageBox.Show("程序将自动关闭,以校对系统日期格式!" & vbcrlf & "而后请重新启动程序","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Syscmd.Project.Exit()
End If

比下面的:1.代码简捷;2.不用设置全局代码3.等效.


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


加好友 发短信
等级:六尾狐 帖子:1249 积分:9474 威望:0 精华:0 注册:2013/5/12 9:22:00
回复:(有点蓝)win10测试可以,长日期可以改为Regis...  发帖心情 Post By:2016/11/28 22:45:00 [显示全部帖子]

感谢"有点蓝"大师的补充,这下就完美了.我是在Win7下测试通过的.

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


加好友 发短信
等级:六尾狐 帖子:1249 积分:9474 威望:0 精华:0 注册:2013/5/12 9:22:00
回复:(逛逛)这个和狐表应该没啥关系。我只想建议,...  发帖心情 Post By:2016/11/29 12:22:00 [显示全部帖子]

可我的BeforeLoadInnerTable事件设置了只加载指定日期的数据,若操作系统的日期格式不是标准格式,按你的代码还是报错!

图片点击可在新窗口打开查看此主题相关图片如下:beforeloadinnertable14.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:beforeloadinnertable13.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:六尾狐 帖子:1249 积分:9474 威望:0 精华:0 注册:2013/5/12 9:22:00
回复:(逛逛)定义一个变量,在出错的事件最上面,检...  发帖心情 Post By:2016/11/29 15:02:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:beforeloadinnertable15.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:beforeloadinnertable13.png
图片点击可在新窗口打开查看

另贴出代码BeforeLoadInnerTable:

msgbox(Date.Today)
Vars.Add("ddd",Gettype(Boolean),False)
If Vars("ddd") = False Then
    Dim cd As System.Globalization.DateTimeFormatInfo = System.Globalization.DateTimeFormatInfo.CurrentInfo
    Dim DateInfo As System.Reflection.FieldInfo = cd.Gettype.GetField("generalLongTimePattern", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)  
    If  DateInfo IsNot Nothing Then
        DateInfo.SetValue(cd, "yyyy-MM-dd HH:mm:ss")
    End If
    Vars("ddd") = True
End If
msgbox(Date.Today)
'加载指定日期内的数据
Select Case e.DataTableName
    Case "hc","fybxd"
        e.Filter = "[rq] >=  #" & e.User.ExtendedValues("起始日期") & "# And [rq] <= #" & e.User.ExtendedValues("结束日期") & "#"
        'MessageBox.Show(CStr(e.User.ExtendedValues("起始日期")).Split(" ")(0) & "   " & CStr(e.User.ExtendedValues("结束日期")).Split(" ")(0))
        'MessageBox.Show(CDate(CStr(e.User.ExtendedValues("起始日期")).Split(" ")(0)) & "   " & CDate(CStr(e.User.ExtendedValues("结束日期")).Split(" ")(0)))
        'Return
    Case "bmwz"
        e.Filter = "[gmrq] >=  #" & e.User.ExtendedValues("起始日期") & "# And [gmrq] <= #" & e.User.ExtendedValues("结束日期") & "#"
    Case "bc"
        e.Filter = "[jhrq] >=  #" & e.User.ExtendedValues("起始日期") & "# And [jhrq] <= #" & e.User.ExtendedValues("结束日期") & "#"
    Case "劳务登记","交易明细"
        e.Filter = "[日期] >=  #" & e.User.ExtendedValues("起始日期") & "# And [日期] <= #" & e.User.ExtendedValues("结束日期") & "#"
End Select


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


加好友 发短信
等级:六尾狐 帖子:1249 积分:9474 威望:0 精华:0 注册:2013/5/12 9:22:00
  发帖心情 Post By:2016/11/29 16:17:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:beforeloadinnertable16.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:六尾狐 帖子:1249 积分:9474 威望:0 精华:0 注册:2013/5/12 9:22:00
  发帖心情 Post By:2016/11/29 16:35:00 [显示全部帖子]

BeforeOpenProject事件

msgbox(Date.Today)
Dim cd As System.Globalization.DateTimeFormatInfo = System.Globalization.DateTimeFormatInfo.CurrentInfo
cd.ShortDatePattern = "yyyy-MM-dd"
Dim DateInfo As System.Reflection.FieldInfo = cd.Gettype.GetField("generalLongTimePattern", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)
If  DateInfo IsNot Nothing Then
    DateInfo.SetValue(cd, "yyyy-MM-dd HH:mm:ss")
End If    
msgbox(Date.Today)

我个人认为这段代码放在BeforeOpenProject事件中较好:
1.打开项目前就校对好日期格式;
2.不用修改系统日期格式;
3.不用重启应用程序.
[此贴子已经被作者于2017/3/13 11:10:52编辑过]

 回到顶部