关于报警数据库(50分)

  • 主题发起人 主题发起人 xudai
  • 开始时间 开始时间
X

xudai

Unregistered / Unconfirmed
GUEST, unregistred user!
我有两个表单
time data
1999_12_1 10:20 50
1999_12_1 15:20 55
1999_12_1 23:22 65
此乃时实数据库

还有一个报警上下限数据库
time up down
1999_12_1 10:00 60 50
1999_12_2 8:00 58 48
即修改时保存。
我显示下面的表单(报警表单)
time data up down state
1999_12_1 10:20 50 60 50 偏小
1999_12_1 23:22 65 60 50 偏大
请问应该如何实现?
多谢
 
select a.time,a.data,b.up,b.down,state=
case
when a.data>=b.up then '偏大'
when a.data<=b.down then '偏小'
end
from table1 a
join table2 b on a.time=b.time
 
Sudai:
你可以这样:
在你输入‘data’值后马上做以下判断。

if Table1.fieldbyName('data').value>
Table1.fieldbyName('up').value then
begin
Table1.edit;
Table1.fieldbyName('state').value:='偏大';
end;

if Table1.fieldbyName('data').value<
Table1.fieldbyName('down').value then
begin
Table1.edit;
Table1.fieldbyName('state').value:='偏小';
end;

Table1.refresh;
 
多谢两位
主要是实时数据库中的时间变化幅度和报警上下限数据库的时间幅度不同。
不能用a.time=b.time
比如说a中的数据是30秒增加一个,而b中的数据却是修改后增加一个。
而a中的数据判断时以它对应的报警上下限。
 
哦,那就比较难了。我曾尝试写一个存储过程,但是速度太慢——
你的查询要求和数据表的设计相差较大。查询讲求效率,设计好数据库是
关键。
如果想要查询简单,而且速度快,建议你在第一个表也加up和down两个字段,
每次插入新记录,从第二个表中检索最新的UP和DOWN,放进来。如:
select up,down from table2 order by time desc
这样可以保证第一个表里有最新的报警界限。查询时用一条语句搞定:
select time,data,up,down,state=
case
when data>=up then '偏大'
when data<=down then '偏小'
else '正常'
end
from table1

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
738
SUNSTONE的Delphi笔记
S
S
回复
0
查看
730
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部