方法:
(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