以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助表达式 和子表加载速度  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=146246)

--  作者:long086
--  发布时间:2020/2/19 22:57:00
--  求助表达式 和子表加载速度
咨询一下老师,订单主表和订单明细表关联,订单主表里面有两个表达式列,查询的主表的时候同时加载了子表,速度很慢很慢,如果把主表的表达式列去掉,加载子表很快。或者不去掉表达式列,只加载主表,不加载子表,速度也很快。能不能不去掉表达式列,同时加载子表,把速度提升上去。
--  作者:有点蓝
--  发布时间:2020/2/20 9:48:00
--  
上传实例看看。估计是多个地方的表达式列都触发了计算,现成了链式反应。
--  作者:long086
--  发布时间:2020/2/20 22:33:00
--  

附件上传老师指点

[此贴子已经被作者于2020/2/21 22:07:45编辑过]

--  作者:有点蓝
--  发布时间:2020/2/21 11:05:00
--  
是会收到表达式的影响的。可以这样

Dim s2 As String = DataTables("用户资料").DataCols("合计金额").Expression
Dim s3 As String = DataTables("用户资料").DataCols("到期时间").Expression
DataTables("用户资料").DataCols("合计金额").Expression = ""
DataTables("用户资料").DataCols("到期时间").Expression = ""

DataTables("用户交费记录").LoadFilter = "用户账号 In (" & ids & ")"
DataTables("用户交费记录").Load()

DataTables("用户资料").DataCols("合计金额").Expression = s2
DataTables("用户资料").DataCols("到期时间").Expression = s3

另外,感觉这个查询里的加载完全没有必要啊,每次都是加载全部的数据,没看出来有什么意义。要的效果不应该是只加载符合条件的数据吗?那么应该这样:
Dim s As WinForm.ComboBox = e.Form.Controls("cxfs")
Dim cx As WinForm.TextBox = e.Form.Controls("srcx")
Dim filter As String = ""
Select Case s.Text
    Case "姓名查找"
        filter = "用户名称 like \'%" & cx.text & "%\'"
    Case "账号查找"
        filter = "用户账号 Like \'%" & cx.text & "%\' "
    Case "号线查找"
        filter= "号线地址 Like \'%" & cx.text & "%\'"
    Case "手机查找"
        filter = "号码1 like \'%" & cx.text & "%\' or 号码2 like \'%" & cx.text & "%\' or 号码3 like \'%" & cx.text & "%\'  "\'
    Case "地址查找"
        filter = "装机地址 Like \'%" & cx.text & "%\'"
    Case Else
        MessageBox.Show("未查到数据")
        Return
End Select
DataTables("用户资料").LoadFilter = filter
DataTables("用户资料").Load

Dim ids As String = ""
For Each dr As DataRow In DataTables("用户资料").DataRows
    ids = ids & ",\'" & dr("用户账号") & "\'"
Next

If  ids > ""
    ids= ids.Trim(",")
    DataTables("用户交费记录").LoadFilter = "用户账号 In (" & ids & ")"
Else
    DataTables("用户交费记录").LoadFilter = "false"
End If
DataTables("用户交费记录").Load()

--  作者:long086
--  发布时间:2020/2/21 22:48:00
--  

谢谢老师指点,按照老师的指点不但功能实现了,速度还飞快。