以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 找不到“”的datatable (http://foxtable.net/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) \'报错 在读这个日期值的时候报错了,但是肯定是有值的。而且还有其他的日期值没有出错。 有点疯了。 |