以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  奇怪的程序假死问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=38696)

--  作者:晕了快扶我
--  发布时间: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
--  发布时间:2013/8/4 18:52:00
--  

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

 

Orelse ?


--  作者:晕了快扶我
--  发布时间: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的,因为我要两个条件都满足


--  作者:晕了快扶我
--  发布时间:2013/8/4 18:55:00
--  
这个是tbn1加载引起的问题,会导致我的程序死掉,动不了
--  作者:lsy
--  发布时间:2013/8/4 19:01:00
--  

你判断两个条件。

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


--  作者:晕了快扶我
--  发布时间:2013/8/4 19:03:00
--  
以下是引用lsy在2013-8-4 19:01:00的发言:

你判断两个条件。

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

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


--  作者:晕了快扶我
--  发布时间:2013/8/4 19:05: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个以上使用就不方便了。


--  作者:lsy
--  发布时间:2013/8/4 19:06:00
--  

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

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

这样判断,就该用Orelse


--  作者:晕了快扶我
--  发布时间: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个以上使用就不方便了。

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

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