Foxtable(狐表)用户栏目专家坐堂 → 如何实现合并?


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

主题:如何实现合并?

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
如何实现合并?  发帖心情 Post By:2023/7/27 10:35:00 [只看该作者]

如何实现将以表B(明细表)的已审核的数据与表A(主表)的指定字段进行高效合并,为另一表,如图表C?
注:表A有10万条记录,表B有100万条件记录

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

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

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


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




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


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/7/27 10:44:00 [只看该作者]

1、怎么扩展的临时列?什么事件写了什么代码?
2、如果要经常使用,建议改为永久列,通过sql一次性更新所有数据

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

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


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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By: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

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


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/7/27 12:12:00 [只看该作者]

我这种小伽认为,项目使用卡不卡和数据库冗余基本没有什么直接关系,反而认为合适的冗余效率会更高。

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

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

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2023/7/27 13:42:00 [只看该作者]

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

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

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


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/7/27 13:58:00 [只看该作者]

BeforeLoadOuterTable写代码限制加载条件:http://www.foxtable.com/webhelp/topics/0670.htm

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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 

 回到顶部