以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  DataColChanged中,代码不执行?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=88655)

--  作者:yancheng
--  发布时间:2016/8/6 22:47:00
--  DataColChanged中,代码不执行?
Se lect Case e.DataCol.name
    Case "入库单价"
        Dim dr As DataRow = Tables("入库明细").Current.DataRow
        Dim cmd As New SQLCommand
        Dim dt As DataTable
        cmd.C
        cmd.CommandText = "S ELECT * Fr om {材料} Where [定额编码] = \'" & dr("定额编码") & "\'"
        dt = cmd.ExecuteReader()
        If dt.DataRows.Count > 0 Then
            dt.DataRows(0)("成本价") = dr("入库单价")
       MessageBox.show(dt.DataRows.Count)
        End If
    Case "供应商编号"
        Dim dr As DataRow = Tables("入库明细").Current.DataRow
        Dim cmd As New SQLCommand
        Dim dt As DataTable
        cmd.C
        cmd.CommandText = "SEL ECT * F rom {材料} Where [定额编码] = \'" & dr("定额编码") & "\'"
        dt = cmd.ExecuteReader()
        If dt.DataRows.Count > 0 Then
            dt.DataRows(0)("供应商编号") = dr("供应商编号")
       MessageBox.show(1)
        End If
End Select

入库单价,供应商编号,列的数据修改是从:采购入库.入库明细,关联表中修改的,不知道是不是这个原因?
[此贴子已经被作者于2016/8/7 10:10:00编辑过]

--  作者:yancheng
--  发布时间:2016/8/6 22:47:00
--  
上面两个代码都 不执行,用测试的messbox.show,能正常弹出值 
--  作者:大红袍
--  发布时间:2016/8/7 12:42:00
--  
        dt = cmd.ExecuteReader(true)
        If dt.DataRows.Count > 0 Then
            dt.DataRows(0)("成本价") = dr("入库单价")
            MessageBox.show(dt.DataRows.Count)
            dt.Save
        End If

--  作者:yancheng
--  发布时间:2016/8/8 18:22:00
--  
.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2016.7.8.1
错误所在事件:表,入库明细,DataColChanged
详细错误信息:
调用的目标发生了异常。
对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。


--  作者:大红袍
--  发布时间:2016/8/8 18:32:00
--  
 你材料表有问题,没有主键列
--  作者:yancheng
--  发布时间:2016/8/8 18:53:00
--  
Select Case e.DataCol.name
    Case "入库单价"
        Dim dr As DataRow = e.DataRow
        Dim cmd As New SQLCommand
        Dim dt As DataTable
        cmd.C
        cmd.CommandText = "SEL ECT * Fro m {材料} Where [定额编码] = \'" & dr("定额编码") & "\'"
        dt = cmd.ExecuteReader(True)
        If dt.DataRows.Count > 0 Then
            dt.DataRows(0)("成本价") = dr("入库单价")
        dt.Save
        End If

    Case "定额编码"
        Dim dr As DataRow = e.DataRow
        Dim cmd As New SQLCommand
        Dim dt As DataTable
        cmd.C
        cmd.CommandText = "SE LECT * Fro m  {材料} Where [定额编码] = \'" & dr("定额编码") & "\'"
        dt = cmd.ExecuteReader(True)
        If dt.DataRows.Count > 0 Then
            dt.DataRows(0)("供应商编号") = dr("供应商编号")
            dt.DataRows(0)("供应商") = dr("供应商")
         dt.save
        End If
End Select


这样可以了。刚才的问题是不是我改了代码为:
cmd.CommandText = "SE LECT 定额编码,供应商编号 ,供应商,成本价 Fr om {材料} Where [定额编码] = \'" & dr("定额编码") & "\'"
这样好像不行。 

--  作者:大红袍
--  发布时间:2016/8/8 20:17:00
--  

 没必要这样修改啊,你可以用sqlfind的啊

 

http://www.foxtable.com/webhelp/scr/2911.htm