同步数据访问

时间:2010-10-18 07:38:37

标签: sql database excel-vba synchronization vba

几年前,我为同事构建了一个Excel文件,显示来自外部ODBC数据源的大量数据。数据被划分为不同表中的大量数据表。该文件还包含一个允许用户更新数据的按钮。

由于从外部源访问数据非常慢,我实现了一些缓存逻辑,这些逻辑在SQL服务器的外部表中存储了部分结果(不太可能发生变化),并且保持了数据的同步。 excel文件本身只访问SQL服务器。每个数据表都使用SPROC来获取部分数据。

快进5年。 Excel文件的大小已经增加,并且包含了很多工作表和数据,我们的Excel(仍然是2003版本)遇到了问题。所以我的同事将文件分成了两半。

现在的问题是,两个excel文件都包含更新数据的逻辑,用户可以点击文件号中的更新按钮。 1而另一个用户已经在更新文件号。 2。

这就是更新逻辑变得狂暴并产生垃圾的地步。

对于两个excel文件,只需要执行一次更新运行,因为它会更新两个文件中显示的所有数据。它非常昂贵,持续5到15分钟。

我可以将更新运行分成两半,但这不会使它更快,更新这两个文件需要两倍的时间。

我想到的是某种互斥体:用户A点击更新按钮并开始更新运行。用户B也想要更新,但(VBA / SPROC)逻辑检测到已经有更新正在运行并等待它完成。

2 个答案:

答案 0 :(得分:1)

您可以在具有Seri​​alizable隔离级别的事务中执行更新;您的更新代码需要检测并处理SQL Server错误1205(并向用户报告另一个更新正在进行中)。

或者,为每行添加一个rowversion时间戳,如果加载后没有更改,则只更新一行。

答案 1 :(得分:1)

但是当A完成后,B将“无所事事”地运行更新。

相反:当A单击更新时,调用存储过程,该过程以异步方式触发更新。 更新开始时,它会查看上次运行自身的时间,如果时间不到X分钟,则会退出。