设想是:
将服务器一些不怎么变化的数据表,导入本地数据,进行运算或者过滤或查询比较快速,而且没有必要一次次的网络查询。每次更改后,可以提示用户更新下载先用了clientdataset.savetofile的方法,但是在clientdataset.file:='test.cds'后,发现执行运算时,从网络流量里监控,仍然访问服务器端。
后来用clientdataset.loadfromfile的方法,发现无法运行例如'select * from table'这样的查询。
后来又想用adoquery在本地创建一个相同的表,但是又发现两个数据库的同步是个问题昨晚搞到今天早晨,头大了。谁help俺一下?
将服务器一些不怎么变化的数据表,导入本地数据,进行运算或者过滤或查询比较快速,而且没有必要一次次的网络查询。每次更改后,可以提示用户更新下载先用了clientdataset.savetofile的方法,但是在clientdataset.file:='test.cds'后,发现执行运算时,从网络流量里监控,仍然访问服务器端。
后来用clientdataset.loadfromfile的方法,发现无法运行例如'select * from table'这样的查询。
后来又想用adoquery在本地创建一个相同的表,但是又发现两个数据库的同步是个问题昨晚搞到今天早晨,头大了。谁help俺一下?
查询的时候就用filter的 一套东西
begin
cdsCustomer.LoadFromFile("cache\customer.cds");
end
else
begin
cdsCustomer.commandText := "select * from customer";
cds.Open();
end;...其它就一样了.
* 启动时同步. 软件每次启动时, 将需要cache的数据从服务器上抓过来.保存到cache中.
cdsCustomer.commandText := "select * from customer";
cdsCustomer.Open();
cdsCustomer.SaveToFile("cache\customer.cds");
这样比较简单, 但是, 不能及时反映更新.
* 定时同步. 软件启动一后台线程(可以在主窗口上放一timer, 10分钟1次, 或是30分钟1次)
* 实时同步. 基本上, 这个很难. 除非你的架构是cache是统一放在服务器上的. 在需要cache的数据被更新之后就更新服务器上的cache(目前的WEB应用充分使用了这一点, 因为数据库的响应还是慢的, 成本是高的, baidu: memcached). 而且这种同步是无法考虑到后台你手动更新数据库. 没有2了, 想说的都说了. 你要根据你的应用场景来选择同步方式...记住, 如果你选择实时同步, 那基本上还不如不要离线. 因为对网络还是有要求的. 当然, 你也许只希望把数据cache以减少网络访问和数据库的压力(我们经常这么做...一些不常变动的系统参数,系统字典,还有一些主数据---产品图片之类), 定时也就够用了. 同样说一句, 在这方面的优化无止境. 请参考WEB应用的优化.
1.數據庫設計好,速度快、效率高;
2.可以建構成在線與離線模式,當離線時數據在本地,在線時將數據上傳;(每次運行在線時,可下載在線的數據至本地)if isOnLine then //在線
begin
....
end else //離線
begin
...
end
3.啟動時:本地與網絡同步(也就是啟動時同步)...
综合了各位的观点,确定不需要同步的地方后loadfromfile的cds。
建了两个clientdataset,一个指向本地文件,一个指向网络。
修改clientdataset.data:=localcds.data;后,虽然开始无法执行select * from table之类的操作。
但是后来发现,如果在clientdataset.data:=localcds.data;clientdataset.open;后是可以执行查找的。
关于同步,登录时,savetofile。然后调用。时时同步,不弄了,只给了一个数据更新后的提示,提示完了后再下载
挺郁闷的如编辑或者添加某条数据让其同步起来目前仍然没招。结贴了。
分配不均也没办法昂