以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  对于造型说明无效的字符值  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=161243)

--  作者:newsun2k
--  发布时间:2021/3/10 16:52:00
--  对于造型说明无效的字符值
如题,报上述错误。
查了一下论坛,知道是日期格式的问题。
那有什么办法在代码里面怎么处理一下,避免这种错误。
老要用户改日期,好像也不太友好。

--  作者:有点蓝
--  发布时间:2021/3/10 16:57:00
--  
参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=93429
--  作者:newsun2k
--  发布时间:2021/6/2 16:06:00
--  
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




代码写入项目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

--  作者:newsun2k
--  发布时间:2021/6/2 16:07:00
--  
大哥,两个代码分别放在before open 或after open
系统里面也设置了,就是不行啊
怎么办?

--  作者:有点蓝
--  发布时间:2021/6/2 16:08:00
--  
那就不是系统日期格式的问题了。应该是导入了不合法的日期数据
--  作者:newsun2k
--  发布时间:2021/6/9 17:43:00
--  
在beforesaverow中,加下面的代码,总算解决了。
效率下降了很多。头疼。

For Each dc As DataCol In e.DataTable.DataCols
    If dc.IsDate Then
        strD = e.DataRow(dc.name)        
        If Date.TryParse(strD,d) Then \'如果转换成功
            e.DataRow(dc.name) = format(d,"yyyy-MM-dd")
        Else
            e.DataRow(dc.name) = Nothing
        End If
    End If
Next