数据库写入数据和读出数据的时候怎么样防止冲突

wangwei244157887 2011-01-03 02:48:50
我现在共用一个Adoconection,两个AdoQuery,如果我正在导出数据,然后突然写入数据的话,程序就会报错,有什么方法,可以阻止这种错误的发生呢
...全文
584 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ok1411 2011-01-11
  • 打赏
  • 举报
回复
加个TCriticalSection
goodhj 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wangwei244157887 的回复:]
但是我是写入优先,如果突然遇到写入操作,我希望导出能暂停,通过一个AdoConnection
[/Quote]
不能实现暂停,没有断点续传,呵呵,只能一件一件的做完,就是给等待提示,做完告知。
cockroachhz 2011-01-11
  • 打赏
  • 举报
回复
可以设计两个表,一个专门用于写,一个专门用于读。如TableName_1、TableName_2,_1表用于写操作,_2表用于读操作,两个表的字段一样,数据流程为:_1表写入数据,在做完某个动作后把数据插入到_2表,然后删掉_1表的数据。
老杨_sz 2011-01-08
  • 打赏
  • 举报
回复
4楼正解
「已注销」 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wangwei244157887 的回复:]

但是写是一定写的的啊,读可以暂停一下,比如我突然在读的过程当中要写一次数据,是不是考虑表映射这种机制,建立个虚拟表,读数据从虚拟表里面读,呵呵
[/Quote]

那我去看下事务处理,呵呵,学过,忘记了,并发控制之类的,什么饿死机制啊
「已注销」 2011-01-07
  • 打赏
  • 举报
回复
但是写是一定写的的啊,读可以暂停一下,比如我突然在读的过程当中要写一次数据,是不是考虑表映射这种机制,建立个虚拟表,读数据从虚拟表里面读,呵呵
风之谷 2011-01-07
  • 打赏
  • 举报
回复
开事物吧
「已注销」 2011-01-07
  • 打赏
  • 举报
回复
但是我是写入优先,如果突然遇到写入操作,我希望导出能暂停,通过一个AdoConnection
goodhj 2011-01-07
  • 打赏
  • 举报
回复
导入,写入操作前开事务,加判断就能解决

if Not Adoconection.InTransaction then
begin
try
Adoconection.BeginTrans;
//导入操作或者写入操作
Adoconection.CommitTrans;
except
Adoconection.RollbackTrans;
end
else
//提醒用户等待
kye_jufei 2011-01-06
  • 打赏
  • 举报
回复
這樣會出現數據髒讀,可根據實際需要採取以下方法:
1.鎖機制。。。
2.事務處理。。。
  • 打赏
  • 举报
回复
用锁,声明一个BOOLEAN变量,为真表示R/W操作正在进行,为假则可以进行R/W操作
sundayzhao 2011-01-05
  • 打赏
  • 举报
回复
用两个Adoconection即可。如果不希望出现脏读,读数据的时候可以加锁。
无语孩童 2011-01-05
  • 打赏
  • 举报
回复
Adoconection.beginter...

你的事件
Adoconection.commit
lyhoo163 2011-01-03
  • 打赏
  • 举报
回复
读写数据库有先后之分,如同时操作,可采取事务处理方式。
「已注销」 2011-01-03
  • 打赏
  • 举报
回复
那就是说没有什么好办法能同时操作了?如果真这样就只有提醒用户了
bdmh 2011-01-03
  • 打赏
  • 举报
回复
当然报错,不能这么干,你必须完成一个再做下一个

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧