以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  选中合计行再保存报错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=184946)

--  作者:青丘狐
--  发布时间:2023/1/18 20:30:00
--  选中合计行再保存报错
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.1.1
错误所在事件:窗口,入库通知单登记,保存,Click
详细错误信息:
未将对象引用设置到对象的实例。


Tables("入库明细").Cols("厂发数量").GrandTotal = True \'指定要合计的列
Tables("入库明细").Cols("厂发重量").GrandTotal = True
Tables("入库明细").Cols("理计数量").GrandTotal = True \'指定要合计的列
Tables("入库明细").Cols("理计重量").GrandTotal = True
Tables("入库明细").Cols("码单数量").GrandTotal = True \'指定要合计的列
Tables("入库明细").Cols("码单重量").GrandTotal = True
Tables("入库明细").Cols("含税金额").GrandTotal = True
Tables("入库明细").GrandTotal = True \'显示合计模式


操作时选中合计行再保存会报错

[此贴子已经被作者于2023/1/18 20:31:46编辑过]

--  作者:有点蓝
--  发布时间:2023/1/19 9:12:00
--  
调试看哪一句代码出错:http://www.foxtable.com/webhelp/topics/1485.htm
--  作者:青丘狐
--  发布时间:2023/1/19 10:31:00
--  

Dim sts As String() = {"入库单号", "入库日期", "结算单位", "项目名称", "仓库名称", "业务类别", "采购类型"}
For Each st As String In sts \'关联字段任一字段为空的话,不能新增明细表数据
    If Forms("入库通知单登记").controls(st).value Is Nothing Then
        MessageBox.Show("请将红色必填字段 " & st & " 填写完整!", "提醒")
        Return
    End If
Next

MessageBox.Show(1)

If Tables("入库明细").rows.count = 0 Then
    MessageBox.Show("入库明细没有数据!", "提醒")
    Return
End If

MessageBox.Show(2)

Dim dr As String() = {"品名", "材质", "规格", "产地", "厂发数量", "厂发重量","厂发单价", "含税金额"}
For Each mx As String In dr
    If Tables("入库明细").Current.isnull(mx) = True Then
        MessageBox.Show("入库明细中  " & mx & "  填写完整!", "提醒")
        Return
    End If
Next

MessageBox.Show(3)

For Each dt As DataTable In DataTables
    If dt.HasChanges Then
        e.Form.Controls("Label16").text = "正在保存数据..."
        Application.Doevents
        dt.Save
        e.Form.Controls("Label16").text = ""
    Else
        e.Form.Controls("Label16").text = ""
        e.Form.Controls("新单").Enabled = True
        e.Form.Controls("退出").Enabled = True
    End If
Next

MessageBox.Show(4)

\'录入码单勾选
Tables("入库明细码单").AllowEdit =  False
Dim gx As WinForm.CheckBox = e.Form.Controls("需要录入码单")
gx.Checked = False
e.Form.Controls("码单增加").Enabled = False
e.Form.Controls("码单编辑").Enabled = False
e.Form.Controls("码单行复制").Enabled = False
e.Form.Controls("码单删除").Enabled = False
e.Form.Controls("码单保存").Enabled = False

MessageBox.Show(5)

 

 

MessageBox.Show(3)没有通过,提示这个错误代码。没看出什么问题,老师帮忙看下谢谢

 

 

[此贴子已经被作者于2023/1/19 10:32:18编辑过]

--  作者:有点蓝
--  发布时间:2023/1/19 10:34:00
--  
"入库明细"没有数据,判断一下current:http://www.foxtable.com/webhelp/topics/0445.htm,理解一下里面的“完美”的代码
--  作者:青丘狐
--  发布时间:2023/1/19 10:36:00
--  
保存只要选择的当前不是合计行不会报错,当前选到合计行去保存报错
--  作者:有点蓝
--  发布时间:2023/1/19 12:10:00
--  
看4楼,加个判断
--  作者:青丘狐
--  发布时间:2023/1/19 19:25:00
--  
Dim dr As String() = {"品名", "材质", "规格", "产地", "厂发数量", "厂发重量", "厂发单价", "含税金额"}
If Tables("入库明细").Current IsNot Nothing Then 
    For Each mx As String In dr
        If Tables("入库明细").Current.isnull(mx) = True Then
            MessageBox.Show("入库明细中  " & mx & "  填写完整!", "提醒")
            Return
        End If
    Next
End If
加了红色的不出错提示了,意思是当前行不是空行?

--  作者:有点蓝
--  发布时间:2023/1/19 20:10:00
--  

在汇总模式下,Current只返回数据行,不返回分组行;如果你选择了分组行,此时Current返回Nothing。
所以为了在命令窗口显示订单表当前行的客户列内容,“完美”的代码是:

If Tables("订单").Current IsNot Nothing Then
    Output.Show(
Tables("订单").Current("客户"
))
End If