以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  找不到“”的datatable  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=190332)

--  作者:newsun2k
--  发布时间:2024/2/1 10:05:00
--  找不到“”的datatable
我写了一个函数,想把修改前的整列记录下来。
是在全局的beforesaverow的事件中调用的。
偶尔报错了,说找不到名称为“”的datatable
也就是dr的datatable不存在?
到底是哪行记录出错了,现在也搞不清,没有datatable,就不能读明细。
已经发布了,发现这个问题,大神救命。

Dim dr As DataRow = Args(0)
Dim strAllFields As String = ""
For Each dc As DataCol In dr.DataTable.DataCols
    If strAllFields <> "" Then strAllFields = strAllFields & "|"
    strAllFields = strAllFields & dc.Name & "(" & dr.OriginalValue(dc.Name).ToString & ")"
Next

Return strAllFields

--  作者:有点蓝
--  发布时间:2024/2/1 10:08:00
--  
把e参数传入函数

Dim e = Args(0)
Dim strAllFields As String = ""
For Each dc As DataCol In e.DataTable.DataCols
    If strAllFields <> "" Then strAllFields = strAllFields & "|"
    strAllFields = strAllFields & dc.Name & "(" & e.datarow.OriginalValue(dc.Name).ToString & ")"
Next

Return strAllFields

--  作者:newsun2k
--  发布时间:2024/2/1 10:55:00
--  
搞不懂原理,因为我还有其他地方调用这个,我干脆做了两个函数,一个传e,一个传datarow
传datarow的,改成这样,还是有问题。
是不是要把dr.OriginalValue这个也传进来?

Dim dr As DataRow = Args(0)
Dim strTableName As String = Args(1)
Dim strAllFields As String = ""
If dr.RowState = DataRowState.Added Then Return strAllFields
MessageBox.Show(strTableName)
For Each dc As DataCol In DataTables(strTableName).DataCols
    If strAllFields <> "" Then strAllFields = strAllFields & "|"
    strAllFields = strAllFields & dc.Name & "(" & dr.OriginalValue(dc.Name).ToString & ")"
Next

Return strAllFields

--  作者:有点蓝
--  发布时间:2024/2/1 10:57:00
--  
在什么地方调用函数有问题?把这个地方的完整代码发上来
--  作者:newsun2k
--  发布时间:2024/2/1 11:05:00
--  
调用函数的地方:
\'记录修改痕迹
Functions.Execute("save保存更新记录", drZLNF, "rd专利年费")

函数save保存更新记录
Dim dr As DataRow = Args(0)
Dim strTableName As String = Args(1)
Dim strUser As String = Vars("gsYongHuM")
Dim strBeforeFields As String
Dim strAfterFields As String
strBeforeFields = Functions.Execute("merge合并记录更新前所有列", dr, strTableName)   \'这里报错了
\'strAfterFields = Functions.Execute("merge合并记录更新后所有列", dr, strTableName)
’Functions.Execute("insert新增更新记录", strTableName, strUser, strBeforeFields, strAfterFields)

函数merge合并记录更新前所有列
Dim dr As DataRow = Args(0)
Dim strTableName As String = Args(1)
Dim strAllFields As String = ""
If dr.RowState = DataRowState.Added Then Return strAllFields
MessageBox.Show(strTableName)
For Each dc As DataCol In DataTables(strTableName).DataCols
    If strAllFields <> "" Then strAllFields = strAllFields & "|"
    strAllFields = strAllFields & dc.Name & "(" & dr.OriginalValue(dc.Name).ToString & ")"
Next

Return strAllFields


--  作者:有点蓝
--  发布时间:2024/2/1 11:19:00
--  
Functions.Execute("save保存更新记录", drZLNF, "rd专利年费")在什么事件调用的?把这个事件完整代码发上来
--  作者:newsun2k
--  发布时间:2024/2/1 11:22:00
--  
感觉接近真相了。
如果通过检索得到的dr
dr=datatables("t1").sqlfind("第一列=\'1\'")
通过函数调用,传入dr,获取OriginalValue,就会报datatable名称为空?

--  作者:newsun2k
--  发布时间:2024/2/1 11:27:00
--  
Functions.Execute("save保存更新记录", drZLNF, "rd专利年费")在什么事件调用的?把这个事件完整代码发上来
这个也是在一个函数里面调的。有删减的完整代码如下

Dim dr As DataRow = args(0)
If dr.RowState = DataRowState.Modified Then
    If dr.OriginalValue("联系人") <> dr("联系人") Or dr.OriginalValue("联系人电话") <> dr("联系人电话") Or dr.OriginalValue("联系人邮箱") <> dr("联系人邮箱")  Then
        Functions.Execute("update联系人同步","rd授权通知书",dr("案卷编码"),dr("联系人"),dr("联系人电话"),dr("联系人邮箱"))
    End If
    Return True   \'修改的场合,不对应修改专利清单
End If
If dr.IsNull("申请号") Then
    showMsg("申请号为空!",2)
    Return False
End If
Dim drZLQD As DataRow = DataTables("rd专利清单").sqlfind("申请号 = \'" & dr("申请号") & "\'")
If drZLQD Is Nothing Then
    showMsg("专利清单中未找到申请号[" & dr("申请号") & "]的数据!",2)
    Return False
End If
\'

\'增加专利年费
Dim drZLNF As DataRow = DataTables("rd专利年费").SqlFind("申请号 = \'" & dr("申请号") & "\'")
If drZLNF IsNot Nothing Then
    showMsg("专利年费中申请号[" & dr("申请号") & "]的数据已经存在!",3)
    drZLQD.Reject
    drSQF.Reject
    SystemReady = True
    Return False
End If
drZLNF  = DataTables("rd专利年费").Find("申请号 = \'" & dr("申请号") & "\'")
If drZLNF IsNot Nothing Then
    showMsg("专利年费中申请号[" & dr("申请号") & "]的数据已经存在!",3)
    drZLQD.Reject
    drSQF.Reject
    SystemReady = True
    Return False
End If

drZLNF  = DataTables("rd专利年费").AddNew
drZLNF("编码") = drSQF("编码")
drZLNF("申请号") =  dr("申请号")
drZLNF("授权发文日") = dr("发文日")
drZLNF("申请日") = drZLQD("申请日")
drZLNF("专利年度") = dr("授权年度")
drZLNF("缴费期限") = drSQF("缴费期限")
drZLNF("费减比例") = dr("费减比例")
drZLNF("缴费次数") = 1
drZLNF("当年年费") = dr("当年年费")
drZLNF("代理费") = Functions.Execute("get服务费标准_n",drZLQD("客户编码"),"年费服务费")
drZLNF("官费请款状态") =  "QKZT02"
drZLNF("官费到款状态") = "DKZT02"
If drZLNF.IsNull("官费请款方式") Then drZLNF("官费请款方式") = "QKFS02"
drZLNF("代理费请款方式") = drZLNF("官费请款方式")
drZLNF("缴费状态") = "JFZT03"
drZLNF("代理费请款状态") = "QKZT02"
drZLNF("代理费到款状态") = "DKZT02"
drZLNF("垫交状态") = "DFZT01"
drZLNF("授权年度") = dr("授权年度")
drZLNF("收据抬头") = drZLQD("客户名称")
drZLNF("代理人编码") = drZLQD("代理人编码")
drZLNF("代理人姓名") = drZLQD("代理人姓名")
drZLNF("申请人区域") = drZLQD("申请人区域")
drZLNF("所属分公司") = drZLQD("所属分公司")
drZLNF("发明人") = drZLQD("发明人")
drZLNF("发明名称") = drZLQD("发明名称")
drZLNF("客户编码") = drZLQD("客户编码")
drZLNF("客户名称") = drZLQD("客户名称")
drZLNF("专利类型") = drZLQD("专利类型")
drZLNF("申请人") = drZLQD("申请人")
drZLNF("发明名称") = drZLQD("发明名称")
drZLNF("法律状态") = "FLZT05"
drZLNF("监管状态") = "JGZT01"
drZLNF("合同编码") = drZLQD("合同编码")
drZLNF("合同类型") = drZLQD("合同类型")
drZLNF("案卷编码") = drZLQD("案卷编码")
drZLNF("授权及年费请款") = drZLQD("授权及年费请款")
drZLNF("业务员编码") = drZLQD("业务员编码")
drZLNF("业务员姓名") = drZLQD("业务员姓名")
drZLNF("开票状态") = "KPZT04"
drZLNF("沟通记录") = Vars("cntModelGTJL")
drZLNF("录入人") = Vars("gsYuanGongBH")
drZLNF("录入日") = Date.Today
drZLNF("监管费备注") = Functions.Execute("get监管费备注_s",drZLNF("客户编码"))
\'保存
drZLNF.save
drZLQD.save
drSQF.save
Functions.Execute("add收文日志",dr("发文序列号"),dr("申请号"),drZLQD("发明名称"),dr("发文日"),"FWMC004",Date.Today,drZLQD("代理人姓名"),Vars("gsYuanGongBH"),drZLQD("所属分公司"),drZLQD("申请人"))
SystemReady = True
\'记录修改痕迹
Functions.Execute("save保存更新记录", drZLNF, "rd专利年费")
Functions.Execute("save保存更新记录", drZLQD, "rd专利清单")
Functions.Execute("save保存更新记录", drSQF, "rd授权费")
Return True

--  作者:有点蓝
--  发布时间:2024/2/1 11:33:00
--  
sqlfind查找出来的是独立的行,是没有datatable的
--  作者:newsun2k
--  发布时间:2024/2/1 13:26:00
--  
我感觉不是这个问题,我在命令窗口执行一下代码

Dim dr As DataRow
Dim strAllFields, strTableName As String
strTableName = "rd专利清单"
dr = DataTables("rd专利清单").SQLFind("申请号 = \'20232100\'")
MessageBox.Show(dr.OriginalIsNull("申请日"))                             ’false
MessageBox.Show(dr.OriginalValue("申请日").ToString)                 \'报错
在读这个日期值的时候报错了,但是肯定是有值的。而且还有其他的日期值没有出错。
有点疯了。