Foxtable(狐表)用户栏目专家坐堂 → 奇怪的程序假死问题


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

主题:奇怪的程序假死问题

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


加好友 发短信
等级:六尾狐 帖子:1207 积分:7224 威望:0 精华:0 注册:2013/3/4 18:02:00
奇怪的程序假死问题  发帖心情 Post By:2013/8/4 18:43:00 [只看该作者]

普通代码:

If khddcx = "" Then
    MessageBox.show("请输入!","提示")
    Return
Else
    DataTables("供应商资料主表").LoadFilter = "名称 Like '%" & khddcx & "%' or 代码 Like '%" & khddcx & "%'"
    DataTables("供应商资料主表").Load()
    DataTables("供应商资料子表").LoadFilter = "联系人 Like '%" & khddcx & "%'"
    DataTables("供应商资料子表").Load()
    If DataTables("供应商资料主表").DataRows.Count = 0  AndAlso DataTables("供应商资料子表").DataRows.Count = 0  Then
        MessageBox.show("没有查找到相关供应商资料!","提示")
        Return
    Else
        Dim ids As String
        For Each dr As DataRow In DataTables("供应商资料主表").DataRows
            ids = ids & ",'" & dr("代码") & "'"
            ids= ids.Trim(",")
            DataTables("供应商资料子表").LoadFilter = "代码 In (" & ids & ")"
        Next
        Dim vds As String
        For Each dr As DataRow In DataTables("供应商资料子表").DataRows
            vds = vds & ",'" & dr("代码") & "'"
            vds= vds.Trim(",")
            DataTables("供应商资料主表").LoadFilter = "代码 In (" & vds & ")"
        Next
    End If
End If
DataTables("供应商资料子表").LoadTop = ""
DataTables("供应商资料子表").Load()

改造过的内部函数:

Dim cx As String = Args(0)
Dim mgs As String = Args(1)
Dim tbn As String =Args(2)
Dim tbn1 As String =Args(3)
Dim key As String = Args(4)
Dim key1 As String = Args(5)
Dim key2 As String =Args(6)
Dim keys As String =Args(7)
If cx = "" Then
    MessageBox.show(mgs,"提示")
    Return Nothing
Else
    DataTables(tbn).LoadFilter = key & " Like '%" & cx & "%' or " & key1 & " Like '%" & cx & "%'"
    DataTables(tbn).Load()
    DataTables(tbn1).LoadFilter = key2 & " Like '%" & cx & "%'"
    DataTables(tbn1).Load()
    If DataTables(tbn).DataRows.Count = 0 AndAlso DataTables(tbn1).DataRows.Count = 0 Then
        MessageBox.show("没有查找到相关数据!","提示")
        Return Nothing
    Else
        Dim ids As String
        For Each dr As DataRow In DataTables(tbn).DataRows
            ids = ids & ",'" & dr(keys) & "'"
            ids= ids.Trim(",")
            DataTables(tbn1).LoadFilter = keys & "In (" & ids & ")"
        Next
        Dim vds As String
        For Each dr As DataRow In DataTables(tbn1).DataRows
            vds = vds & ",'" & dr(keys) & "'"
            vds= vds.Trim(",")
            DataTables(tbn).LoadFilter = keys & "In (" & vds & ")"
        Next
    End If
End If
DataTables(tbn1).LoadTop = ""
'DataTables(tbn1).Load()

 

执行函数代码:Functions.Execute("主子表查询",e.Form.Controls("查询框(供应商信息)").Text,"请输入供应商名称或供应商代码或联系人!","供应商资料主表","供应商资料子表","名称","代码","联系人","代码")

 

内部函数代码最后一句标红加粗的去掉就没事,但是子表没有被加载,无法显示,执行的话就直接导致程序假死,求大神解答

 

 


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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/8/4 18:52:00 [只看该作者]

If DataTables("供应商资料主表").DataRows.Count = 0  AndAlso DataTables("供应商资料子表").DataRows.Count = 0  Then

 

Orelse ?


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


加好友 发短信
等级:六尾狐 帖子:1207 积分:7224 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/8/4 18:53:00 [只看该作者]

以下是引用lsy在2013-8-4 18:52:00的发言:

If DataTables("供应商资料主表").DataRows.Count = 0  AndAlso DataTables("供应商资料子表").DataRows.Count = 0  Then

 

Orelse ?

这里必须用AndAlso的,因为我要两个条件都满足


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


加好友 发短信
等级:六尾狐 帖子:1207 积分:7224 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/8/4 18:55:00 [只看该作者]

这个是tbn1加载引起的问题,会导致我的程序死掉,动不了

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/8/4 19:01:00 [只看该作者]

你判断两个条件。

一个条件不满足的话,结果会怎样?


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


加好友 发短信
等级:六尾狐 帖子:1207 积分:7224 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/8/4 19:03:00 [只看该作者]

以下是引用lsy在2013-8-4 19:01:00的发言:

你判断两个条件。

一个条件不满足的话,结果会怎样?

你看我正常的代码,那段代码可以正确无错的执行的,我测试过很多次了


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


加好友 发短信
等级:六尾狐 帖子:1207 积分:7224 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/8/4 19:05:00 [只看该作者]

判断这里不会有问题的,因为我的查询是主子表一起查询的,可以查询主表列的关键字,也可以查询子表列的关键字的

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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/8/4 19:06:00 [只看该作者]

没看懂了,

 If DataTables(tbn).DataRows.Count = 0 AndAlso DataTables(tbn1).DataRows.Count = 0 Then
        MessageBox.show("没有查找到相关数据!","提示")
        Return Nothing
    Else
        Dim ids As String
        For Each dr As DataRow In DataTables(tbn).DataRows
            ids = ids & ",'" & dr(keys) & "'"
            ids= ids.Trim(",")
            DataTables(tbn1).LoadFilter = keys & "In (" & ids & ")"
        Next
        Dim vds As String
        For Each dr As DataRow In DataTables(tbn1).DataRows
            vds = vds & ",'" & dr(keys) & "'"
            vds= vds.Trim(",")
            DataTables(tbn).LoadFilter = keys & "In (" & vds & ")"
        Next
    End If
这两段代码干什么的?这个和

    DataTables(tbn).LoadFilter = key & " Like '%" & cx & "%' or " & key1 & " Like '%" & cx & "%'"
    DataTables(tbn).Load()
    DataTables(tbn1).LoadFilter = key2 & " Like '%" & cx & "%'"
    DataTables(tbn1).Load()
有什么本质区别吗?

 

加载照成死循环,跟着段代码应该没有关系,而是你本身其他代码引起了最后一句加载的卡死

 

你这个函数的参数过多了,函数参数超过4个以上使用就不方便了。


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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/8/4 19:06:00 [只看该作者]

主表没有数据,下面的代码无法执行;

子表没有数据,下面的代码同样无法执行。

这样判断,就该用Orelse


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


加好友 发短信
等级:六尾狐 帖子:1207 积分:7224 威望:0 精华:0 注册:2013/3/4 18:02:00
  发帖心情 Post By:2013/8/4 19:13:00 [只看该作者]

以下是引用jspta在2013-8-4 19:06:00的发言:

没看懂了,

 If DataTables(tbn).DataRows.Count = 0 AndAlso DataTables(tbn1).DataRows.Count = 0 Then
        MessageBox.show("没有查找到相关数据!","提示")
        Return Nothing
    Else
        Dim ids As String
        For Each dr As DataRow In DataTables(tbn).DataRows
            ids = ids & ",'" & dr(keys) & "'"
            ids= ids.Trim(",")
            DataTables(tbn1).LoadFilter = keys & "In (" & ids & ")"
        Next
        Dim vds As String
        For Each dr As DataRow In DataTables(tbn1).DataRows
            vds = vds & ",'" & dr(keys) & "'"
            vds= vds.Trim(",")
            DataTables(tbn).LoadFilter = keys & "In (" & vds & ")"
        Next
    End If
这两段代码干什么的?这个和

    DataTables(tbn).LoadFilter = key & " Like '%" & cx & "%' or " & key1 & " Like '%" & cx & "%'"
    DataTables(tbn).Load()
    DataTables(tbn1).LoadFilter = key2 & " Like '%" & cx & "%'"
    DataTables(tbn1).Load()
有什么本质区别吗?

 

加载照成死循环,跟着段代码应该没有关系,而是你本身其他代码引起了最后一句加载的卡死

 

你这个函数的参数过多了,函数参数超过4个以上使用就不方便了。

第一段代码是因为我的数据是动态加载的,主表加载进来的时候要通过关联列字段加载子表啊

我奇怪的是,我普通的代码能正常执行,改写成内部函数就不行了。。


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