多个Query同时操作一张数据表,会引起冲突吗?很急呀!!

时间:2021-03-28 14:47:42
多个Query同时操作一张数据表,
每个Query查询,增加,删除,可能要占较长时间,
会引起冲突吗?
如果会,该怎么用程序代码避免冲突发生呢??
(这些Query在MDI的不同窗口下,但是会同时发生操作
一张数据表)

16 个解决方案

#1


void __fastcall TForm1::ApplyButtonClick(TObject *Sender)

{
  Database1->StartTransaction();
  try
  {
    CustomerQuery->ApplyUpdates(); // try to write the updates to the database
    Database1->Commit(); // on success, commit the changes;
  }
  catch (...)
  {
    Database1->Rollback(); // on failure, undo the changes
    throw; // throw the exception to prevent a call to CommitUpdates!
  }
  CustomerQuery->CommitUpdates(); // on success, clear the cache
}
TQuery写SQL很方便,但是如果调用他的那些函数,如delete()有可能会给你带来不必要的麻烦。

#2


冲突肯定是有的,尤其在网络环境下。
你最好在每次更新数据后都Close一下再Open.

#3


这样就不用写SQL语句吗?
Query怎么知道要查询哪些字段?

#4


可能会发生冲突,有时不会,看你用什么数据库了,看他本身的一些设置如隔离级别等,可以避免冲突,但最好,同一时间只有一个tquery操作,在多线程中,用同步吧,以防脏读!!

#5


是有冲突的!

你要处理同步的问题!·

#6


如果不用多线程呢?

#7


c/s 的结构中,一定会有冲突,vivshi的方法,可以合理的避免它

#8


他的方法没有
Query->Open();
或者Query->ExecSQL();
阿,SQL语句还有用吗?

#9


每个线程用一个TADOConnection(或都不用),启用数据库的事务和锁,让数据库去处理冲突.
建议使用Oracle,它在处理锁,冲突和死锁检测方面能力都很强.

#10


用缓寸更新呀。
建立事务,成功commit,失败commit.

#11


那就是SQL语句不用写啦?

#12


如果更新失败,数据还是丢失?!

#13


用缓存更新,效果非常好,不用处理同步的复杂问题.

#14


Mark@_@
学习

#15


我觉得使用会话期统一管理应该就可以了

#16


xuexi

#1


void __fastcall TForm1::ApplyButtonClick(TObject *Sender)

{
  Database1->StartTransaction();
  try
  {
    CustomerQuery->ApplyUpdates(); // try to write the updates to the database
    Database1->Commit(); // on success, commit the changes;
  }
  catch (...)
  {
    Database1->Rollback(); // on failure, undo the changes
    throw; // throw the exception to prevent a call to CommitUpdates!
  }
  CustomerQuery->CommitUpdates(); // on success, clear the cache
}
TQuery写SQL很方便,但是如果调用他的那些函数,如delete()有可能会给你带来不必要的麻烦。

#2


冲突肯定是有的,尤其在网络环境下。
你最好在每次更新数据后都Close一下再Open.

#3


这样就不用写SQL语句吗?
Query怎么知道要查询哪些字段?

#4


可能会发生冲突,有时不会,看你用什么数据库了,看他本身的一些设置如隔离级别等,可以避免冲突,但最好,同一时间只有一个tquery操作,在多线程中,用同步吧,以防脏读!!

#5


是有冲突的!

你要处理同步的问题!·

#6


如果不用多线程呢?

#7


c/s 的结构中,一定会有冲突,vivshi的方法,可以合理的避免它

#8


他的方法没有
Query->Open();
或者Query->ExecSQL();
阿,SQL语句还有用吗?

#9


每个线程用一个TADOConnection(或都不用),启用数据库的事务和锁,让数据库去处理冲突.
建议使用Oracle,它在处理锁,冲突和死锁检测方面能力都很强.

#10


用缓寸更新呀。
建立事务,成功commit,失败commit.

#11


那就是SQL语句不用写啦?

#12


如果更新失败,数据还是丢失?!

#13


用缓存更新,效果非常好,不用处理同步的复杂问题.

#14


Mark@_@
学习

#15


我觉得使用会话期统一管理应该就可以了

#16


xuexi