数据库同步 - MS Access

时间:2009-11-26 05:11:14

标签: ms-access data-synchronization

我在笔记本电脑上使用多个(相同架构)访问2003数据库时遇到了问题。

我需要找到一种将数据同步到中央访问数据库的自动方式。

笔记本电脑上的数据仅附加到更新/删除操作,因此不会出现问题。

哪些工具可以让我轻松完成? 哪些因素会影响对最佳工具或解决方案的决策?

7 个答案:

答案 0 :(得分:6)

访问复制可能很笨拙,因为您只需要附加查询和一些检查,最好自己编写一些东西。如果每台笔记本电脑收集的数据不能重叠,这可能不会太困难。

您需要考虑主键。最好将用户或笔记本电脑名称合并到密钥中,以确保记录正确相关。

答案 1 :(得分:6)

可以使用Access中内置的Jet复制,但我会警告你,它非常不稳定。它会在你执行它的任何表上搞乱你的PK因为它选择随机有符号整数来尝试避免键冲突,所以你可能最终得到-1243482392912作为你给定记录的下一个PK。如果您正在对其进行任何类型的查找(例如客户ID,订单号等),那就是输入的PITA。您无法自动执行Access同步(也许您可以通过使用VBA伪造类似的东西。但仍然,只有在打开数据库时才会运行。)

我建议的方法是在“中央”数据库上使用SQL Server 2005/2008,并使用SQL Server Express Edition作为“远程”数据库的后端,然后在Access中使用链接表连接到这些SSEE数据库并进行复制以同步它们。设置merge replication or snapshot replication作为发布者的“中央”数据库和作为订阅者的SSEE数据库。与Access Jet复制不同,您可以控制PK编号,但对您而言,这不会成为问题,因为您的订阅者不会推动更改。

除了SQL服务器带来的可扩展性之外,您还可以使用Windows同步管理器自动执行此操作(如果您有同步文件夹,那就是弹出并在登录/注销时同步它们的烦人小盒子),并设置它up,以便在给定的时间间隔,启动,关闭或一天中的某个时间和/或计算机空闲时进行同步,或者仅按需同步。即使Access未运行一个月,每次用户连接到网络时都可以更新其数据集。很酷的东西。

答案 2 :(得分:4)

答案 3 :(得分:1)

您应该阅读Access Database Replication,因为那里有一些信息。

但我认为,为了使其与您的应用程序一起正常运行,您必须使用methods and properties available为此目的推出自定义解决方案。

  

如果需要以编程方式控制Microsoft Access数据库中副本集成员之间的数据交换和设计信息(仅限.mdb文件),请使用Jet和复制对象(JRO)。例如,您可以使用JRO编写一个过程,该过程在用户打开数据库时自动将用户副本与集合的其余部分同步。要以编程方式复制数据库,必须关闭数据库。

     

如果您的数据库是使用Microsoft Access 97或更早版本创建的,则必须使用数据访问对象(DAO)以编程方式复制和同步它。

     

您可以使用DAO方法和属性在以前版本的Microsoft Access中创建和维护复制数据库。如果需要对副本集成员之间的数据交换和设计信息进行编程控制,请使用DAO。例如,您可以使用DAO编写一个过程,在用户打开数据库时自动将用户副本与集合的其余部分同步。

     

您可以使用以下方法和属性来创建和维护复制数据库:

     
      
  • MakeReplica方法
  •   
  • Synchronize方法
  •   
  • ConflictTable property
  •   
  • DesignMasterID property
  •   
  • KeepLocal property
  •   
  • Replicable property
  •   
  • ReplicaID property
  •   
  • ReplicationConflictFunction property
  •   
     

Microsoft Jet提供了这些额外的方法和属性,用于创建和维护部分副本(包含完整副本中记录子集的副本):

     
      
  • ReplicaFilter property
  •   
  • PartialReplica property
  •   
  • PopulatePartial方法
  •   

您一定要阅读文档的the Synchronizing Data部分内容。

答案 4 :(得分:0)

我在a00中使用复制多年,直到被迫升级到a07(当它消失时)。我们在企业级遇到的最棘手的问题是管理 CONFLICTS 。如果不及时管理,或者太多,用户会感到沮丧,数据变得不可靠。

当我们的远程站点并不总是连接到互联网时,

复制确实运行良好。这使他们能够处理他们的数据,并在他们可以的时候进行同步。每天至少两次。

我们在管理同步的远程计算机上安装了一个单独的数据库,因此用户只需单击其桌面上的图标即可唤起同步。

用户有一个单独的按钮,可以从指定的FTP文件中推送/拉入Feed,该文件将从旧版系统更新。

这个过程非常有效,因为我们有30个这样的节点"在全国各地工作,管理他们的数据并更新到FTP服务器。

如果您正在认真考虑这条道路,请告诉我,我可以将您的文件发给您。

答案 5 :(得分:-2)

您可以编写自己的同步软件,连接到笔记本电脑,从它的数据库中选择差异并将其插入主服务器。 这取决于您的数据方案,此操作将是多么容易。 (如果你有许多FK表...你需要巧妙地做到这一点)。 我认为如果你自己写的话会最有效率。

自动化这种行为称为复制,并且显然可以访问Supports,但我从未见过它。

我猜大多数时候笔记本电脑没有连接到主数据库,无论如何都不是一个好主意(复制数据)。

如果您要寻找第三方工具来做 - 在复制之前寻找可以轻松地在表之间进行差异的东西,并且当然可以逐步进行。

答案 6 :(得分:-2)

FWIW:

  1. Autonumbers。我同意大卫 - 他们永远不应该暴露。为了消除这种诱惑,我使用随机自动编号。
  2. 复制。几年前我广泛使用了这个,使用预定的同步,并使用GUID作为PK。我反复发现,网络上的任何打嗝都会破坏副本,导致我不得不抢救数据并重新发布副本。痛苦!