高分求解数据库合并问题(100分) (100分)

  • 主题发起人 主题发起人 huifi
  • 开始时间 开始时间
H

huifi

Unregistered / Unconfirmed
GUEST, unregistred user!
有5个interbase的数据库,其中一个为总库,其余4个为分库,即:
5个库的结构完全一样,总库含有4个分库的全部数据,分库只含总库的部分数据。
现在的问题是:5个库别在5台不同的计算机上(没有联网),分库每个月要往总更新一次数
据(即:在分库新增、修改、删除的数据总库也要相应地新增、修改、删除的数据),在有边delphi
中如何实现?能给出完整的代码,还可加分!!!!!
 
嘿嘿!没有见过!
 
补充一下,数据库用ibx联接。
 
在project菜单的options的form选项中把要随时更新的form加到右边
然后在代码中添上form:=nil;

 
如果幾個子庫不會發生互相修改數據的情況的話就很簡單,
循環檢查一邊就可以了
 
建议用IBEVENT处理。
 
用三层吧.可以解决你的问题.
 
to luyear
能详细一点吗?或给出代码。。。
 
to y2ky2k
5个库分别在5台单机上(无网络),三层怎么做?????
 
数据合并不是很难,关键在于数据库的设计,首先,不能够有自增长字段;其次要有字段标示来源,便于以后的管理;最后要有数据管理的标志字段,那些数据已经备份,那些备份后修改过;然后通过编程实现未备份及已修改的数据的导出,格式可以自己设计,也可以用XML技术,便于扩展,这样除第一次备份数据量比较大,以后每次备份的数据量都很小,在合并时值要注意修改过的数据就可以了。
可以通过邮件传递数据,或者磁盘。
 
to allenk:
数据库正在设计中,要加标志字段也可以,这个对修改和新增的数据有用,
但对字子库已删除的数据总库怎么判断????
有办法解决码???
或给一点实际代码。。。
 
这就需要你对数据库操作进行纪录,比如单独记录删除动作,采用LOG文件,这也是唯一可行的方法。
 
分类规定ID,如总库用1用1开头,分库用2,3,4等开头
删除记录另存一个表,只记录ID,ID为数字名字符都行,不过建议用字符,如
0100000001//总库
0200000001//第一分库
。。。。。
写一个函数取得最大ID
select max(id) from tab
再加1设为ID
 
procedure TForm1.Button1Click(Sender: TObject);
begin
{首先从总库中将分库已删除的数据删除}
with Query1 do
begin
Close;
SQL.Text := 'delete from MasterTable '
+ ' where ID not in (Select ID from SlaveTable)';
ExecSQL;
end;

with Query2 do
begin
{打开分库}
Close;
SQL.Text := 'select * from SlaveTable';
Open;
{遍历分库,更新主表}
while not Eof do
begin
Query1.Close;
Query1.SQL.Text := 'update MasterTable set 字段一=' + QuotedStr(FieldByName('字段一').AsString) + ','
+ ' 字段二=' + QuotedStr(FieldByName('字段二').AsString) + ','
+ ' where ID=' + QuotedStr(FieldByName('ID').AsString);
Query1.ExecSQL;

{如果更新记录数为零,将此记录插入总库}
if Query1.RowsAffected = 0 then
begin
Query1.Close;
Query1.SQL.Text := 'insert into MasterTable (字段一,字段二) values ('
+ QuotedStr(FieldByName('字段一').AsString) + ','
+ QuotedStr(FieldByName('字段二').AsString) + ')';
Query1.ExecSQL;
end;
Next;
end;
Close;
end;
end;
 
+ ' 字段二=' + QuotedStr(FieldByName('字段二').AsString) + ','
+ ' where ID=' + QuotedStr(FieldByName('ID').AsString);
第一句最后多加了一个','
呵呵
 
建议在分库的每张表增加两个字段
1、GUID 做为主键,这样就可以增、删、改总库对应记录
2、标志位 N:增,D:删,U:改,Z:正常(未变动)
问题:比如库存。总库100件,A库出库80件,B库又出库30件,总库-10件
 
我的程序也是这样的问题。
现在的解决方法是,设置一个或两个字段组成唯一性的标志(recno),如分库中用记录号
select max(字段1) from 表 同ysai说的一样 。
1、分库读入总库时,总库、分库同有recno的先删除,所有的记录查完以后,
再insert 分库中的所有数据。
不知这种方法怎样,我觉得有点慢!!!
关注!
 
建一个表,保存已编辑的记录信息,
ID 修改日期 编辑类型
0001 2002-2-2 0 //删除,根据这个删除主表中相应ID的记录
0002 2002-2-5 1 //增加,添加记录到主表中
0002 2002-2-8 3 //修改,更新主表中相应的记录
//ID还是设为主键,只保存
首先把分库的这个编辑记录表合并,如果有相同的ID取时间晚的
还是要把不同分库的ID区分,比如头两个为分库代码,所有新增的记录都要加
这样才不会出现两个以上的库出现相同ID
 
update 分表一条记录到总表的相对应的一条记录的所有字段(40个字段)怎么写?
 
删除再增加好了
 
后退
顶部