每个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()有可能会给你带来不必要的麻烦。
{
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.
你最好在每次更新数据后都Close一下再Open.
#3
这样就不用写SQL语句吗?
Query怎么知道要查询哪些字段?
Query怎么知道要查询哪些字段?
#4
可能会发生冲突,有时不会,看你用什么数据库了,看他本身的一些设置如隔离级别等,可以避免冲突,但最好,同一时间只有一个tquery操作,在多线程中,用同步吧,以防脏读!!
#5
是有冲突的!
你要处理同步的问题!·
你要处理同步的问题!·
#6
如果不用多线程呢?
#7
c/s 的结构中,一定会有冲突,vivshi的方法,可以合理的避免它
#8
他的方法没有
Query->Open();
或者Query->ExecSQL();
阿,SQL语句还有用吗?
Query->Open();
或者Query->ExecSQL();
阿,SQL语句还有用吗?
#9
每个线程用一个TADOConnection(或都不用),启用数据库的事务和锁,让数据库去处理冲突.
建议使用Oracle,它在处理锁,冲突和死锁检测方面能力都很强.
建议使用Oracle,它在处理锁,冲突和死锁检测方面能力都很强.
#10
用缓寸更新呀。
建立事务,成功commit,失败commit.
建立事务,成功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()有可能会给你带来不必要的麻烦。
{
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.
你最好在每次更新数据后都Close一下再Open.
#3
这样就不用写SQL语句吗?
Query怎么知道要查询哪些字段?
Query怎么知道要查询哪些字段?
#4
可能会发生冲突,有时不会,看你用什么数据库了,看他本身的一些设置如隔离级别等,可以避免冲突,但最好,同一时间只有一个tquery操作,在多线程中,用同步吧,以防脏读!!
#5
是有冲突的!
你要处理同步的问题!·
你要处理同步的问题!·
#6
如果不用多线程呢?
#7
c/s 的结构中,一定会有冲突,vivshi的方法,可以合理的避免它
#8
他的方法没有
Query->Open();
或者Query->ExecSQL();
阿,SQL语句还有用吗?
Query->Open();
或者Query->ExecSQL();
阿,SQL语句还有用吗?
#9
每个线程用一个TADOConnection(或都不用),启用数据库的事务和锁,让数据库去处理冲突.
建议使用Oracle,它在处理锁,冲突和死锁检测方面能力都很强.
建议使用Oracle,它在处理锁,冲突和死锁检测方面能力都很强.
#10
用缓寸更新呀。
建立事务,成功commit,失败commit.
建立事务,成功commit,失败commit.
#11
那就是SQL语句不用写啦?
#12
如果更新失败,数据还是丢失?!
#13
用缓存更新,效果非常好,不用处理同步的复杂问题.
#14
Mark@_@
学习
学习
#15
我觉得使用会话期统一管理应该就可以了
#16
xuexi