以文本方式查看主题

-  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
--  模拟关联明细表增加行时出错
老师好,我在模拟关联表中,明细表增加行时出错,提示明细事件错误检查了,找不到问题,请老师帮帮忙看下

图片点击可在新窗口打开查看此主题相关图片如下:123456.png
图片点击可在新窗口打开查看

窗口中增加行的代码是:

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
--  
一楼的问题我查找不到原因,我核对了各表结构,类型检查没发现整数和字符的不匹配。

现在导入按钮点了后也出现同样的错误提示:

图片点击可在新窗口打开查看此主题相关图片如下:123.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:1234.png
图片点击可在新窗口打开查看

这时我把计划明细
DataColChanged事件里下面这段“非关联表之间的数据同步”的代码屏蔽就不报错
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("单位名称")  & "\'")