以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 模拟关联明细表增加行时出错 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=141116) |
-- 作者:Jaime -- 发布时间:2019/9/21 10:22:00 -- 模拟关联明细表增加行时出错 老师好,我在模拟关联表中,明细表增加行时出错,提示明细事件错误检查了,找不到问题,请老师帮帮忙看下 窗口中增加行的代码是: Dim dr As DataRow = Tables("修改计划_Table1").DataTable.AddNew() dr("计划单号") = Tables("计划申请_Table1").Current("计划单号") [此贴子已经被作者于2019/10/4 10:51:03编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/9/21 10:34:00 -- 提示是整数不能和字符型值进行比较 |
-- 作者:Jaime -- 发布时间:2019/10/4 11:01:00 -- 一楼的问题我查找不到原因,我核对了各表结构,类型检查没发现整数和字符的不匹配。 现在导入按钮点了后也出现同样的错误提示: Select Case e.DataCol.name Case "物资ID","单位名称" Dim dr As DataRow = DataTables("机组库存").Find("物资ID = \'" & e.OldValue & "\'and 单位名称 = \'" & e.OldValue & "\'") If dr Is Nothing Then dr = DataTables("机组库存").AddNew() dr("物资ID") = e.DataRow("物资ID") dr("单位名称") = e.DataRow("单位名称") dr("物资名称") = e.DataRow("物资名称") dr("型号规格") = e.DataRow("型号规格") dr("品牌") = e.DataRow("品牌") dr("计量单位") = e.DataRow("计量单位") dr("单价") = e.DataRow("单价") Else dr("物资ID") = e.DataRow("物资ID") And dr("单位名称") = e.DataRow("单位名称") End If Case "物资名称","型号规格" Dim dr As DataRow = DataTables("机组库存").Find("物资ID = \'" & e.DataRow("物资ID") & "\'") If dr IsNot Nothing Then dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name) End If End Select 导入按钮的代码如下: If Tables("计划明细").Rows.Count > 0 Then For Each r1 As Row In Tables("计划明细").GetCheckedRows Dim r2 As Row = Tables("出库单.出库明细").AddNew r2("单位名称") = r1("单位名称") r2("物资ID") = r1("物资ID") r2("物资名称") = r1("物资名称") r2("型号规格") = r1("型号规格") r2("计量单位") = r1("计量单位") r2("计划单号") = r1("计划单号") r2("物资编码") = r1("物资编码") r2("单价") = r1("单价") r2("应发数量") = r1("欠发数量") r2("出库数量") = r1("欠发数量") Next e.Form.close Else MessageBox.Show("该单无未交项!") End If 一楼和三楼的问题很像,但我都找不到原因,我用的SQL数据源,我模拟建了Access准备上个实例,但摘出来做成Access不报错,请老师帮忙指导下,谢谢老师!
[此贴子已经被作者于2019/10/4 11:34:17编辑过]
|
-- 作者:有点酸 -- 发布时间:2019/10/4 16:31:00 -- 下面这行代码有问题吧,只有逻辑值才能And啊: dr("物资ID") = e.DataRow("物资ID") And dr("单位名称") = e.DataRow("单位名称") 另外这两行代码: Dim dr As DataRow = DataTables("机组库存").Find("物资ID = \'" & e.OldValue & "\'and 单位名称 = \'" & e.OldValue & "\'") Dim dr As DataRow = DataTables("机组库存").Find("物资ID = \'" & e.DataRow("物资ID") & "\'") 如果物资ID是字符型,没有问题,如果物资ID是数值型的,要去掉单引号: Dim dr As DataRow = DataTables("机组库存").Find("物资ID = " & e.OldValue & " and 单位名称 = \'" & e.OldValue & "\'")
Dim dr As DataRow = DataTables("机组库存").Find("物资ID = " & e.DataRow("物资ID") ) |
-- 作者:有点酸 -- 发布时间:2019/10/4 16:32:00 -- 其实你可以自己调试一下的: http://www.foxtable.com/webhelp/topics/1485.htm |
-- 作者:Jaime -- 发布时间:2019/10/5 4:13:00 -- 谢谢老师! 根据老师指导,我用MessageBox.Show(n)对代码进行了编排测试,正如老师指导的“物资ID”是整数列,但我写的代码多了单引号,此处报错问题已解决。 但另一段代码总改不好,请老师指导, 我希望在机组库存表中找“物资ID”和“单位名称”相同的行,如果表中没有找到,增加行并写入该行; 如果表中本来已有该行内容,那就结束。注:机组库存表中不希望出现“物资ID”和“单位名称”两列相同的重复行,代码如下: Select Case e.DataCol.name Case "物资ID","单位名称" Dim dr As DataRow = DataTables("机组库存").Find("物资ID = " & e.OldValue & " And 单位名称 = \'" & e.OldValue & "\'") If dr Is Nothing Then dr = DataTables("机组库存").AddNew() dr("物资ID") = e.DataRow("物资ID") dr("单位名称") = e.DataRow("单位名称")
Else dr("物资ID") = e.DataRow("物资ID") dr("单位名称") = e.DataRow("单位名称") End If End Select [此贴子已经被作者于2019/10/5 11:50:17编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/10/6 15:15:00 -- Select Case e.DataCol.name Case "物资ID","单位名称" Dim dr As DataRow = DataTables("机组库存").Find("物资ID = " & e.DataRow("物资ID") & " And 单位名称 = \'" & e.DataRow("单位名称") & "\'")
|