C++Builder 程序员博客
4 Dec
在DBGrid显示数据的同时,还有一个线程在源源不断的对数据库写记录。
一般情况下,DBGrid是能静态显示数据库数据的。但是由于数据源不断更新,请问怎么解决这样的冲突?
现在的问题是,在有新数据进入数据表之后,DBGrid刷新成空表格。
// 你是在其他工作线程里面刷新DBGrid ? // 还是在主线程里面刷新DBGrid ?
// 保持静态的,那你干脆就不要用DBGrid了 // 以为DBgrid这种需要和数据集(Query等) 数据源控件(Datasource等)实时挂接 // 你换成其他的表格控件如StringGrid,这种数据就是静态的,你读取了多少,往里面 // 添加就ok了,
记录 DataSet 的 RecNo,刷新,或者是关闭表,再重新开启表,再恢复 DataSet RecNo
但如果你是用 DataSet 的方法直接插入数据,那么和该 DataSet 控件绑定的 DBGrid 会自动刷新,但如果是 SQL 命令插入的数据,你就只能使用记录 RecNo 的方法来保持原来的游标,或者刷新后直接将游标移动到最有一个记录 DataSet 的 Last() 方法
不要用DBGrid,直接用StringGrid,其他线程插入一条就显示一条。
有什么办法可以在载入过一次之后关掉DBGRID或者DATASOURCE?
想要再次载入的时候再打开?
请大虾帮帮忙
谁帮忙解决下哈,分不够可以额外加
不知道你的数据载入是如何做的。如果本身DBGRID的Dataset没有改变,其控件是无法得知数据源的数据是否有变更的,前面已经说过用轮询的办法。
数据载入就是自动的载入的,链接上DATASOURCE就可以了,没有额外的操作。
轮询是指用一个计时器定时刷新吧?
那到了时间后,怎么让他重新载入一次数据呢?
ado_Query->SQL->Add("select *from TAB");这样来加数据到DBGRID里去的
“还有一个线程在源源不断的对数据库写记录”是怎么实现的?
动态的加载数据,控件使用静态的。
能否用一个临时表中转.
当有新数据时对临时表操作.
怎么判断DBGRID已经载入了数据,我把ACITIVE关了呢?
可以看临时表是否有数据就知道 DBGRID是否已经载入了数据
这个问题还是没有搞定。
请大虾们帮忙。
我把问题再阐述一遍:DBGrid显示SQL里的数据,但是由于SQL里的数据是在即时更新的,这样怎么让DBGrid也在即时变化?
请大虾们指教。可能的话,希望说的越详细越好。