以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  11.28商业版  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=30385)

--  作者:lsf5138
--  发布时间:2013/3/27 8:59:00
--  11.28商业版
原来用试用版好好的,上月装了11.28商业版后。
昨天发现用代码自动编号生成会提示调用目标错误!(这个月比较忙很少玩狐表,到现在才发现)
谁有出现这个情况吗?(昨天有装了台TSC342标签打印机,不知有没关系?)

--  作者:lsf5138
--  发布时间:2013/3/28 8:19:00
--  
输入的日期如果在 2001-01-01  至 2012-12-31 内才可以正常使用 (超前和超后都报错)


调用的目标发生了异常。
.NET Framework 版本:2.0.50727.3643
Foxtable 版本:2012.11.29.1
错误所在事件:表,生产排单,DataColChanged
详细错误信息:
System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.FormatException: 该字符串未被识别为有效的 DateTime。
   在 System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   在 System.Data.ConstNode..ctor(DataTable table, ValueType type, Object constant, Boolean fParseQuotes)
   在 System.Data.ExpressionParser.Parse()
   在 System.Data.DataExpression..ctor(DataTable table, String expression, Type type)
   在 System.Data.Select..ctor(DataTable table, String filterExpression, String sort, DataViewRowState recordStates)
   在 System.Data.DataTable.Select(String filterExpression, String sort, DataViewRowState recordStates)
   在 System.Data.DataTable.Compute(String expression, String filter)
   在 Foxtable.DataTable.Compute(String O1O0111111, String O10110)
   在 UserCode.DataColChanged(DataColEventArgs e)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 Foxtable.DataTable.O0100OOO1lOO10l0O0OO0O00(Object O01010, DataColumnChangeEventArgs O)


这是试用版做的例子发现也一样

调用的目标发生了异常。
.NET Framework 版本:2.0.50727.3643
Foxtable 版本:2012.11.28.1
错误所在事件:表,表A,DataColChanged
详细错误信息:
System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.FormatException: 该字符串未被识别为有效的 DateTime。
   在 System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   在 System.Data.ConstNode..ctor(DataTable table, ValueType type, Object constant, Boolean fParseQuotes)
   在 System.Data.ExpressionParser.Parse()
   在 System.Data.DataExpression..ctor(DataTable table, String expression, Type type)
   在 System.Data.Select..ctor(DataTable table, String filterExpression, String sort, DataViewRowState recordStates)
   在 System.Data.DataTable.Select(String filterExpression, String sort, DataViewRowState recordStates)
   在 System.Data.DataTable.Compute(String expression, String filter)
   在 Foxtable.DataTable.Compute(String OlO1ll1OOO, String OO0Ol0)
   在 UserCode.DataColChanged(DataColEventArgs e)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 Foxtable.DataTable.O1100l0O01l110O0l00Oll11(Object O0l0O0, DataColumnChangeEventArgs O)

--  作者:狐狸爸爸
--  发布时间:2013/3/28 8:50:00
--  

分析生产排单表的DataColchanged事件,用下面的方法分析,找出是哪一行代码出错,然后分析原因:

 

http://www.foxtable.com/help/topics/1485.htm

 

根据错误提示,你合成的compute语句的条件表达式,试图将一个字符串转换为日期和日期列进行比较,但是这个字符串却无法转换为日期,结果出错了。

[此贴子已经被作者于2013-3-28 8:50:26编辑过]

--  作者:lsf5138
--  发布时间:2013/3/28 9:55:00
--  
3楼的下半部份提示是按帮助里的代码做的例子,也一样呀!

为什么 输入的日期如果在 2001-01-01  至 2012-12-31 内才可以正常使用 (超前和超后都报错)

If e.DataCol.Name = "日期" Then
    If
 e.DataRow.IsNull("日期"Then
        e.
DataRow("") = Nothing
    Else
        Dim
 d As Date = e.DataRow("日期")
        Dim
 y As Integer = d.Year
        Dim
 m As Integer = d.Month
        Dim
 Days As Integer = Date.DaysInMonth(y,m)
        Dim
 fd As Date = New Date(y,m,1\'获得该月的第一天
        
Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天
        
Dim bh As String = Format(d,"yyyyMM"\'生成的前6位,4位年,2位月.
        
If e.DataRow("").StartsWith(bh) = False \'如果的前6位不符
            
Dim max As String
            
Dim idx As Integer
            max = e.
DataTable.Compute("Max()","日期 >= #" & fd & "# And 日期 <= #" & ld & "#"\'取得该月的最大
            
If max > "" Then \'如果存在最大
                idx = CInt(max.Substring(
7,3)) + 1 \'获得最大的后三位顺序,并加1
            
Else
                idx = 
1 \'否则顺序等于1
            
End If
            e.
DataRow("") = bh & "-" & Format(idx,"000")
        End
 If
    End
 If
End
 If
[此贴子已经被作者于2013-3-28 10:00:12编辑过]

--  作者:lsf5138
--  发布时间:2013/3/28 10:20:00
--  
比如输入了 2000-12-01 或 2013-03-26 都会报错
但记得上月我有测试2013-02-20是没问题的!

--  作者:lsf5138
--  发布时间:2013/3/28 10:59:00
--  
你是小庞吗?要不下午我把电脑主机带来厂里我们QQ远程一下。(家里没宽带)
--  作者:狐狸爸爸
--  发布时间:2013/3/28 11:02:00
--  
何必这么麻烦啊,直接将文件发上来不就行了吗?
--  作者:lsf5138
--  发布时间:2013/3/28 13:27:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:编号示例.rar


--  作者:FoxMan
--  发布时间:2013/3/28 13:37:00
--  
If e.DataCol.Name = "日期" Then
    If e.DataRow.IsNull("日期") Then
        e.DataRow("编号") = Nothing
    Else
        Dim d As Date = e.DataRow("日期")
        Dim y As Integer = d.Year
        Dim m As Integer = d.Month
        Dim Days As Integer = Date.DaysInMonth(y,m)
        Dim fd As Date = New Date(y,m,1) \'获得该月的第一天
        Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天
        Dim bh As String = Format(d,"yyyyMM") \'生成编号的前6位,4位年,2位月.
        If e.DataRow("编号").StartsWith(bh) = False \'如果编号的前6位不符
            Dim max As String
            Dim idx As Integer
            e.DataRow("编号") = Nothing   \'加多这一句
            max = e.DataTable.Compute("Max(编号)","日期 >= #" & fd & "# And 日期 <= #" & ld & "#") \'取得该月的最大编号
            If max > "" Then \'如果存在最大编号
                idx = CInt(max.Substring(7,3)) + 1 \'获得最大编号的后三位顺序号,并加1
            Else
                idx = 1 \'否则顺序号等于1
            End If
            e.DataRow("编号") = bh & "-" & Format(idx,"000")
        End If
    End If
End If

--  作者:lsf5138
--  发布时间:2013/3/28 13:55:00
--  

还是老样子