如何知道某个纪录的某个字段被更改了?(300分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
估计别人的程序就别活了
 
hehe ,if 你的机器是deeperblue then out of question
 
大家不要幸灾乐祸阿,想想办法!
 
用内存表(去当几个这样的控件),会很快。
 
我觉得光比较的时间肯定用不了10秒的,
但是,你还要接收和发送数据,这个时间就不知道了,跟你的网络速度有关。
 
yck: 你估计一下比较的时间有多长? 我好心里有个底.
hubdog: 内存表怎样用? 我的ttable难道不是一次把数据全部读入内存的吗?
(我的dbf库挺小的)
 
内存表用于保存原有数据库的内容(用于同新数据库对比),新数据库只能用
ttable(它不会一次把全部数据读入内存,想想如果dbf大小几十M,怎么可能)
虽然你记录少,但字段多,如果有可能,最好让对方给数据库加一个时间字段。
边历的话,我在我机器上测试了一下,用一个有10000条记录,7个字段的
paradox数据库,其中包括一个memo字段,一个alpha(20)字段,4个short,一个
自增字段
procedure TForm1.Button1Click(Sender: TObject);
var
Timecount:integer;
a:string;
begin
table1.Active:=false;
//TimeCount:=GetTickCount;//10秒
table1.Active:=True;
//TimeCount:=GetTickCount;//8秒
table1.First;
while not Table1.eof do
begin
a:=table1.FieldByName('id').AsString;
a:=table1.FieldByName('Word').AsString;
a:=table1.FieldByName('testno').AsString;
a:=table1.FieldByName('wrongno').AsString;
a:=table1.FieldByName('meaning').AsString;
a:=table1.FieldByName('delflag').AsString;
a:=table1.FieldByName('randorder').AsString;
table1.Next;
end;
timecount:=(GetTickCount-TimeCount) div 1000;
ShowMessage(IntToStr(timecount));
end;
//包括active:=true的总记时用了10秒,只包括边历的话用了8秒
以后每次更新,用refresh,再边历的话,用时少于5秒
我的机器是k6 200,64M内存,256k Cache ide硬盘quantum 5.1G(火球5代),若用scsi硬盘,会更快)
当然根据数据库的多少,字段的不同,记录的不同,dbase和paradox的不同,
及加上socket传输,字段比较等操作的时间。时间还是很紧张的
所以,我想用来比较的旧库应该用内存表,事先一次性读入(kbmmemtable,深度历
险),他的边历修改时间可忽略不记。
 
多谢hubdog,你提供的数据很有参考价值!

我主要是手边太忙,没时间测试.我再想一想.
 
RX260的构件组中,有MEMTable,同样支持Query,SQL 更新1000条纪录查询1秒就可以,
 
用一个变量监视该表是否执行了更新工作。(比如:增加,删除,等)对于自己运行的表是如此。
对于别人使用的表应该是比较两个表的字节数。

我没有试过,如果行,估计是最快的最简单的方法。
 
fatherlaw: 谢谢回答,不过你应该把我的问题描述看仔细一点,写库程序是别人
提供的,一个DOS程序,随时从卫星接受数据,然后通过直接文件访问
的方式写dbf,我是无法监视他的.

>>"对于别人使用的表应该是比较两个表的字节数"
这个方法只能知道该表是否被改动,还是不能知道具体那里改动了.
而且我根本不需要测试该表是否被改动,因为该表肯定是随时更新
的-----是实时股票数据.
 
To :cAKK
表示关注!
我也正在做有关的事情!也是关于股票数据!
不过,我要做的是循环显示,用到的是SQL查
询后返回用户,然后一屏一屏按顺序显示,但
我现在有一个问题是:怎样去换屏显示?
能否给我一点参考?
 
不了解你发送过去的数据怎么用。
但如果数据集中的记录数很多,
而总的数据量不大的话,也许把所有记录直接发送
过去最快。
 
g622: 数据量不是很大,但全发过去也受不了的. :-)

YunEr: 说的详细点好吗? 这里的大虾们可以帮你的.
 
to cakk:说错了别在意 :)
to YunEr:如果需要每次返回一定数量的记录集,最好的方法是在
表中假入表示顺序的字段,然后根据值的范围返回数据集。
如果需要的是在已有的数据集中每次返回一定数量的记录,
只好挨个move然后自己负责显示这些数据。
如果显示的元件用dbgrid之类的,参看前面有关dbgrid
如何翻屏的讨论
 
to cAKK:
我在深圳,所以上网现在用的不教育网,比较慢
老连不上。对不起没有及时回信!
to g622:
你的回答对我来说是非常有用的!谢谢你!

这是一个股票接收显示系统,接收我不管了,也
管不了,他们会给出隔一定刷新时间的.dbf数据
库的,放在服务器上,我从服务器上读取数据,
然后按用户的意愿显示某些字段,当然是从几个
不同的数据库中取出的,然后在一个固定的高度
(比如说:每次只显示15行),隔一个固定的时
间翻屏(每隔一定的时间,当然很短,再显示下
15个的记录)或者是向上一个一个的消失,下面一
个一个的出来。如此而亦!
不知说清楚了没有?



 
YunEr: 首先问一下,你用的dbf库是不是四川有线台提供的那套标准库,就是
名字是什么show.dbf的库? 如果是,那咱们真的在做同一个东西! :-)

你的情况和我不太一样,你只要从dbf里面读取数据并显示就可以了. 我做的
需要把dbf的数据转发到一个server上的sql server里面去,由server进行
数据发布,因为我们的客户端有很多种,比如VC做的,Java applet的等等,而
数据源是一样的,都来自server发布的数据. 所以我必须把数据通过互联网
发送到另一台机器上.

好,现在谈你的问题. 既然你只要读取dbf数据库并显示,我建议你不如直接
操作dbf文件,因为dbf格式很简单,处理很方便. dbf的纪录的长度你是知道的,
所以你每次只要seek到相应纪录的字节处开始读15条纪录长度的数据就可以了.
而且这样还可以保证速度---肯定比通过数据库引擎快.


 
to cAkk:
仔细想了想,如果由提供的数据库的一方和你配合,
效果会最好。对方总是知道哪些数据是更新的。
 
g622: 这是不可能的.
 
多人接受答案了。
 
后退
顶部