Foxtable(狐表)用户栏目专家坐堂 → 模拟关联明细表增加行时出错


  共有2495人关注过本帖树形打印复制链接

主题:模拟关联明细表增加行时出错

帅哥哟,离线,有人找我吗?
Jaime
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:197 积分:1351 威望:0 精华:0 注册:2019/3/31 11:25:00
模拟关联明细表增加行时出错  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107014 积分:544295 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/21 10:34:00 [只看该作者]

提示是整数不能和字符型值进行比较

 回到顶部
帅哥哟,离线,有人找我吗?
Jaime
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:197 积分:1351 威望:0 精华:0 注册:2019/3/31 11:25:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点酸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1093 积分:6682 威望:0 精华:0 注册:2013/7/1 9:05:00
  发帖心情 Post By: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") )

 回到顶部
帅哥哟,离线,有人找我吗?
有点酸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1093 积分:6682 威望:0 精华:0 注册:2013/7/1 9:05:00
  发帖心情 Post By:2019/10/4 16:32:00 [只看该作者]

其实你可以自己调试一下的:
http://www.foxtable.com/webhelp/topics/1485.htm


 回到顶部
帅哥哟,离线,有人找我吗?
Jaime
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:197 积分:1351 威望:0 精华:0 注册:2019/3/31 11:25:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107014 积分:544295 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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("单位名称")  & "'")

 回到顶部