在DBGrid显示数据的同时,还有一个线程在源源不断的对数据库写记录。
一般情况下,DBGrid是能静态显示数据库数据的。但是由于数据源不断更新,请问怎么解决这样的冲突?
现在的问题是,在有新数据进入数据表之后,DBGrid刷新成空表格。

C/C++ code
// 你是在其他工作线程里面刷新DBGrid ? // 还是在主线程里面刷新DBGrid ?

引用 1 楼 Ring_Pt 的回复:
如果刷成空表 那不是很容易?
如果要刷新數據庫中的當前數據簡單的做法就是用個Timer控件,定時去刷

额,谢谢,可能是我没有解释清楚
现在的症状是刷成空表格,而我不希望,我希望他一直显示。
而且我也不想要什么定时刷新。
比如用户在当前情况下载入了数据的数据到DBGRID上,我期望的是,即使有数据再进入数据库,也不需要吧新数据更新在GBGRID上。就好象,娶了个老婆,当有新MM来骚扰时候,就不鸟她,做个专一的人,哈哈。
一句话,希望DBGrid里的数据是静态的。

引用 2 楼 jxw1987628 的回复:
C/C++ code
// 你是在其他工作线程里面刷新DBGrid ?

// 还是在主线程里面刷新DBGrid ?


主线程刷,其他线程写数据库
谢谢你
请按照你的思路讲下去

C/C++ code
// 保持静态的,那你干脆就不要用DBGrid了 // 以为DBgrid这种需要和数据集(Query等) 数据源控件(Datasource等)实时挂接 // 你换成其他的表格控件如StringGrid,这种数据就是静态的,你读取了多少,往里面 // 添加就ok了,

记录 DataSet 的 RecNo,刷新,或者是关闭表,再重新开启表,再恢复 DataSet RecNo
但如果你是用 DataSet 的方法直接插入数据,那么和该 DataSet 控件绑定的 DBGrid 会自动刷新,但如果是 SQL 命令插入的数据,你就只能使用记录 RecNo 的方法来保持原来的游标,或者刷新后直接将游标移动到最有一个记录 DataSet 的 Last() 方法

引用 1 楼 Ring_Pt 的回复:
如果刷成空表 那不是很容易?
如果要刷新數據庫中的當前數據簡單的做法就是用個Timer控件,定時去刷

不错啊,好方法

不要用DBGrid,直接用StringGrid,其他线程插入一条就显示一条。

有什么办法可以在载入过一次之后关掉DBGRID或者DATASOURCE?
想要再次载入的时候再打开?

请大虾帮帮忙

引用 9 楼 wujiajia1989 的回复:
有什么办法可以在载入过一次之后关掉DBGRID或者DATASOURCE?
想要再次载入的时候再打开?

修改Active属性,切换连接,还是关闭

引用 11 楼 yuanreid 的回复:
引用 9 楼 wujiajia1989 的回复:
有什么办法可以在载入过一次之后关掉DBGRID或者DATASOURCE?
想要再次载入的时候再打开?

修改Active属性,切换连接,还是关闭


你说的ACTIVE是指ADOQUERY的?那关闭了,还能把数据载入到DBGRID里面去呢
又或者说,怎么判断DBGRID已经载入了数据,我把ACITIVE关了呢?

谁帮忙解决下哈,分不够可以额外加

不知道你的数据载入是如何做的。如果本身DBGRID的Dataset没有改变,其控件是无法得知数据源的数据是否有变更的,前面已经说过用轮询的办法。

数据载入就是自动的载入的,链接上DATASOURCE就可以了,没有额外的操作。
轮询是指用一个计时器定时刷新吧?
那到了时间后,怎么让他重新载入一次数据呢?

ado_Query->SQL->Add("select *from TAB");这样来加数据到DBGRID里去的

“还有一个线程在源源不断的对数据库写记录”是怎么实现的?

动态的加载数据,控件使用静态的。

能否用一个临时表中转.
当有新数据时对临时表操作.

怎么判断DBGRID已经载入了数据,我把ACITIVE关了呢?
可以看临时表是否有数据就知道 DBGRID是否已经载入了数据

这个问题还是没有搞定。
请大虾们帮忙。
我把问题再阐述一遍:DBGrid显示SQL里的数据,但是由于SQL里的数据是在即时更新的,这样怎么让DBGrid也在即时变化?
请大虾们指教。可能的话,希望说的越详细越好。