数据补丁

王朝delphi·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

当公司要定期给客户发送数据时,而且数据库很大,但每次更改量很小,这样就不毕发送

整个数据库,只要发送一个数据补丁,在客户端对数据补丁操作一下即可更新整个数据库。

下面对单个表操作

===================================================================================

(公司端:源表src:旧数据库,目标表dst:新数据库) ===> 数据补丁

(公司端:源表src:旧数据库) <=== 数据补丁

方法:

(A)在公司端, 比较源表src和目标表dst:

(1)源表src中记录在目标表dst不存在的记录加入删除标记写入查询

DeleteSQL='select 2 as AowStatA,dst.* from dst right join src on (dst.所有字段=src.所有字段) where src.第一个字段 is null';

(2)目标表src中记录在源表dst不存在的记录加入新增标记写入查询

InsertSQL='select 4 as AowStatA,src.* from src left join dst on (src.所有字段=dst.所有字段) where dst.第一个字段 is null';

(3)对上面两个查询结果用 provider.GetRecords 分别得到 一个 OleVariant ,转换为 string 写入XML文件:

分别删除<FIELD attrname="AowStatA" fieldtype="r8"/> 接点,然后合并两XML文件,再把“AowStatA”该为“RowState”.

得到一个数据补丁(XML文件).

(4)数据补丁(XML文件)中一行 <PARAMS ... /> 该为 <PARAMS DATASET_DELTA="1" MD_SEMANTICS="3"/>

(B)在客户端,收到数据补丁(XML文件)后对源表src进行以下操作:

(1)数据补丁(XML文件)作为 string 读出,并转换为 OleVariant .

(2)源表src对应的 Provider 执行 applyUpdates() 方法.

(C) 注意: :

(1) 如表结构改变了,在客户端先按新结构创建一个新表,

并对已存在字段源表src中的数据全部导入新表,再进行 (B) 操作

(2) Paradox库 的 SQL 例:

select "zzj.db".*,"tmp.db".* from zzj.db inner join tmp.db //表名用双引号

on "zzj.db".keyf="tmp.db".keyf where 1=2 // 不能用 where false

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航