数据补丁

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 luckyjan 的 blog

    当公司要定期给客户发送数据时,而且数据库很大,但每次更改量很小,这样就不毕发送
整个数据库,只要发送一个数据补丁,在客户端对数据补丁操作一下即可更新整个数据库。
下面对单个表操作
===================================================================================
 (公司端:源表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

本文关键:数据补丁
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top