2013-04-16 32 views
0

两个独立的exe(Process)使用相同的数据库和更新数据库,如果用户在Delphi xe2中同时运行数据库更新的两个exe文件同步数据库操作。如果我们运行一个exe,它看起来像挂起直到在数据库中进行更新。我正在使用ODBC连接。请建议。在Delphi中同时使用两个独立EXE的数据库更新

我正在使用控制连接到数据库中的两个exe(进程)。 我使用的数据库是Sybase SQL Anywhere的12

+2

数据库这样做与交易 –

+0

你是否一直打开这两个连接?只有准备好更新时才应打开连接,然后立即关闭它 - 在两台计算机上都执行此操作。如果您注意只在必要时保持连接处于打开状态,则Sybase应该处理剩下的连接,并且您将同步。如果你一直保持开放状态,你可能会遇到锁定/死锁问题,这会阻碍你。 (如果关闭但仍然可能发生的情况仍然会发生)。当某些事件挂起时,你是否看到错误消息或某个时间点的超时? – Vector

+1

@user它通常有意义写Delphi版本和用于连接到服务器的库 –

回答

2

什么,我可以谷歌,因为全球又名WatcomSQL的两个版本:服务器和UltraLite

1日的问题,当然,是你是否使用事务: http://en.wikipedia.org/wiki/Database_transaction

尽管大多数RDBMS需要明确使用事务,但一些简化的quazi-RDBMS(如MySQL或Advantage)不需要。而且它看起来SQL Anywhere也让你在没有事务的情况下工作。这是一个陷阱:在没有交易的情况下开始可能会更容易,但它只适用于拥有单一独占客户端的情况。 http://infocenter.sybase.com/help/topic/com.sybase.help.sqlanywhere.12.0.1/uladmin/fo-databases-s-5108100.html

如果您削减了角点并制作了可能是重构它的事务处理程序。或者,Sybase中继服务器可能会有所帮助。


您可能正在使用嵌入式数据库模式或某种本地连接。 如果是这样,尝试将服务器作为单独的应用程序安装,并通过TCP/IP网络连接到它,尽管它在物理上运行在同一台计算机上。

http://infocenter.sybase.com/help/topic/com.sybase.help.sqlanywhere.12.0.1/dbadmin/da-dbconnections.html


如果你使用的交易,那么这可能是在masive插入更新一个交易是否阻塞另一个。例如,如果您使用数字ID字段,则会有一个通用的数据库杀手陷阱来指定新的数据ID为Select MAX(ID) + 1 from TableName,或者可能是其他锁定。 http://en.wikipedia.org/wiki/Snapshot_isolation

虽然SQL Anywhere服务器12 is told使用versioning engine也许它只是使用它的一些交易,并使用在其他交易模式阻塞,受到lock escalations?或者,UltraLite可能不会使用它?

好吧,无论如何snapshot isolation in SQL Anywhere is based on first-writer-wins, which forces writers to block writers

总结一下 - 你有机会锁定数据库事务层,网络层甚至连接库。要监视和检测所有潜在的锁定问题,您需要全面了解给定的数据库以及可以使用哪些监视和测试工具以及如何使用它。它认为您可以更轻松地在Sybase Opserflow的Sybase论坛和Sybase部分找到帮助,而不是在Delphi中。我认为这个答案值得发布在https://dba.stackexchange.com/questions/tagged/sybase

相关问题