设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2473|回复: 9
打印 上一主题 下一主题

[其它] 大难题 如何追加多个表?

[复制链接]
跳转到指定楼层
1#
发表于 2002-11-18 06:56:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个很难和很麻烦的问题:
1  追加查询每次只能追加一个表吗?能否一次追加N个表?

2  有一个数据库,里面有两个一对多关系的表。另一个数据库,里面也有相同格式的表。

但它们的内容可能有相同,也有不同。用户可能要把A库的某些记录COPY到B库的对应表中。
此时,如果用追加查询,就会很麻烦。因为表的ID号可能有冲突,所以追加一对多关系的数据到另一个库中,本人认为只能这样做:

两个库,A库有表1和2,B库有表3和4,它们分别是一对多且是格式相同,但两库的数据是不一样的。
A库中选择了2表的N个记录,要COPY到B库的4表中,首先:

执行追加查询
1 》》3  ,成功追加了选定的数据到3表。3表中新的数据的ID号与1表中的ID号不同。

然后

2 》》4  ,因为3、4是一对多关系,所以4表中添加新的数据时要先: 查找2表中引用1表
的ID对应的1表数据,然后用这数据再查找3表中对应的ID,然后才可以添加新的4表数据。

当然,第2步用VBA是没有问题的,但这样做,不是很麻烦吗?而且效率很低。有没有更简单的办法做到更快?如果是有N个一对多表要这样做时,不是:(

在这里,请你仔细阅读,仔细分析,谢谢!



LWWVB
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2002-11-18 07:13:00 | 只看该作者
Access 现在支持过程,是否能通过过程和事务来实现呢?我没试过,只是一种想法。
3#
 楼主| 发表于 2002-11-18 08:16:00 | 只看该作者
朱版主,你看懂我写的意思吗?能有更简单的办法去解决这个吗?
4#
发表于 2002-11-18 18:08:00 | 只看该作者
我的话就编一个函数,用4个DAO.RECORDSET和两个循环处理,然后设计一些参数(比如表的名字,数据库名字和路径,筛选条件等),以后只要改变参数就可以自动追加。
5#
 楼主| 发表于 2002-11-19 07:44:00 | 只看该作者
呀,还是原来的做法。还是VBA找来找去,很慢的。如果有10000条记录。因为要查找很多次。
6#
发表于 2003-1-18 05:52:00 | 只看该作者
lwwvb,这样的问题我也跟你作法一样,我也想知道有什么好的办法。
7#
发表于 2003-7-27 04:59:00 | 只看该作者
?
8#
 楼主| 发表于 2015-2-8 10:48:20 | 只看该作者
嗯,此贴子已经沉睡了12个春秋,随着自己技术的进步,12年后的今天,无意中翻开这个贴子,我已经知道有什么办法解决这个问题了。
这个办法就是放弃ID自编号字段做表的主键,尽量使用业务主键或GUID主键。这样A库COPY 到B库这个问题就解决了。只要顺序COPY即可。因为主键不会冲突了,免去了很多的麻烦!


9#
 楼主| 发表于 2016-1-27 21:11:37 | 只看该作者
已经快13个春秋了,我对这个问题有更进一步的认识。如果不喜欢GUID字段做主键,那么用双主键的办法来解决这个问题。
比如,原来的表设计是:
                           ID(自动编号)
ID(自编号)  ---   产品ID
产品                     数量
电脑A,B,C都是这样结构的话,电脑A采集电脑B,C上的数据时,因为ID都是自编号的,不同电脑上的ID都可能有相同的,所以电脑A采集B的数据后,再采集C时,很可能会发生主键冲突。。


解决办法:**************************************************
把ID主键改为双主键:X 数字  ID  自动编号
这两个字段同时设为主键,电脑A,B,C上的表结构如下:
                             X
X                           ID(自动编号)
ID(自编号)  ---   产品ID
产品                     数量


在新增数据时:
电脑A中的X都填1,电脑B中的X都填2,如果有更多的电脑,那么可以把X填为3,4,如此类推。

那么电脑A要采集电脑B的数据时,就不会发生只用ID单主键的冲突问题了。
同样,A电脑要采集其它电脑的数据,因为双主键作用,都不会发生这样的冲突。


因为有了这个特殊的结构,就完全不需要VBA来插入数据了,直接用两个SQL语句就可以采集数据了。
上面是两层的表结构,多层的表结构,也用类似方法解决。


*************************************************************
历史回顾:N年以前,我和一个DELPHI朋友交流时,他说非常不喜欢用自动编号做主键,说是一个数据库采集另一个数据库,发生上述的问题。当时我也找不到很好的解,就认为这个朋友说得有道理。
但ID自编号是非常好用的,没有GUID那么长,又很好解决了多用户增加数据时主键并发冲突的问题。所以为了回避上述问题,不用自动编号做主键,实在有点残忍。一直都是心中大石。


到了今天,我的ACC技术越来越成熟,解法越来越强大,就象是一个象棋手,当年未在高级阶段,会走走棋,算不算是精通象棋?直到N年之后才会有更新的认识,才知道当年的不足。有些东西你一直玩下去,直到有一天,功力会不知不觉大增,所以旧的难题就会不知不觉中解决了。

还是要感谢那位DELPHI朋友,虽然没有做过采集的数据库,但是这算是一道很不错的思考题了。

10#
发表于 2016-1-29 13:30:45 | 只看该作者
我是初学者,一直不用自增
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-28 02:15 , Processed in 0.093058 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表