以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  打开还是很慢  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=136631)

--  作者:yetle
--  发布时间:2019/6/17 21:35:00
--  打开还是很慢

需求:

因为派发工序表里面的记录很多,希望点按钮后只加载订单号=\'" & Tables("分派工序_table2").current("订单号")的订单,可是打开还是很慢,是怎么回事


BeforeLoadOuterTable加了如下代码:



Select Case e.DataTableName
    Case "用户表","账套管理","账号部门","权限表"
        If e.DataTableName = "派发工序表" Then
            e.Cancel = True \'打开项目的时候不加载此表
            e.SelectString = "Select * F rom {派发工序表} Where 订单号=\'" & Tables("分派工序_table2").current("订单号") & "\'" \'设置加载条件,注意如果主键不是_Identify,请改为实际的主键名称
        End If
    Case "报价单",
        e.Cancel = True
    Case Else \'其他所有表默认都不加载
        e.Cancel = True
End Select

按钮代码:
If DataTables.Contains("派发工序表") = False Then \'如果表C没有加载
    DataTables.Load("派发工序表") \'加载表C
End If

forms("修改已扫码").show

--  作者:有点蓝
--  发布时间:2019/6/17 21:52:00
--  
这个代码没有任何意义。首先if语句是永远不会执行的,其次BeforeLoadOuterTable事件还没有加载表,也不存在任何table和窗口,更不用说窗口表的某一行了。

可以试试:

BeforeLoadOuterTable加了如下代码:

Select Case e.DataTableName
    Case "用户表","账套管理","账号部门","权限表"
    Case "派发工序表",
        e.SelectString = "Select * F rom {派发工序表} Where [_Identify] is null"
    Case Else \'其他所有表默认都不加载
        e.Cancel = True
End Select

afteropenproject事件
forms("分派工序").open

"分派工序"table2窗口表currentchanged事件
if e.table.current isnot nothing
    datatables("派发工序表").loadfilter = "订单号=\'" & e.table.current("订单号") & "\'"
    datatables("派发工序表").load
end if



--  作者:yetle
--  发布时间:2019/6/18 11:11:00
--  
试过了,这样打开窗口没有数据,
打开分派工序窗口后点按钮后才打开修改已扫码窗口,因为派发工序表里面的记录很多,希望点按钮后只加载订单号=\'" & Tables("分派工序_table2").current("订单号")的订单
修改已扫码窗口AfterLoad:
If Forms("修改已扫码").Opened() \'一定要判断用于模拟关联表的窗口是否已经打开

    Dim h As Table = Tables("修改已扫码_table1")
    With Tables("分派工序_table2")
        If .Current IsNot Nothing   Then         
            h.Filter = "订单号 = \'" & .Current("订单号") & "\' and 制单号 = \'" & .Current("生产单号") & "\' and 单据状态 = \'已完成\' "
        Else
            h.Filter = "False"
        End If
    End With
End If

--  作者:有点甜
--  发布时间:2019/6/18 11:20:00
--  

比如

 

If Forms("修改已扫码").Opened \'一定要判断用于模拟关联表的窗口是否已经打开
    Dim h As Table = Tables("修改已扫码_table1")
    With Tables("分派工序_table2")
        If .Current IsNot Nothing   Then
            h.DataTable.loadFilter = "订单号 = \'" & .Current("订单号") & "\' and 制单号 = \'" & .Current("生产单号") & "\' and 单据状态 = \'已完成\' "
        Else
            h.DataTable.loadFilter = "False"
        End If
        h.DataTable.load
    End With
End If


--  作者:yetle
--  发布时间:2019/6/18 11:47:00
--  
这种方式走不通
--  作者:有点甜
--  发布时间:2019/6/18 11:53:00
--  
以下是引用yetle在2019/6/18 11:47:00的发言:
这种方式走不通

 

不理解你什么意思?怎么走不通?

 

上传具体例子,说明你要做什么


--  作者:yetle
--  发布时间:2019/6/18 14:20:00
--  
If DataTables.Contains("派发工序表") = False Then \'如果表C没有加载
    DataTables.Load("派发工序表") \'加载表C
End If
不能在这里加载表的时候定义只加载部分数据吗?
[此贴子已经被作者于2019/6/18 14:21:48编辑过]

--  作者:有点甜
--  发布时间:2019/6/18 14:37:00
--  
以下是引用yetle在2019/6/18 14:20:00的发言:
If DataTables.Contains("派发工序表") = False Then \'如果表C没有加载
    DataTables.Load("派发工序表") \'加载表C
End If
不能在这里加载表的时候定义只加载部分数据吗?
[此贴子已经被作者于2019/6/18 14:21:48编辑过]

 

在load表格的时候,不加载任何数据,然后你再指定 datatables("").LoadFilter 重新加载数据,不就行了?