Foxtable(狐表)用户栏目专家坐堂 → 按钮代码求助(C版请进,又出问题了)


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

主题:按钮代码求助(C版请进,又出问题了)

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/24 16:01:00 [只看该作者]

这样试试:

if e.DataCol.Name = "工序天数"  OrElse e.DataCol.Name = "工序号" Then
    Dim dr As DataRow = e.DataRow
    if dr.IsNull("图号") OrElse dr.IsNull("名称") OrElse dr.IsNull("订单号") OrElse dr.IsNull("工序号") OrElse dr.IsNull("工序天数") Then
        dr("工序完工日期") = Nothing
        dr("工序开工日期") = Nothing
    Else
        Dim Sum As Double = Tables("表B").Compute("Sum(工序天数)","[图号] = '" & dr("图号") & "' And [名称] = '" & dr("名称") & "' And [订单号] = '" & dr("订单号") & "' And [工序号] <= " & dr("工序号"))
        Dim Sum1 As Double = Tables("表B").Compute("Sum(工序天数)","[图号] = '" & dr("图号") & "' And [名称] = '" & dr("名称") & "' And [订单号] = '" & dr("订单号") & "' And [工序号] >= " & dr("工序号"))
        Dim pr As DataRow = dr.GetParentrow("表A")
        if pr IsNot Nothing Then
            dr("工序完工日期") = pr("到料日期").AddDays(Sum * (pr("计划周期")/pr("合计天数")))
            dr("工序开工日期") = pr("计划完工").AddDays(-Sum1 * (pr("计划周期")/pr("合计天数"))+1)
        Else
            dr("工序完工日期") = Nothing
            dr("工序开工日期") = Nothing
        End If
    End If
End If

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


加好友 发短信
等级:三尾狐 帖子:790 积分:5677 威望:0 精华:0 注册:2009/4/17 18:42:00
按钮代码求助(C版请进,又出问题了)  发帖心情 Post By:2009/12/24 17:17:00 [只看该作者]

在我的项目中有一个表不行,请帮我看看:

Dim dr As DataRow = e.DataRow
Dim dt As DataTable = DataTables("生产工艺")
Dim str As String = "图号 = '" & dr("图号") & "' And 工序_序号 = '" & dr("工序_序号") & "' And 派工单号 = '" & dr("派工单号") & "'And 状态 = '执行'"
if e.DataCol.Name = "图号" OrElse e.DataCol.Name = "工序_序号" OrElse e.DataCol.Name = "派工单号"   Then
    Dim r As DataRow = dt.Find(str)
    if r IsNot Nothing Then
        dr("成本_加工") = (dt.Compute("Sum(成本_加工费元)",str))
        dr("成本_工资") = (dt.Compute("Sum(成本_工资元)",str))
        dr("工艺工时_准结") = (dt.Compute("Sum(工艺工时_准结)",str))
        dr("工艺工时_加工")=(dt.Compute("Sum(工艺工时_加工)",str))
        dr("完成工时_准结")=(dt.Compute("Sum(完成工时_准结)",str))
        dr("完成工时_加工")=(dt.Compute("Sum(完成工时_加工)",str))
        dr("工废损失")=(dt.Compute("Sum(工废损失)",str))
        dr("实用工时")=(dt.Compute("Sum(实用工时)",str))
    End If
End If
If e.DataCol.Name = "工序_班组" Then
    Dim dr1 As DataRow = DataTables("基础表").Find(" [班组] = '" & e.DataRow("工序_班组") & "'")
    If dr1 IsNot Nothing Then
        dr("工作时间") = dr1("工作时间")
    Else
        dr("工作时间") = Nothing
    End If
End If
Select Case e.DataCol.Name
    Case "工艺工时_准结","工艺工时_加工","完成工时_准结","完成工时_加工","工作时间"
        dr("完成工时_比例")=(dr("完成工时_准结")+dr("完成工时_加工"))/(dr("工艺工时_准结")+dr("工艺工时_加工"))
        dr("工艺工时_天数")=(dr("工艺工时_加工")+dr("工艺工时_准结"))/dr("工作时间")
        dr("完成工时_天数")=(dr("完成工时_准结")+dr("完成工时_加工"))/dr("工作时间")
End Select

If e.DataCol.Name = "确定" Then '如果是已结帐列的内容变动
    If e.NewValue = True Then '而且变动后的值是True(已勾选)
        e.DataRow.Locked = True '那么锁定此行
    End If
End If
if e.DataCol.Name = "工艺工时_天数"  OrElse e.DataCol.Name = "工序_序号" Then
    if dr.IsNull("图号")  OrElse dr.IsNull("派工单号") OrElse dr.IsNull("工序_序号") OrElse dr.IsNull("工艺工时_天数") Then
        dr("计划日期_结束") = Nothing
        dr("计划日期_开始") = Nothing
    Else
        Dim Sum As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [工序_序号] <= " & dr("工序_序号"))
        Dim Sum1 As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [工序_序号] >= " & dr("工序_序号"))
        Dim pr As DataRow = dr.GetParentrow("生产目录")
        if pr IsNot Nothing Then
            dr("计划日期_结束") = pr("到料日期").AddDays(Sum * (pr("生产周期")/pr("工艺工时_天数")))
            dr("计划日期_开始") = pr("完工日期").AddDays(-Sum1 * (pr("生产周期")/pr("工艺工时_天数"))+0.5)
        Else
            dr("计划日期_结束") = Nothing
            dr("计划日期_开始") = Nothing
        End If
    End If
End If
if e.datacol.name = "图号" OrElse e.datacol.name = "派工单号" OrElse e.datacol.name = "工序_序号"
    e.datarow("实际日期_开始") = DataTables("日报表").Compute("min(日期)","[图号] = '" & e.datarow("图号") & "'and [派工单号] = '" & e.datarow("派工单号") & "'and [工序_序号] = '" & e.datarow("工序_序号") & "'")
    e.datarow("实际日期_结束") = DataTables("日报表").Compute("max(日期)","[图号] = '" & e.datarow("图号") & "'and [派工单号] = '" & e.datarow("派工单号") & "'and [工序_序号] = '" & e.datarow("工序_序号") & "'")
end if


图片点击可在新窗口打开查看此主题相关图片如下:未命名.bmp
图片点击可在新窗口打开查看
[此贴子已经被作者于2009-12-24 17:18:39编辑过]

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


加好友 发短信
等级:三尾狐 帖子:790 积分:5677 威望:0 精华:0 注册:2009/4/17 18:42:00
  发帖心情 Post By:2009/12/24 17:17:00 [只看该作者]

这个是行的:
Dim dt As DataTable = DataTables("计划工艺")
Dim dr As DataRow = e.DataRow
Dim str As String = "图号 = '" & dr("图号") & "' And 工序_序号 = '" & dr("工序_序号") & "' And 派工单号 = '" & dr("派工单号") & "' And 状态 = '执行'"
if e.DataCol.Name = "图号" OrElse e.DataCol.Name = "工序_序号"  OrElse e.DataCol.Name = "派工单号"   Then
    Dim r As DataRow = dt.Find(str)
    if r IsNot Nothing Then
        dr("工时_准结") = (dt.Compute("Sum(工时_准结)",str))
        dr("工时_加工") = (dt.Compute("Sum(工时_加工)",str))
        dr("成本_加工") = (dt.Compute("Sum(成本_加工费元)",str))
        dr("成本_工资") = (dt.Compute("Sum(成本_工资元)",str))
    End If
End If
If e.DataCol.Name = "确定" Then '如果是已结帐列的内容变动
    If e.NewValue = True Then '而且变动后的值是True(已勾选)
        e.DataRow.Locked = True '那么锁定此行
    End If
End If
If e.DataCol.Name = "工序_班组" Then
    Dim dr1 As DataRow = DataTables("基础表").Find(" [班组] = '" & e.DataRow("工序_班组") & "'")
    If dr1 IsNot Nothing Then
        dr("工作时间") = dr1("工作时间")
    Else
        dr("工作时间") = Nothing
    End If
End If
Select Case e.DataCol.Name
    Case "工时_准结","工时_加工","工作时间"
        dr("工时_天数")=(dr("工时_加工")+dr("工时_准结"))/dr("工作时间")
End Select
if e.DataCol.Name = "工时_天数"  OrElse e.DataCol.Name = "工序_序号" Then
    if dr.IsNull("图号")  OrElse dr.IsNull("派工单号") OrElse dr.IsNull("工序_序号") OrElse dr.IsNull("工时_天数") Then
        dr("计划日期_结束") = Nothing
        dr("计划日期_开始") = Nothing
    Else
        Dim Sum As Double = Tables("计划工序").Compute("Sum(工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [工序_序号] <= " & dr("工序_序号"))
        Dim Sum1 As Double = Tables("计划工序").Compute("Sum(工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [工序_序号] >= " & dr("工序_序号"))
        Dim pr As DataRow = dr.GetParentrow("计划目录")
        if pr IsNot Nothing Then
            dr("计划日期_结束") = pr("计划转入日期").AddDays(Sum * (pr("计划周期")/pr("工时_天数")))
            dr("计划日期_开始") = pr("计划完工日期").AddDays(-Sum1 * (pr("计划周期")/pr("工时_天数"))+0.5)
        Else
            dr("计划日期_结束") = Nothing
            dr("计划日期_开始") = Nothing
        End If
    End If
End If

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
[求助]怎样从身份证来计算年龄的函数  发帖心情 Post By:2009/12/24 17:23:00 [只看该作者]

一大堆代码看着眼晕啊。
分段进行测试,看看问题出在哪里。

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


加好友 发短信
等级:三尾狐 帖子:790 积分:5677 威望:0 精华:0 注册:2009/4/17 18:42:00
  发帖心情 Post By:2009/12/25 0:58:00 [只看该作者]

C版,您看在红色部分加一个判断代码,可以吗,代码应怎么写。因这两个表相互之间计算引用对方数据反复得出结果,我只能靠重算几次表来得到最后结果,但是没有死循环的,生产工序表的工时由生产工艺得出,在得出生产目录表的工时,又由目录表反过来得出工序表的计划日期,只要代码执行不报警,多点几次重算
顺祝圣诞快乐
图片点击可在新窗口打开查看
if e.DataCol.Name = "工艺工时_天数"  OrElse e.DataCol.Name = "工序_序号" Then
    if dr.IsNull("图号")  OrElse dr.IsNull("派工单号") OrElse dr.IsNull("工序_序号") OrElse dr.IsNull("工艺工时_天数") Then
        dr("计划日期_结束") = Nothing
        dr("计划日期_开始") = Nothing
    Else
        Dim Sum As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [工序_序号] <= " & dr("工序_序号"))
        Dim Sum1 As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [工序_序号] >= " & dr("工序_序号"))
        Dim pr As DataRow = dr.GetParentrow("生产目录")
 判断pr("生产周期")和pr("工艺工时_天数")无空值
        if pr IsNot Nothing Then
            dr("计划日期_结束") = pr("到料日期").AddDays(Sum * (pr("生产周期")/pr("工艺工时_天数")))
            dr("计划日期_开始") = pr("完工日期").AddDays(-Sum1 * (pr("生产周期")/pr("工艺工时_天数"))+0.5)
        Else
            dr("计划日期_结束") = Nothing
            dr("计划日期_开始") = Nothing
        End If
    End If
End If

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/25 11:31:00 [只看该作者]

……
Dim pr As DataRow = dr.GetParentrow("生产目录")
if pr IsNot Nothing Then
    if pr.IsNull("生产周期") = False And pr.IsNull("生产周期") = False Then
        dr("计划日期_结束") = pr("到料日期").AddDays(Sum * (pr("生产周期")/pr("工艺工时_天数")))
        dr("计划日期_开始") = pr("完工日期").AddDays(-Sum1 * (pr("生产周期")/pr("工艺工时_天数"))+0.5)
    End If

……

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


加好友 发短信
等级:三尾狐 帖子:790 积分:5677 威望:0 精华:0 注册:2009/4/17 18:42:00
  发帖心情 Post By:2009/12/25 13:16:00 [只看该作者]

我把出问题的填充按钮派工单号绑定在窗口控件,与第一个表一样,图号,派工单号,一起填充,就不提示出错了,但是生产工序表有一个数据没算出来,即:
计划日期_开始和计划日期_结束两列,因此列要提取生产目录表工艺工时_天数的数据,而工艺工时_天数是靠生产工序表得出,所以这里要靠点击重算让表在计算一次得出。不知有没有办法解决不需点重算而直接算出。
  Dim pr As DataRow = dr.GetParentrow("生产目录")
        if pr IsNot Nothing Then
            dr("计划日期_结束") = pr("到料日期").AddDays(Sum * (pr("生产周期")/pr("工艺工时_天数")))【pr("工艺工时_天数") = (生产工序表("Sum(工艺工时_天数)",str))】
            dr("计划日期_开始") = pr("完工日期").AddDays(-Sum1 * (pr("生产周期")/pr("工艺工时_天数"))+0.5)
        Else
            dr("计划日期_结束") = Nothing
            dr("计划日期_开始") = Nothing
        End If
    End If
End If

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/25 15:21:00 [只看该作者]

呵呵,回答这样的问题是很累的,每次你都是做个简单的示例,代码七拼八凑难免出错。
要解决问题的最好办法就是上传完整的系统,这样方便大家回答问题。

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


加好友 发短信
等级:三尾狐 帖子:790 积分:5677 威望:0 精华:0 注册:2009/4/17 18:42:00
  发帖心情 Post By:2009/12/25 15:34:00 [只看该作者]

项目是外部数据库的,密码060425
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:佶龙机加二车间管理系统.rar

[此贴子已经被作者于2009-12-25 15:35:45编辑过]

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/25 16:12:00 [只看该作者]

请详细说明问题在哪个表哪个窗口,出现什么问题。

 回到顶部
总数 40 上一页 1 2 3 4 下一页