以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何实现合并?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=187563)

--  作者:lin98
--  发布时间:2023/7/27 10:35:00
--  如何实现合并?
如何实现将以表B(明细表)的已审核的数据与表A(主表)的指定字段进行高效合并,为另一表,如图表C?
注:表A有10万条记录,表B有100万条件记录

图片点击可在新窗口打开查看此主题相关图片如下:表合并.jpg
图片点击可在新窗口打开查看

问题一:
在表B扩展临时列,如客户,日期列,用跨表引用方法,将表A的指定字段的内容引入表B,这种方法有2个问题
1.窗口打后,常常会报找不到临时列;
2.数据量大,跨表引用时,速度不快。

问题二:是否有高效,实现将以表B(明细表)的已审核的数据与表A(主表)的指定字段进行高效合并,为另一表,如图表C?


问题三:合并另一表,写入正表好,还写入手动建好的临时表,或代码生成临时表?
1.正表会将数据存入数据库,会占用资源,使用时,直接取数据,相对方便,临时表,数据不存入数据库,不会占用资源,使用时,代码运算才取数据,其速度会不会比正表慢?




--  作者:有点蓝
--  发布时间:2023/7/27 10:44:00
--  
1、怎么扩展的临时列?什么事件写了什么代码?
2、如果要经常使用,建议改为永久列,通过sql一次性更新所有数据

二、如果表C是查询表,使用sql处理即可。如果是数据表,看上面第2点

三、根据自己的需要使用。个人的建议是永久把数据存入数据库使用。现在硬盘都是按T为单位的,那么点数据能够占用多少资源?


--  作者:lin98
--  发布时间:2023/7/27 12:00:00
--  
1.合并后的表的数据,主要是用查看、统计,被引用
2.实际开发中,表A和表B大约有10个字段重复,做永久列,会冗余,占用大量资源,造成项目运行卡,很多大伽都不要这样做,
   个人认为永久列,会冗余,占用大量资源,会造成项目运行卡,对被引用看来比较直接,简单。
3.我用窗口开发,表C是查询表是狐表,不会直接放在窗口,还来源表的数据更新,查询表无法同步更新,
4.采用SQLQuery表,将表C是查询表执行sql,调试运行好好,再过一段时间运行时,会报SQL错误。
5.下面代码,是只加载空表?还是加载表和数据?如果加载表和数据,没条件,会加载全部数据,可能占用大资源。
If DataTables.Contains("产品") = False Then
    DataTables.Load("产品|订单|订单明细")
End If

--  作者:有点蓝
--  发布时间:2023/7/27 12:12:00
--  
我这种小伽认为,项目使用卡不卡和数据库冗余基本没有什么直接关系,反而认为合适的冗余效率会更高。

不使用代码处理,任何表都不会自动刷新。查询表数据一样可以手工刷新。

DataTables.Load("产品|订单|订单明细")默认会同时加载表结构和数据

--  作者:lin98
--  发布时间:2023/7/27 13:42:00
--  
DataTables.Load("产品|订单|订单明细")默认会同时加载表结构和数据

做动态加载
想用在主界面做动态加载,只加载表,不加载数据,因为数据在业务窗口上加载,这样会不避免重复加载,如何实现?
DataTables.Load("产品|订单|订单明细")只加载表,不加载数据

--  作者:有点蓝
--  发布时间:2023/7/27 13:58:00
--  
BeforeLoadOuterTable写代码限制加载条件:http://www.foxtable.com/webhelp/topics/0670.htm
--  作者:lin98
--  发布时间:2023/7/27 14:26:00
--  
由于涉及具体业务,不在BeforeLoadOuterTable写加载,在主界面的按键事件写下面代码:
下面有没有比较简单写法

If DataTables.Contains("产品") = False Then
    DataTables.Load("产品|订单|订单明细")
End If

If e.DataTableName = "产品" Then
    e.SelecHtString = "SelecH * From {产品} Where [_Identify] Is Null"
End If

If e.DataTableName = "订单" Then
    e.SelecHtString = "SelecH * From {订单} Where [_Identify] Is Null"
End If

If e.DataTableName = "订单明细" Then
    e.SelecHtString = "SelecH * From {订单明细} Where [_Identify] Is Null"
End If
[此贴子已经被作者于2023/7/27 14:26:44编辑过]

--  作者:有点蓝
--  发布时间:2023/7/27 14:46:00
--  
必须在BeforeLoadOuterTable写条件,DataTables.Load("产品|订单|订单明细")才能限制加载数据

select case e.DataTableName
    case "产品" ,"订单",...
    e.SelecHtString = "SelecH * From {“ & e.DataTableName & ”} Where [_Identify] Is Null"
End select