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


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

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

帅哥哟,离线,有人找我吗?
狐狸爸爸
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

 


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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

 

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

 

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:管理员 帖子:47480 积分:251289 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/23 17:49:00 [显示全部帖子]

提醒一下,这样是不对的:

 

e.DataTable.LoadFilter = e.DataTable.Loadfilter & fl

应该:

 

e.DataTable.LoadFilter = e.DataTable.Loadfilter &" And " & fl

 

不同的条件要用And或Or连接起来,And和Or的前后要有空格。

其实按照我10楼提供的方法,一测试就会知道原因,既然错误提示条件语句的语法错误,我就用MessageBox显示一下合成的条件是什么。

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

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


加好友 发短信
等级:管理员 帖子:47480 积分:251289 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/23 17:57:00 [显示全部帖子]

呵呵,惭愧,帮助确实有问题。

不过帮助肯定不会是100%正确的,一定也要掌握一些基本的调试和分析技巧,否则就太被动了。

包括一楼的问题,你若是按照我说的,逐段排除,怎么会浪费一下午呢?

请好好看看这一章的内容:

 

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

 

 

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

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

 回到顶部