三层同步异地异质数据库问题,征求解决方法。 ( 积分: 100 )

  • 主题发起人 主题发起人 webwalker
  • 开始时间 开始时间
W

webwalker

Unregistered / Unconfirmed
GUEST, unregistred user!
三层结构,客户端有本地Access数据库,为了节省网络费用,一般级别的用户只对本地数据库进行操作,有一个数据库更新模块负责同步本地与网络数据库的数据的(通过字段的标志位上传下载被操作过的数据),问题在于此模块,下载可以通过clientdataset和datasetProvider取得需要的数据,但是如何上传?
现在想到的方法是在中间层加个COM组件,客户端传递数据集,调用COM组件对象方法来完成上传操作,但参数无数据集类型,有没有更好的解决方法?
 
三层结构,客户端有本地Access数据库,为了节省网络费用,一般级别的用户只对本地数据库进行操作,有一个数据库更新模块负责同步本地与网络数据库的数据的(通过字段的标志位上传下载被操作过的数据),问题在于此模块,下载可以通过clientdataset和datasetProvider取得需要的数据,但是如何上传?
现在想到的方法是在中间层加个COM组件,客户端传递数据集,调用COM组件对象方法来完成上传操作,但参数无数据集类型,有没有更好的解决方法?
 
COM 是传输层的东西, 什么都能传
如果在Internet上用不要用COM ,
 
为什么Internet上不用COM呢?
 
[xx(]要死了,咋没人回答,是我描述的不清楚吗?
这个数据上传问题我有两种解决方案,拿一个表为例:
1、用ClientDataSet把此表下载到本地,与本地数据库进行校对,并更新ClientDataSet,最后ApplyUpdate上去。这种方法,对于网络负载和本地负担都不利,而且浪费了中间层的处理能力。
2、就是上面提到的,把本地的更改过的数据集提交到中间层,中间层调用存储过程更新到网络数据库,不过数据集如何提交到中间层呢?
 
利用CLIENTDATASET.DATA这个属性便可。
首先你需要在客户端用CLIENTDATASET创建一个临时表,怎样用CLIENTDATASET创建临时表你可以在DFW上能查到。
然后把你本地的需要更新的数据添加到这个临时表中。
在服务器端写个方法供客户端调用。其中的参数就是这个DATA,注意,类型是OLE VARIANT。在这个方法中也使用一个CLIENTDATASET,使它接受客户端的DATA。然后你就能处理客户端提交上来的数据集了。
 
在客户端用ADOQuery查询到的数据如何赋给ClientDataSet。
 
我添一下怎样使用CLIENTDATASET创建内存临时表吧。
clientdataset := TClientdataset.create(self);
clientdataset.FieldDefs.Assign(ADOQuery.FieldDefs);//把ADOQUERY的字段信息赋给CLIENTDATASET;
clientdataset.createDataset;//创建数据集;
while not ADOQUERY.EOFdo
begin
clientdataset.insert;
for i := 0 to ADOQUERY.fieldcount -1do
Clientdataset.fields.asvariant := ADOQUERY.fields.asvarinat;
ADOQUERY.NEXT;
end;
 
上传和下载是一样的吧?只是把clientdataset和datasetProvider反过来用不行么?
最后他们传的都是datasetProvider.Data,Data是OleVariant类型,在COM+里面,参数用VARIANT类型传送。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部