在程序中如何知道数据库里面的值发生了变化?

fidt982 2005-01-16 11:30:58
我现在用的是SQLSEVER数据库,,在我的服务器这端,我想实现当数据库里的值发生改变时,就调用一个程序,另外数据库的值是下面的客户端更改的.通过什么东西来实现.
...全文
410 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fidt982 2005-01-20
  • 打赏
  • 举报
回复
谢谢两位,,结帧,分数在少,望见谅..................
weill 2005-01-19
  • 打赏
  • 举报
回复
请注意的一点是,请使用SQL服务器的时间,而不要使用每个客机的时间哦……
否则可能会一片混乱,咯咯……
weill 2005-01-19
  • 打赏
  • 举报
回复
肯定要达到当其中的一台客户端对下面硬件进行改动时,其它的客户端界面也要跟着变过来.

如果是就这句话而言,那么,那是容易得不能再容易了。
只要加一个时间日期字段就完事。这个字段里的内容是最后被修改的日期,时间(例“2005-01-01 12:55:30”)。

每个客户端每过1秒(注意,这个值要根据客机台数,网络情况而定,决定了客机的响应时间,和服务器的负担)取一次这个值与现有值对比,如果不同,则进行更新。

就楼主的项目而言,不应使用长时间联接的ADO,而使用用完就关的ADO比较好,呵呵。

fidt982 2005-01-19
  • 打赏
  • 举报
回复
这样的,我现在做的是一个网管系统,总体分成三块,底层通信一块,SQL服务器一块,上面的的客户端是一块,底层通信专门负责和下面的硬件找交道,进行通信,并把相关的信息入数据库中,用户界面这块只和数据库打交道,把要发送的相关命令等都直接存入到数据库中.还要把相关的信息转化成界面形式展现给用户.
图示:
底层通信---------------SQL服务器------------------网管A
|
|
|_____________________网管B
|
|_____________________网管C

当SQL服务器中的数据发生修改时,客户端这块的界面也要跟着变化
客户端也可以对下面的硬件进行配置,比方如对整个硬件设备的拓扑图的管理等,肯定要达到当其中的一台客户端对下面硬件进行改动时,其它的客户端界面也要跟着变过来.

谢谢两位了,希望给个建议,这个东西年前还得交,急啊!!!!!!!
kwokwinglau 2005-01-19
  • 打赏
  • 举报
回复
<weill(每天提一问,一天学一点) ( )>說的并发操作可能不是楼主想要的功能.并发操作是要在开始修改前就设了标志位,完成后改回来.其它客户要访问就先判断标志位,看是否可修改.
kwokwinglau 2005-01-19
  • 打赏
  • 举报
回复
樓主可以把要應用到的實例說一下,大家可能有更感性的認識.問題也就容易有正確的解決方法.
bigchinacake 2005-01-19
  • 打赏
  • 举报
回复
在数据库中设置触发器,更新数据时触发,触发器动作就是调用你的那个外部程序
kwokwinglau 2005-01-19
  • 打赏
  • 举报
回复
weill(每天提一问,一天学一点) 提的方法不错啊.

每一台客户端第一次运行就到数据库得到最后修改时间(LastTime)作为界面更新时间(UpdateTime),并使用数据库中的界面方案(UpdateInterface();),每隔一段时间取LastTime与UpdateTime比较:
if(LastTime>Update)
{
UpdateInterface();
UpdateTime=LastTime;
}

客户端在对下面的硬件进行配置后,Update table set LastTime=Now().
fidt982 2005-01-18
  • 打赏
  • 举报
回复
昨天又另外想到了一个问题,当下面的客户端更改数据后然后更改标志位,然后被上面服务器捕获,然后调用相关程序,然后将标志复原 //这样好像基本上没有什么问题

但是下面其它的客户端怎么跟着更新数据了,我总不能为每个客户端设定一个标志位吧,再说我也不知道下面有几台客户端啊??/

??????
weill 2005-01-18
  • 打赏
  • 举报
回复
和和,说过了,你钻进了牛角尖尖。
也就是说,你的思路错了……

我们单位有一个软件公司使用SQL为我们设计的软件,开始的思路也是和你一样。
不过,和和,遗留下的很多问题都让他们大伤脑筋。也就是多台机的并发问题。比如,当一台机器调用了一个记录正要修改,又没有修改的时候,别的机器也在调用它正要改。当A机器提交完修改后,B机器也给他来个修改,结果,A机器改出的结果不是A机器的结果,而是B机器改的结果,并且随之出来的其它的表的统计汇总也让人哭笑不得,哈哈。

完美的解决的方法吗?和和,只有一句话,不过,偶就是不说,偶要看看能不能憋死你,哈哈。

再说一句,你的思路错了……
说了这么多,你应该自个去想了,这不是个技术问题,是个头脑急转弯的问题。
不要等我给你再成的答案……
fidt982 2005-01-17
  • 打赏
  • 举报
回复
在我的服务器这端,要将这个表的信息读到内存中,并且发生改变时,里面的值也要发生改变,触发器不能用

weill(每天提一问,一天学一点)
不知有没有相关文章可以看一下,谢谢了,
quickreport 2005-01-17
  • 打赏
  • 举报
回复
不能用触发器吗?
kwokwinglau 2005-01-17
  • 打赏
  • 举报
回复
暈.原來樓上就是樓主本人."不停地查看標志位",我看可以按你的時間緊迫性決定,可以用定時器.另外還要求"相關程序"是衹可運行一個的.
kwokwinglau 2005-01-17
  • 打赏
  • 举报
回复
樓上的方法不錯啊.用觸發器監視是否修改好了.
weill 2005-01-17
  • 打赏
  • 举报
回复
和和,其实,真正的规范的SQL网络多机编程的思路根本不是楼主所想。
楼主进了牛角了。
fidt982 2005-01-16
  • 打赏
  • 举报
回复
我自己也想到一个办法,不知道可行不可行,
在数据库中在建个表,专门放一个标志字段,当客户端对数据库进行修改操作时,同时修改这个标志位,

在服务器这边,建个一个线程,不停地查看这个标志位,当发现标志位更改时,即调用相关程序,

就是我不知道这样是不是太占资源了一点,也不知道可行不可行,望哪位给个建议
weill 2005-01-16
  • 打赏
  • 举报
回复
提示,可先建立一个结构来存放记录中各个项目的值。

当然,上面的做法是本人所能想到的方法,实现代码可能很长,建议做成函数。而且数据表结构发生变化时,可能较难维护。但本人想不出其它好办法。

weill 2005-01-16
  • 打赏
  • 举报
回复
可用两个ADO来实现。
1、数据库设立标志字段(自动增加型)。
2、定义 ADO1 ADO2
3、ADO1联接数据库,当ADO1将要发生对数据库的存操作时,将ADO1当前指向的记录的内容取出,并把标志字段值取出。
4、ADO2的SQL语句根据标志字段值生成,起动ADO2,据标志字段值取回ADO1指向记录的数据。
5、将ADO1当前记录的内容与ADO2当前的内容进行对比。便可知道数据库里的值是否发生改变。

1,178

社区成员

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

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