以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]下拉窗口选择数据报错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=139721)

--  作者:huangjiacai
--  发布时间:2019/8/20 10:06:00
--  [求助]下拉窗口选择数据报错
好奇怪,当初写代码的时候写完试运行没问题,现在发布项目出来,下拉窗口第一次选中记录不会报错,但是第二次选中就开始报错了,求助。下拉窗口的代码是参考文档写的。
图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

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

图片点击可在新窗口打开查看此主题相关图片如下:3.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2019/8/20 10:24:21编辑过]

--  作者:有点蓝
--  发布时间:2019/8/20 10:27:00
--  
检查上面错误提示对应的事件代码
--  作者:huangjiacai
--  发布时间:2019/8/20 10:32:00
--  
我看了下报错的提示,好像是说我赋值的字段超出字符类型的长度,这个要怎么解决呢,数据类型好像改不了,只能字符型,单纯设置“位数”好像不起作用。
--  作者:有点蓝
--  发布时间:2019/8/20 10:58:00
--  
和长度没有关系,第一个错误是说引用了空对象,也就是没有判断是否是空值

第二个错误有是条件表达式或者赋值有问题,把字符串值给整数列了

--  作者:huangjiacai
--  发布时间:2019/8/20 11:28:00
--  

With Tables("预算使用申请表").Current
\'    Dim r As Row = Tables("预算使用申请表").Current
    If .IsNull("预算编号") = False Then
        Dim r As Row = Tables("预算使用申请表").Current
        Dim dr As DataRow
        Dim dr1 As DataRow
        dr = DataTables("基础预算表").Find("[预算编号] = \'" & Tables("预算使用申请表").Current("预算编号") & "\'")
        r("预算项目名称") = dr("项目名称")
        r("预算金额") = dr("预算金额")
        dr1 = DataTables("预算使用情况汇总表").Find("[预算编号] = \'" & Tables("预算使用申请表").Current("预算编号") & "\'")
        r("已使用金额") = dr1("预算发生数")
        r("已使用占比") = dr1("预算完成率")
        r("预算使用说明") = dr1("预算使用说明")
        r("一级科目") = dr1("一级科目")
        r("二级科目") = dr1("二级科目")
        r("三级科目") = dr1("三级科目")
        r("四级科目") = dr1("四级科目")
        r("五级科目") = dr1("五级科目")
    End If

end with

 

是不是我在每一次赋值前要先加判断,还是说在 = 后面直接加上表达式就行了呢


--  作者:有点蓝
--  发布时间:2019/8/20 11:41:00
--  
在是current之前必须先判断current是否有值,比如表格没有行:http://www.foxtable.com/webhelp/topics/0445.htm

if Tables("预算使用申请表").Current isnot nothing 
......

同样道理find查询如果没有结果,dr就是空值
dr = DataTables("基础预算表").Find("[预算编号] = \'" & Tables("预算使用申请表").Current("预算编号") & "\'")
if dr isnot nothing then
......

--  作者:huangjiacai
--  发布时间:2019/8/20 11:49:00
--  
谢谢老师,还有个疑问,我行有数据,但是部分列是空的,这个时候赋值的话一样会报错,是不是每条表达式都要加判断当前行某一列的值是否为空呀
--  作者:有点酸
--  发布时间:2019/8/20 13:58:00
--  
你是怎么赋值的呢,按道理任何类型的列,都可以接受空值的。
遇到错误,可以用这个方法调试一下:
http://www.foxtable.com/webhelp/topics/1485.htm
[此贴子已经被作者于2019/8/20 13:58:48编辑过]

--  作者:huangjiacai
--  发布时间:2019/8/20 17:48:00
--  
老师,我想问一下,是不是位数也要一样呢?因为我看了每个表的表结构,数据类型基本上都是字符型的,唯一的区别就是16位,32位的区别,不知道为什么会报错
--  作者:有点蓝
--  发布时间:2019/8/20 20:24:00
--  
如果长度不足,比如列指定最大长度为16个字符,赋值超过16个字符肯定出错。