首页 新闻 会员 周边 捐助

怎么实时监测access数据库的变化呢

0
悬赏园豆:10 [已解决问题] 解决于 2015-04-07 10:30

  有什么办法可以实时地监测access数据库的变化,做一个界面要求实时地显示数据库中的变化。如表的增删改等。求大神啊

mcfer的主页 mcfer | 初学一级 | 园豆:144
提问于:2014-10-21 10:26
< >
分享
最佳答案
1

首先,你要能够理解,语言的博大深奥。

其次,你要能够理解给你一把美工刀,不是为了让你使出小李飞刀的绝技,杀死2000米外的在Secret Agent重重保护之下的政治人物。

1、实时,什么叫实时,有时候1个小时报告一次就实时了,有时候,上午报告一次,下午报告一次就实时了,还有的时候,报告,发现敌人了,要不要打,快马送回京城,讨论7天后,再快马送回,三个月已经过去了。

2、Access这种东东,属于单机型数据库,如果有人把他当网络多用户数据库了,那也已经是超能力发挥了,

你要知道有没有变化,看看文件的修改时间就行了。

3、其实我不确定在ACCESS没有被关闭前,是否修改时间会产生变化,因为ACCESS其实是有自己的文件机制的。

4、其实我是想说,这个任务可能很简单,也可能是Mission Impossible,你自求多福吧。差不多是给你一把美工刀,

无法接近目标人物2000米以内,你想办法吧。

收获园豆:10
爱编程的大叔 | 高人七级 |园豆:30844 | 2014-10-21 10:39

Thank you for your philosophy in programs.

mcfer | 园豆:144 (初学一级) | 2014-10-21 10:44

@mcfer: 不知道你知道什么,有时候回复就变得很无趣。

1、你懂英文。

2、不知道懂不懂编程。 (修改,你知道FileSystemWatcher,应该懂编程吧)

3、可以通过OLEDB连接ACCESS,但不保证一定可以在被其他程序占用的情况下连接。

4、ACCESS是一个相对不稳定的数据库,如果很多的连接及非法操作,可能出现文件错误。

5、虽然官方不支持ACCESS进行多用户连接,但实际上还是可以突破的。

如果从比较土的金额来说,我或者我的朋友尝试用ACCESS开发,并卖出超10万的价格(单客户),后来发现这个很无聊,自己整自己,用SQL Server啥事都没有了。

6、成功连接ACCESS后,ACCESS是没有通知机制,告诉你哪个数据表变化了。

7、如果数据表有修改时间之类的字段,这会好办点。如果没有,那就比较难办...

8、类似于想随时知道你的小孩的去向,如果这是一个市场,那就会有人制造360手环。

如果是一个单一客户需求,可能解决这个问题所需要消耗的人力成本已经远远超过客户(也可能就是你)

所能承担的费用。

9、虽然一直想谦虚来着,不过园子里比我更熟悉ACCESS的两只手应该能数得过来。

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-10-21 12:07

@爱编程的大叔: 谢谢你的回答。

1、我现在的需求是监视一个mdb文件,这是arcgis中的一种数据类型,用来处理空间数据的,具体叫做Personal Geodatabase。

2、这是个access数据库,因为在空间数据经常涉及到空间对象的增加,如点的增加,路线的增加等,对象的删除,表的创建如新增加一个表用来存储河流的分布等。

3、里面的存储格式是ArcGIS软件自己定义的。非二进制,比较方便读取。可以直接打开看到里面的存储方式。

4、没有存储修改时间。

5、不知道access里面有没有日志机制。

6、我的想法是用一个可视化界面程序,其中用一个线程去监控access的变化,主要是不知道怎么获取数据库的是怎么变化的,这就是问题所在。

mcfer | 园豆:144 (初学一级) | 2014-10-22 15:32

@mcfer:  Access是一种单机数据库,原则上不建议两个软件同时进行连接。

也就是说地图在连接写入,你也去读,这是可能会发生不可测问题的。

假设你完全不在乎,硬要弄。

1、监视文件时间变化,发现有变化,

2、软件(假设是NET)使用ADO.NET+OLEDB连接数据库

3、每个数据表遍历,先看记录数有没有变化。(新增)

4、要判断记录是否有修改,这个在没有其他辅助手段(修改时间之类的)的情况下,是一个几乎不可能完成的任务,因为你得保存所有的数据,再对比所有的数据。ACCESS给你这么一折腾,直接就OVER了。

5、所以如果有可能的话,找找看有没有什么字段是表示修改时间的,这样你可以通知查询修改时间大于上次你检查的时间来得出哪些数据变化了。

6、设计界面

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-10-22 16:08
其他回答(3)
0

用.net FileSystemWatcher监测类

Set sail | 园豆:540 (小虾三级) | 2014-10-21 10:32

这个类只是能够监测到变化了,但是不能获取access具体的变化啊。

支持(0) 反对(0) mcfer | 园豆:144 (初学一级) | 2014-10-21 10:34
0

要是我做的话,如果是监控这个表的更改情况,最合适的是增加操作日志了,若是系统已经存在了,无法加日志只有一个数据库的话,我的思路是,对关注的表进行数据copy,实时对比两个表的数据变化,然后将变化值放到监控表里面(同步更新时间自己设置),界面上只要实时显示监控表的数据就行了,这个办法比较死板,额,当做差不多能实现吧

风醉 | 园豆:1197 (小虾三级) | 2014-10-21 13:59

谢谢你的回答。access有日志可以操作吗?我要做的是监控一个mdb文件,用一个界面显示里边的任何数据的变化。

支持(0) 反对(0) mcfer | 园豆:144 (初学一级) | 2014-10-22 15:05

@mcfer: access应该是没有日志操作,可以重写增删改方法

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2014-10-23 08:51

@风醉: 重写增删改方法?具体怎么操作呢?

支持(0) 反对(0) mcfer | 园豆:144 (初学一级) | 2014-10-24 10:55

@mcfer: 我的意思是 比如你有个 ADD方法,你可以重写这个方法(这和你本身的add方法有关,要是接口那种可以直接重写的那方便点,不是接口形式,可能只能改代码了),在插入数据库的基础上,把新增的内容插入到你想要的数据变化表中

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2014-10-24 11:24

@风醉: 我是直接修改表,不是用代码修改数据。。。,但是要检测到表已经被修改了

支持(0) 反对(0) mcfer | 园豆:144 (初学一级) | 2014-10-24 11:25

@mcfer: 那用那种取巧的办法呗,我上面说了,对关注的信息,实时用程序查询,发生改变就记录

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2014-10-24 11:27

@风醉: 谢谢你。但是这样的话 ,一是表里没有存储时间的字段;二是效率的问题

支持(0) 反对(0) mcfer | 园豆:144 (初学一级) | 2014-10-24 11:30

@mcfer: 数据量不大的话,你如果1秒巡检一次,不会影响的,数据量大的话我相信你也不会用Access,多用几个线程,一个线程监控一个表,差不多,不是办法的办法,最直接的还是修改插入的系统源码

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2014-10-24 11:34

@风醉: 好的,谢谢你。

支持(0) 反对(0) mcfer | 园豆:144 (初学一级) | 2014-10-24 11:34
0

窗体的属性面板中有一个计时器,你可以在窗体打开时激活它,然后把刷新的代码写在计时器的事件里计时器的单位是毫秒

一曲轻扬 | 园豆:375 (菜鸟二级) | 2024-06-23 18:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册