在我的项目中,用户在Excel表中维护数据(带有适当的行和列标题)。然而,随着时间的推移,Excel表变得相当大。数字数据量不算太大(每年每人10毫巴),但是由于数据存储在他们自己的计算机上,所以当他们离开或项目结束后,这些数据就会丢失。
我知道Excel为大多数数据库提供了<>ODBC驱动程序。现在,我正在尝试开发一个原型,以演示数据可以存储在一个中央服务器上,多个人可以直接从该服务器读取和写入数据。为了简单起见,我只是计划编写一些基于(https://stackoverflow.com/a/3768327/4752883)的VBA/Python代码,这将从特定的工作表中获取基于行和列的数据,并将其转储到数据库中。还有其他方法可以实现,例如使用直接连接到MySQL (https://www.youtube.com/watch?v=E_kn71R9BL0)
然而,我在这里看到了一个问题。假设userA和userB将tableA数据库中的数据从MySQL数据库中提取到MySQL中。userA对表进行更改(创建tableB),并使用宏将其写入MySQL数据库。同时,userB在Excel中也打开了相同的表。他对表进行更改(创建tableC),并写入userA的同一行和同一列。这将导致覆盖userAs的数据。这不是有意的行为,因为理想情况下,userB会知道数据库已经由userA更新(类似于在OneDrive共享的Excel工作簿中启用协同创作的方式)。然而,在我的研究中,我没有看到userBs Excel实例在MySQL数据库中的数据被userA更新时会立即更新和通知D16的明显方式。
我可以想出以下两种方法来解决这个问题:
userA已经将其tableB更新到MySQL数据库。当userB试图使用宏将表(tableC)的版本写入数据库时,而不是盲目地写入表时,首先检查MySQL数据库中的表的该行和列中是否存在任何现有数据。如果有,那么警告userB在MySQL数据库中有新的数据,这些数据在他的Excel实例中还没有更新。然后将数据从服务器获取到一个单独的工作表(SheetB)中。然后,他们可以从Sheet main中的额外数据中更新要在SheetB中推送的主表/表。excel宏保存了一条记录,即userB在过去5分钟内更新了其Excel宏(例如),如果它们更新了,则假定用userB S版的表覆盖MySQL表是可以的。tableA。userA从MySQL数据库提取到MySQL工作簿中。然后修改表(创建tableB)并将数据推送到单独的表tableD (其中tableD是tableA和tableB之间的差异)。userB从数据库中提取并进行更改(创建tableC)。当他们从tableC推进到MySQL数据库时,他们创建了tableE,这是tableA和tableC之间的区别。userA和userB都可以根据需要对各自的表tableB和tableC进行一定时间的更改。定期将增量tableD和tableE附加到tableA (使用MySQL events https://dev.mysql.com/doc/refman/8.0/en/events-overview.html)。在这种情况下,userA或userB在第一次从MySQL数据库中提取时都不能更改表中已经存在的任何内容,但它们可以附加到表中。我可以看到,如果有更多的用户,这将变得更加复杂。然而,在我看来,这个问题应该很常见,必须在数据库中解决。我遇到了file-locking,但我看不出它如何解决不覆盖userAs变化的问题。
Option#1或Option#2是我们所能做的最好的技术,还是有更复杂的技术(已经内置到SQL数据库中),使多个用户可以从Excel或其他应用程序中读写数据库?
为了提供更多的细节来解决@danblack和@Hila-DG的问题,另一项要求是,来自不同用户的所有数据也需要被安排到一个中心位置,这样可能没有在处理特定工作表的人,如果他们有适当的访问权限,也可以对这些数据运行一些工作。
发布于 2018-08-27 05:00:51
这是一个很好的问题,你显然已经做了你的研究。解决方案是不使用Excel,因为Excel没有写回功能!
我将详细介绍@danblack的答案:您需要一个基于云的电子表格编辑系统(google,office 365,dropbox,其他)基于云的电子表格将在基于云的电子表格更新时在相关的利益相关者之间共享。如果用户A添加了某些内容,而用户B添加了一些内容,那么这两个更改都将得到维护。如果用户A添加了什么,而用户B删除了同一行,那么您可以看到更改并要求他们澄清等等。
要这样想:如果你的问题听起来很简单,你需要找到一个简单的解决方案。
https://dba.stackexchange.com/questions/215929
复制相似问题