Foxtable(狐表)用户栏目专家坐堂 → 求助!出现一个错误不明白什么意思


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

主题:求助!出现一个错误不明白什么意思

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


加好友 发短信
等级:五尾狐 帖子:1031 积分:7237 威望:0 精华:0 注册:2008/9/1 22:34:00
求助!出现一个错误不明白什么意思  发帖心情 Post By:2010/12/23 14:02:00 [只看该作者]

做了个功能窗口,期中的的个按钮代码如下:

 

Dim cj =e.Form.Controls("ComboBox1").Value
Dim data As Date=e.Form.Controls("DateTimePicker1").value
Dim cj2 = data.Year & Format(data.Month,"00")
Dim drs As List(of DataRow)
If cj <> cj2 Then
    Dim List As List(of String)
    Dim dr1 As DataRow
    List = DataTables("订单生产安排供需流水账").GetUniqueValues("[会计期间]= '" & cj &"'" ,"料品编码")
   
    Dim st As Date = Date.Now
    DataTables("订单生产安排供需流水账").LoadFilter = "[会计期间] in ('" & cj & "','" & cj2 & "')"
    DataTables("订单生产安排供需流水账").Load()
    Dim dr2 As DataRow=DataTables("订单生产安排供需流水账").Find("[会计期间] = '" & cj2 & "'","[会计期间] Desc")
    If dr2 IsNot Nothing Then
        drs = DataTables("订单生产安排供需流水账").Select("[会计期间] = '" & cj2 & "'and [摘要] = '期初结存'")
       
        For i As Integer = 0 To drs.Count - 1
            drs(i).Locked  = False
        Next
        DataTables("订单生产安排供需流水账").DeleteFor("[会计期间] = '" & cj2 & "'and [摘要] = '期初结存'")
       
       
       
       
       
        With CurrentTable
            Dim r As Integer
            r = .Find( "' & cj2 & '", 0, "会计期间", False, False, True)
            If r > - 1 Then '如果找到符合条件的行
                .Position = r '则选择该行
            End If
        End With
        DataTables("订单生产安排供需流水账").StopRedraw()
       
        For ii As Integer = List.Count - 1 To 0 Step -1
            Dim dr As Row = Tables("订单生产安排供需流水账").InsertNew()
            dr("摘要")="期初结存"
            dr("日期") = e.Form.Controls("DateTimePicker1").value
            dr("料品编码") = List (ii)
           
            dr1 = DataTables("订单生产安排供需流水账").Find("[会计期间] = '" & cj & "' And [料品编码] = '" & dr("料品编码") & "'and [_sortkey] < " & dr("_sortkey") ,"[日期] Desc, [_SortKey] Desc")
            dr.DataRow("结存量")=dr1("结存量")
            dr.Locked = True
           
        Next
        DataTables("订单生产安排供需流水账").ResumeRedraw()
        MessageBox.Show("结转完成,总耗时: " & (Date.Now - st).TotalSeconds & "秒","提示") '计算并显示执行代码所花费的秒数
    Else
        DataTables("订单生产安排供需流水账").StopRedraw()
       
        For u As Integer = 0 To List.Count - 1
            Dim dr As DataRow = DataTables("订单生产安排供需流水账").AddNew()
            dr("摘要")="期初结存"
            dr("日期") = e.Form.Controls("DateTimePicker1").value
            dr("料品编码") = List (u)
           
            dr1 = DataTables("订单生产安排供需流水账").Find("[会计期间] = '" & cj & "' And [料品编码] = '" & dr("料品编码") & "'and [_sortkey] < " & dr("_sortkey") ,"[日期] Desc,[_SortKey] Desc")
            dr("结存量")=dr1("结存量")
            dr.Locked = True
        Next
        DataTables("订单生产安排供需流水账").ResumeRedraw()
        MessageBox.Show("结转完成,总耗时: " & (Date.Now - st).TotalSeconds & "秒","提示") '计算并显示执行代码所花费的秒数
       
    End If
Else
    MessageBox.Show("你选择的下个期间的第一天有误,请重新选择正确的日期!","提示", MessageBoxButtons.OK ,MessageBoxIcon.Information)
End If

 

执行一次上面的代码,没出错,如果第二次执行就出错提示如下图所示的信息!

 


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

 

 

我怀疑是红色部份的代码有问题,但测试了好几次都不成功,想不明白到底是什么原因。

[此贴子已经被作者于2010-12-23 14:06:31编辑过]

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


加好友 发短信
等级:管理员 帖子:47480 积分:251289 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/23 14:44:00 [只看该作者]

下面的代码并没有判断dr1是否找到:

 

 dr1 = DataTables("订单生产安排供需流水账").Find("[会计期间] = '" & cj & "' And [料品编码] = '" & dr("料品编码") & "'and [_sortkey] < " & dr("_sortkey") ,"[日期] Desc, [_SortKey] Desc")
dr.DataRow("结存量")=dr1("结存量")

当然错误不一定在这里,类似的检查都应该判断的,建议你看看:

 

http://help.foxtable.com/topics/1485.htm

 

http://help.foxtable.com/topics/2044.htm

 


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


加好友 发短信
等级:五尾狐 帖子:1031 积分:7237 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/12/23 14:58:00 [只看该作者]

以下是引用狐狸爸爸在2010-12-23 14:44:00的发言:

下面的代码并没有判断dr1是否找到:

 

 dr1 = DataTables("订单生产安排供需流水账").Find("[会计期间] = '" & cj & "' And [料品编码] = '" & dr("料品编码") & "'and [_sortkey] < " & dr("_sortkey") ,"[日期] Desc, [_SortKey] Desc")
dr.DataRow("结存量")=dr1("结存量")

当然错误不一定在这里,类似的检查都应该判断的,建议你看看:

 

http://help.foxtable.com/topics/1485.htm

 

http://help.foxtable.com/topics/2044.htm

 

我想不是这个问题,当然应该加上判断是最好的,

 

我在测代码的过程中发现:如果在结转完成后不加上锁定行和解锁的那部份功能就没问题;

我是后来加上等结转完后去锁定那些期初结存的行的代码时发现问题的;

发现问题后,我想是不是结转完成后再作一次同样的结转的过程在有先删除那些之前结转的数据行,但因为那些数行之前已经被锁定而导致删除出错了呢?

然后我在前面加上解锁的动作,但还是不行,所以想不明白啊!真痛苦。


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


加好友 发短信
等级:管理员 帖子:47480 积分:251289 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/23 15:03:00 [只看该作者]

呵呵,那就分别删除你怀疑的那两段代码,看看问题到底在那一段。

这个没有啥技巧的,只能先逐段排除,再逐行检查,找出问题。

 

还有:

 

Dim cj =e.Form.Controls("ComboBox1").Value
Dim cj2 = data.Year & Format(data.Month,"00")

 

是不是应该改为:

 

Dim cj As String =e.Form.Controls("ComboBox1").Value
Dim cj2 As String = data.Year & Format(data.Month,"00")

 

 


[此贴子已经被作者于2010-12-23 15:05:08编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1031 积分:7237 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/12/23 15:30:00 [只看该作者]

测试是在:如果结转成功一次,再去做相同的结转是就出现,是在作第二次结转时要去删除刚才结转后的那些期初数据时出问题的,但不知如何解决!


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


加好友 发短信
等级:管理员 帖子:47480 积分:251289 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/23 15:35:00 [只看该作者]

做个示例项目,带上数据并写上代码发上来。
[此贴子已经被作者于2010-12-23 15:35:27编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1031 积分:7237 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/12/23 17:10:00 [只看该作者]

贺先生,帮我检查一下吧

我在

项目中的全部表的BeforeLoad中按照帮助的例子也做了一段代码,也出现了点问题,现在上传这个项目给你。麻烦帮我一起看看。

 

Select Case e.DataTable.Name
    Case "订单生产安排供需流水账","料品基础数据表"
        For Each dr1 As DataRow In DataTables("授权表").Select("用户名 = '" & Vars("_UserName") & "'" )
            If dr1("表名")=e.DataTable.Name AndAlso dr1("只加载本部门数据")=True Then
                Dim fl As String = "[部门] = '" & Vars("部门名称") & "'"
                If e.DataTable.LoadFilter = "" Then
                    e.DataTable.LoadFilter = fl
                ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then '如果没有包括这个条件
                    e.DataTable.LoadFilter = e.DataTable.Loadfilter & fl
                End If
            End If
           
           
            If dr1("表名")=e.DataTable.Name  AndAlso dr1("只加载本部门数据")=False Then
                Dim fl As String = "[部门] in (" & dr1("部门范围") & ")"
                If e.DataTable.LoadFilter = "" Then
                    e.DataTable.LoadFilter = fl
                ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then '如果没有包括这个条件
                    e.DataTable.LoadFilter = e.DataTable.Loadfilter & fl
                End If
               
            End If
           
        Next
End Select

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:订单生产按排供需流水账1.rar

密码:123

[此贴子已经被作者于2010-12-23 17:16:13编辑过]

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


加好友 发短信
等级:管理员 帖子:47480 积分:251289 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/23 17:30:00 [只看该作者]

其实我在2楼就告诉你答案了,我将你的代码改为:

 

 dr1 = DataTables("订单生产安排供需流水账").Find("[会计期间] = '" & cj & "' And [料品编码] = '" & dr("料品编码") & "'and [_sortkey] < " & dr("_sortkey") ,"[日期] Desc, [_SortKey] Desc")
If dr1 isnot Nothing  Then
      dr.DataRow("结存量")=dr1("结存量")
End If

就不再提示你所说的错误了。

 

为啥就不一开始就按照我所说的测试一下呢?

 

 

图片点击可在新窗口打开查看


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


加好友 发短信
等级:五尾狐 帖子:1031 积分:7237 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/12/23 17:39:00 [只看该作者]

以下是引用狐狸爸爸在2010-12-23 17:30:00的发言:

其实我在2楼就告诉你答案了,我将你的代码改为:

 

 dr1 = DataTables("订单生产安排供需流水账").Find("[会计期间] = '" & cj & "' And [料品编码] = '" & dr("料品编码") & "'and [_sortkey] < " & dr("_sortkey") ,"[日期] Desc, [_SortKey] Desc")
If dr1 isnot Nothing  Then
      dr.DataRow("结存量")=dr1("结存量")
End If

就不再提示你所说的错误了。

 

为啥就不一开始就按照我所说的测试一下呢?

 

 

图片点击可在新窗口打开查看

  真不好意思,因为我之前没加上这个代码的时候是正常的,且当时我去做BeforeLoad的相关代码,且做过程中也出现了问题,所以就没按你所说的去做。

现在我测试真的是这个问题,但我想不明白,为什么当初我没加上锁定行的相关代码时是正常的呢?

另外BeforeLoad中的代码又是什么原因呢?


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


加好友 发短信
等级:管理员 帖子:47480 积分:251289 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/23 17:44:00 [只看该作者]

当初没有,是因为当初有符合条件的数据, dr1不是Nothing,数据变化后,dr1就可能找不到符合条件的行。

BeforeLoad我不明白你有啥问题,你可以在后面加一行检查一下代码的执行结果:

 

Select Case e.DataTable.Name
    Case "订单生产安排供需流水账","料品基础数据表"
        For Each dr1 As DataRow In DataTables("授权表").Select("用户名 = '" & Vars("_UserName") & "'" )
            If dr1("表名")=e.DataTable.Name AndAlso dr1("只加载本部门数据")=True Then
                Dim fl As String = "[部门] = '" & Vars("部门名称") & "'"
                If e.DataTable.LoadFilter = "" Then
                    e.DataTable.LoadFilter = fl
                ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then '如果没有包括这个条件
                    e.DataTable.LoadFilter = e.DataTable.Loadfilter & fl
                End If
            End If
            If dr1("表名")=e.DataTable.Name  AndAlso dr1("只加载本部门数据")=False Then
                Dim fl As String = "[部门] in (" & dr1("部门范围") & ")"
                If e.DataTable.LoadFilter = "" Then
                    e.DataTable.LoadFilter = fl
                ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then '如果没有包括这个条件
                    e.DataTable.LoadFilter = e.DataTable.Loadfilter & fl
                End If
            End If
        Next

        MessageBox.Show(e.DataTable.Name & "|" & e.DataTable.LoadFilter )
End Select

[此贴子已经被作者于2010-12-23 17:52:13编辑过]

 回到顶部
总数 14 1 2 下一页