gpt4 book ai didi

mysql - 在mdb文件和MySQL服务器模式中的相似表之间同步数据

转载 作者:行者123 更新时间:2023-11-29 06:24:26 24 4
gpt4 key购买 nike

我正在寻找一种管理应用程序的Access mdb文件与包含相同表副本的MySQL模式之间同步的方法。这是因为该应用程序不支持将MySQL作为后端,但我正在寻找一种使用第一个应用程序生成的数据将MySQL用于其他办公室应用程序的方法。

给出一些:

1>我们不能放弃第一个应用程序,它仅与Microsoft SQL Server作为后端服务器兼容,以容纳数据。

2>我们不反对使用Microsoft SQL Server,但是许可成本是一个大问题-以及重写一些其他Access应用程序,以使用链接表和单独的mdb文件编写。

3>对于内部公司内部网的将来扩展项目,数据库服务器应“对PHP友好”。

4>无需也不应允许从公司网络外部访问数据。

我希望我不要太晦涩难懂,但是我也不想破坏信心-所以我正在努力走紧的绳索。如果有人可以提供帮助,我将不胜感激。

最佳答案

如果两个数据库都需要更新,则同步两个数据库非常非常复杂。如果一个人是另一个人的奴隶,那几乎没有困难。我不止一次使用Access对这种同步进行编程,一次与必须与本地数据MDB同步的Web服务器上的MDB(合并在网站上编辑的数据;没有任何编辑返回到网站,因此单向同步,但仍然需要在非Web端合并编辑),并且一旦在网站上的MySQL和Access之间以主(MySQL)/从(Access)关系进行编程,就可以进行同步。

在网站上,您可以将每个表的数据转储编程为文本文件。在MySQL表中包含时间戳记字段很有帮助,这样您就可以知道何时创建和更新记录。这使您可以选择自上次数据转储以来要转储的记录(这使Access端的数据同步更加简单)。

我编程的方式是将文本文件导入到登台表中,该登台表已正确索引并链接到前端Access应用程序。将数据转储导入到临时表后,您将执行三个任务:


查找新记录并将其附加到Access数据存储中。使用外部联接很容易做到这一点。
处理删除。稍后,我将进行讨论,因为它非常复杂。
处理更新的记录。为此,我编写了DAO代码,该代码将逐列编写SQL语句。


像这样:

UPDATE LocalTable
SET LocalTable.Field1 = DownloadTable.Field2, LocalTable.Updated = DownloadTable.Updated
WHERE LocalTable.Field1 <> DownloadTable.Field2


现在,显然,WHERE子句必须比这复杂一些(您必须处理NULL,并且必须为数据类型使用适当格式的条件,即对于文本和日期,使用“”和##, ,并且没有用于数字数据的定界符),但是编写代码可以很容易地做到这一点。

骨架代码如下所示:

  Dim db As DAO.Database
Dim rsFields As DAO.Recordset
Dim fld As DAO.Field
Dim strSQL As String

Set rsFields = db.OpenRecordset("SELECT TOP 1 Field1, Field2, Field3 FROM LocalTable;")
For Each fld in rsFields
[write your SQL statement and execute it]
Next fld
Set fld = Nothing
rsFields.Close
Set rsFields = Nothing
Set db = Nothing


现在,正如我所说,复杂的部分是为每个SQL语句编写WHERE子句,但这很容易弄清楚。另外,请注意,在rsFields记录集中(仅用于浏览要更新的字段),您只想包含可更新的字段,因此您将忽略CREATED字段和PK字段(以及任何其他您不想更新的字段)。

现在,为DELETES。

您可能会认为,删除本地表中不在远程表中的任何记录是一个好主意。如果它确实是一个从数据库,那很好用,但是通常原来是从数据库的东西最终都会得到自己的编辑。因此,在这种情况下,您无需从MySQL主数据库中删除记录,而是具有DELETE标志来标记已删除的记录。您可能有多种逻辑可以从主数据库中清除已删除的记录(例如,如果您在记录中使用日期戳,则可以删除所有标记为DELETED且带有LastUpdated时间戳记的记录,该时间戳记是<=上次您上次转储数据;或者,您可以让Access应用程序将文本文件发送到服务器,其中包含已成功从Access数据存储区中删除的记录列表。如果Access数据存储区中存在编辑,那么您将需要一些逻辑来处理从MySQL“ master”数据库中删除的记录上的编辑。

综上所述:

如果您拥有真正的主从关系,那将是微不足道的。如果您真的想通过蛮力做到这一点,则只需将所有MySQL数据表的全部转储到文本文件中,删除Access数据存储中的所有记录并导入文本文件。

我倾向于不这样做,因为您第一次需要脱离纯粹的主/从关系时,就陷入了困境,必须从头开始重写所有内容。

我上面给出的大纲对于主/从服务器非常干净,但是如果您有一些“从属”数据库专用的字段,或者存在于从服务器而不是主服务器中的数据(也就是我正在处理的情况)。

关于mysql - 在mdb文件和MySQL服务器模式中的相似表之间同步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/770004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com