以文本方式查看主题

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

--  作者:爱相随
--  发布时间:2015/3/18 16:53:00
--  代码问题

老师,下面代码是自动编号的编号,在开发时测试都没有问题,正是用的时候提示运行错误,请老师帮助,谢谢!!

错误信息:

.NET Framework 版本:2.0.50727.3655
Foxtable 版本:2014.11.11.1
错误所在事件:表,ZJSQB2,DataColChanged
详细错误信息:
Exception has been thrown by the target of an invocation.
Cannot evaluate. Expression \'System.Data.NameNode\' is not an aggregate.

 

代码:

 

Select e.DataCol.Name
    Case "SQRQ","SQDWJM"
        If e.DataRow.IsNull("SQRQ") OrElse e.DataRow.IsNull("SQDWJM") Then
            e.DataRow("SQDBH") = Nothing
        Else
            Dim d As Date = e.DataRow("SQRQ")
            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 = e.DataRow("SQDWJM") & "-" & Format(d,"yyyyMM") & "-" \'生成编号的前缀
            If e.DataRow("SQDBH").StartsWith(bh) = False \'如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                Dim flt As String
                flt = "SQDWJM = \'"& e.DataRow("SQDWJM") & "\' And SQRQ >= #" & fd & "# And SQRQ <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")
                max = e.DataTable.Compute("Max(SQDBH)",flt) \'取得该月的相同工程代码的最大单据编号
                If max > "" Then \'如果存在最大单据编号
                    idx = CInt(max.Substring(bh.length,3)) + 1 \'获得最大单据编号的后四位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("SQDBH") = bh & Format(idx,"000")
            End If
        End If
End Select

 

 

确定后,也能自动生成单据编号,但就是每一行都要提示运行错误。


[此贴子已经被作者于2015/3/18 16:57:32编辑过]

--  作者:Bin
--  发布时间:2015/3/18 16:58:00
--  
提示什么错误?
--  作者:爱相随
--  发布时间:2015/3/18 16:58:00
--  
以下是引用Bin在2015/3/18 16:58:00的发言:
提示什么错误?

.NET Framework 版本:2.0.50727.3655
Foxtable 版本:2014.11.11.1
错误所在事件:表,ZJSQB2,DataColChanged
详细错误信息:
Exception has been thrown by the target of an invocation.
Cannot evaluate. Expression \'System.Data.NameNode\' is not an aggregate.

 

 

确定后,也能自动生成单据编号,但就是每一行都要提示运行错误。

[此贴子已经被作者于2015/3/18 16:59:12编辑过]

--  作者:Bin
--  发布时间:2015/3/18 16:59:00
--  
1.把例子发上来

2.建议您用这个方法:
http://www.foxtable.com/help/topics/1485.htm

先找出是哪一行出错,然后分析原因,搞不定,可以在论坛发帖,贴出代码,并告诉我们运行到哪一行出错,以及错误提示。

--  作者:有点甜
--  发布时间:2015/3/18 17:01:00
--  

 代码没有问题,肯定是连环的错误,请再去检测你的Datacolchanged事件其它代码。

 

 弄不好就请上传具体例子。


--  作者:爱相随
--  发布时间:2015/3/19 10:05:00
--  

老师,测试下来是下面这段代码的2以后的代码有错。思路是:A表自动复制到B表,然后相关人员在B表操作代码2后的列,然后将在B表操作的列自动复制到A表对应的行的单位格(列)。请老师帮我处理一下,谢谢

 

If e.DataCol.Name = "sbzgb" AndAlso e.DataRow("sbzgb") = True Then
     Dim dr As DataRow = DataTables("ZJsqB").AddNew
     For Each dc As DataCol In DataTables("ZJsqB").DataCols
         dr(dc.Name) = e.DataRow(dc.Name)
     Next
End If
MessageBox.Show(1)
If e.DataCol.Name = "SQDbh" Then
MessageBox.Show(2)
    e.DataRow("总工办") = DataTables("ZJSQB").Compute("总工办","[SQDBH] = \'" & e.NewValue & "\'")
MessageBox.Show(3)
    e.DataRow("JTZGB1") = DataTables("ZJSQB").Compute("JTZGB1","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("JTZGB2") = DataTables("ZJSQB").Compute("JTZGB2","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("JTZGB3") = DataTables("ZJSQB").Compute("JTZGB3","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("时间5") = DataTables("ZJSQB").Compute("时间5","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("集团财务1") = DataTables("ZJSQB").Compute("集团财务1","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("JTCWB1") = DataTables("ZJSQB").Compute("JTCWB1","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("JTCWB2") = DataTables("ZJSQB").Compute("JTCWB2","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("JTCWB3") = DataTables("ZJSQB").Compute("JTCWB3","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("时间6") = DataTables("ZJSQB").Compute("时间6","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("集团副总") = DataTables("ZJSQB").Compute("集团副总","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("时间7") = DataTables("ZJSQB").Compute("时间7","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("资金副总") = DataTables("ZJSQB").Compute("资金副总","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("时间8") = DataTables("ZJSQB").Compute("时间8","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("董事长1") = DataTables("ZJSQB").Compute("董事长1","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("董事长2") = DataTables("ZJSQB").Compute("董事长2","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("董事长3") = DataTables("ZJSQB").Compute("董事长3","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("时间9") = DataTables("ZJSQB").Compute("时间9","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("PZJE") = DataTables("ZJSQB").Compute("PZJE","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("PZJE1") = DataTables("ZJSQB").Compute("PZJE1","[SQDBH] = \'" & e.NewValue & "\'")
    e.DataRow("PZJE2") = DataTables("ZJSQB").Compute("PZJE2","[SQDBH] = \'" & e.NewValue & "\'")
End If


--  作者:爱相随
--  发布时间:2015/3/19 10:07:00
--  

但是,在另一张表也是同样事件同样的代码,却没有提示运行错误:

If e.DataCol.Name = "sbzgb" AndAlso e.DataRow("sbzgb") = True Then
     Dim dr As DataRow = DataTables("ZJJHB").AddNew
     For Each dc As DataCol In DataTables("ZJJHB").DataCols
         dr(dc.Name) = e.DataRow(dc.Name)
     Next
End If

If e.DataCol.Name = "htbh" Then
    e.DataRow("SHYJ") = DataTables("ZJJHB").Compute("SHYJ","[HTBH] = \'" & e.NewValue & "\'")
    e.DataRow("SH1") = DataTables("ZJJHB").Compute("SH1","[HTBH] = \'" & e.NewValue & "\'")
    e.DataRow("ZJJB") = DataTables("ZJJHB").Compute("ZJJb","[HTBH] = \'" & e.NewValue & "\'")
    e.DataRow("YYSM") = DataTables("ZJJHB").Compute("YYSM","[HTBH] = \'" & e.NewValue & "\'")
    e.DataRow("SH") = DataTables("ZJJHB").Compute("SH","[HTBH] = \'" & e.NewValue & "\'")
    e.DataRow("CWSH2") = DataTables("ZJJHB").Compute("CWSH2","[HTBH] = \'" & e.NewValue & "\'")
End If


--  作者:有点甜
--  发布时间:2015/3/19 10:10:00
--  

 这样写啊

 

Dim ffdr As DataRow =  DataTables("ZJSQB").Find("[SQDBH] = \'" & e.NewValue & "\'")

If ffdr IsNot Nothing Then

    e.DataRow("JTZGB1") = ffdr("JTZGB1")

    e.DataRow("JTZGB2") = ffdr("JTZGB2")

End If


--  作者:爱相随
--  发布时间:2015/3/19 10:25:00
--  

我要表达的意思是

表A有一列叫“SBZGB”逻辑列,当点击“SBZGB“为勾选时,则将此指定的列自动复制到B表,在B表也有逻辑列叫“信息反馈”。当点击为勾选时,则将在B表编辑的内容对应地自动填充到A表中与单据编号相同的对应的列。就是在将B表内容自动复制到A表时有限制了,就是B表的单据编号只能复制到A表相同的单据编对应的列


--  作者:爱相随
--  发布时间:2015/3/19 10:27:00
--  

从表A到表B,没有限制,但从表B到表A,则受单据编号的限制,需要一一对应

 

表A是甲编辑,表B乙编辑,甲乙属于不同层次的单位,但都需要在同一内容的表上发表意见。

[此贴子已经被作者于2015/3/19 10:28:37编辑过]