2010-06-20 152 views
4

我有一个使用Access的内部系统非常大的客户端,它在内部用于处理几乎所有的公司数据。他们需要一个Web前端来访问该数据库中的客户数据,并且将运行在不同的服务器上。鉴于Access的限制,前端可能会使用MySQL。同步访问数据库和MySQL

这留下了同步数据的问题。它不需要一秒钟,即使每天都会很好,但我真的不确定是否有这样做的好方法。

考虑到现有系统的范围,将整个系统移动到另一个数据库(如MySQL)将花费大量时间和工作量。

有没有实际的方法来实现这个目标?

+1

什么类型的应用程序围绕访问数据库构建?他们都是访问表单吗?如果他们可以将数据模型和数据移动到mysql中,然后将mysql中的表链接到访问数据库中,并且仍然可以使用这些表单而不用其他技术重写它们。 – Doug 2010-06-20 19:19:12

+0

我同意道格 - 应该只有一个数据库。他们可以使用Access作为前端来访问MySQL,对于那些悲伤的人来说...... – 2010-06-20 19:24:18

+0

啊,当你说“前端可能会使用MySQL”时,你的意思是你会使用Access后端替换数据存储到MySQL。不是说你会用MySQL替换Access前端,这是没有意义的。嗯,但这不是你在第三段中的意思。 – 2010-06-20 20:17:15

回答

1

我会让一位有经验的Access开发人员升级Access应用程序,以使用SQL Server Express代替MySQL的数据。我会选择MySQL上的SQL Server Express,它很可能会更好地与Access一起工作,您可能会发现MS Access和SQL Server的联机支持比MS Access和MySQL更为失败。

这项工作可能需要几个星期或更多的经验丰富的人。当然,这个系统越长,需要的时间越长。

一个因素是,如果客户希望数据从网站下载到数据库或者只是将数据发布到网络上?如果只是发布到网络上,那么使用查询更新Web数据库的建议可能会奏效。如果采用这两种方式,那么事情开始变得棘手,并且升级到SQL Server将来会是更好的选择。

+0

对不起,我应该提到它,但它让我心生不安。数据只需要具有读取权限。所以数据唯一的变化来自于内部访问方面。 – 2010-06-20 23:03:44

+0

这是现在。因此编码一些查询来复制数据将工作。但是,长期的答案是将数据升迁到SQL Server Express。迟早他们会希望人们能够通过网络输入/更新数据。 – 2010-06-21 01:34:25

2

从Access中可以相当容易地复制内容,例如使用运行SQL查询的按钮,该查询将数据复制到Internet上的MS-SQL数据库。

我不会去找MySQL,如果你不必这样介绍字符编码问题,复制到MS-SQL更明智。

当然要保持警惕,你将有3个系统:1个访问系统,1个网络系统和1个用于复制数据的系统。这种情况是,并引入更高的维护成本。

+0

+1因为非常谨慎。 – molf 2010-06-21 17:12:54

1

如果Web数据库可以在Access用户所在的本地局域网上访问,那么将后端升迁到服务器数据库并拥有单个数据库会更有意义。但事实并非如此,因为Web服务器可能不是本地的(这通常是件好事)。

如果我理解你的意见,这是一个明确的主/从关系,Access数据库是主数据库,而网站数据库是从属数据库。在这种情况下,您应该能够定期更换网站数据库。有几个方法可以做到这一点:

  1. ,如果你可以访问整个互联网MySQL的端口,可以使用ODBC只需将表导出到MySQL,通过ODBC。我不确定在导出之前是否必须在MySQL中删除每个表,但只要尝试运行导出就会发现。

  2. ,如果你不能到远程数据库的直接连接,那么一种选择是运行本地MySQL实例,出口,然后转储数据库的SQL脚本,上传到网站并运行它来替换现有的数据库。我已经做到了这一点,并没有听起来那么困难。如果它不需要自动化,那么最好在两端安装phpMyAdmin并使用它。如果需要自动化,这是一个不同的问题,我不知道MySQL命令,但我确定找到这些命令并不难。

3

我的步骤,以 “同步” 更像是超快的备份

在Windows 1.-转换数据库与此

http://www.bullzip.com/products/a2m/info.php 

其转换速度快大多数数据库到YOURDATABASE.sql

2.-在Linux(我使用Ubuntu)

因为你必须经常这样做我推荐结束更正脚本。我的

例如:

#!/bin/bash 
#edita tablas 
szAnswer=$(zenity --title="YOURDATABASE" --entry --text "some text" --entry-text ""); 
fromdos $szAnswer; 
sed -i 's/DATETIME\ DEFAULT\ .*/DATE,/g' $szAnswer; 
sed -i 's/DATETIME/DATE/g' $szAnswer; 
sed -i 's/FLOAT/DECIMAL(10,2)/g' $szAnswer; 
sed -i 's/(NULL,/(\ ,/g' $szAnswer; 
sed -i 's/ NULL);/\);/g' $szAnswer; 
sed -i 's/,\ NULL,/,\ ,/g' $szAnswer 

zenity程序默认是在Ubuntu 你需要 “fromdos” 在Windows回车

则: 3.-的mysql -u theuser -pthepass

mysql>来源YOURDATABASE.sql

并且您在约5分钟内完成。