从三个不同的数据库取数据的问题,UP有分,解决者或有好的建议者另外开贴给分

时间:2022-12-13 21:24:57
我现在要从异地的三个不同的数据库(Sql server,Dbase,Fox)中取得数据,然后进行一些分析处理(在我自己的库中),这三个库分别是不同的系统中的,并且这三个系统不能更改。现在我的问题是:1。这三个地方是每次把它们的数库库都传给我呢?还是如何做?(有些库是很大的)2。我接收到他们的库之后,我如何判断那些数据增加了?那些修改了?是不是要一一遍历每一条数据?(量很大,有无提高效率的方法?)?
望各位大侠能出售相助,提出好的建议者,另外开贴给分。

73 个解决方案

#1


sql server 自身有一个“分布式事务处理机制”
可以把数据分发到不同类型的数据库中去
也可以从不同的数据库中取数
如果你的网速足够高
不妨直接利用

#2


请楼上的详示,多谢!!

#3


up

#4


stady
up

#5


兄弟这个问题也太困难了,我当时作过类似的处理,不过是在Oracle8.0.5
中,当时我做得很麻烦,每天晚上要进行当天数据的结算(就是把当天的
数据考到一各库中中),然后二天晚上就把工作库中的数据和昨天晚上结算
后的数据通过SQL的集合运算取出不同的(修改或者增加或者被删除)数据
然后把生成的数据集导成我要的文件!
不过我这个办法在7*24的应用就没用了!

#6


用存储过程在数据库服务器上处理

#7


采用Sql分布式事务

#8


采用midas得clientdataset,使用公文包模式的方案!!

建议你去仔细看一下*李维的书!

#9


现在问题是这样的:已经存在了三个不同的系统,并且用到了三个不同的数据库Sql server,Dbase,Fox。我要开发的的是第四个系统,数据库准备用Sql server。三个系统隔一段时间把它们的数据库给我(网络或者光盘)我如何从这三个数据库中抽取数据?因为我要保证我的库重的数据是最新的(有增加的,修改的等)。我需要遍历这三个库中每一条数据以判断数据有无修改吗?这样话量就太大了。另外说一句:该系统不需要非常好的实时性。

#10


根据你所说的,你自己不会修改数据,那么如果你只需要保证数据是最新的的话,我觉得,你值需要将新拿过来的数据,直接导入你的库中,这样一定可以保证数据是最新的!你也不用判断数据是否已经被修改!当然这样做的话,对于没有修改过的数据来说,这种操作很不合理!

#11


放入3个不同的数据库连接不就行了吗!

#12


放入3个不同的数据库连接不就行了吗!
我也在两个sql server 上处理数据!

#13


如zhang21cnboy(沧桑男人)所说:我这里是不需要修改数据的,基本只需查询。但是如果是每次都重新倒入数据的话,是否有点耗时?因为用到的四个表结构都是不同的。 okgxs(叶风铃1) ain2000(太上老君急急如令)这里的表结构都是不同的呀。

#14


up

#15


首先把三个不同系统的数据放入三个不同的目录中,DABASE和FOX的DBF数据表用TABLE控件连接;SQLSERVER数据库把备份恢复再用BDE或ADO连接;
然后,把你想做的事(提取相关数据)用DELPHI做好;
最后,每次把数据收集回来拷入相应路径。

#16


你的意思好象是从三个数据库中取出数据,然后在写入本地数据库的三张不同的表里。是吗?

#17


Up

#18


to:tongki_8(矛盾与迟钝),每次都要全部更新数据库吗?
to:zklove(花花公子) 数据肯定是从三个数据库中取得(可以通过网络,或者是盘),本地数据库待定。因为要从中抽取数据,表的个数待定。

#19


study.....
up

#20


UP

#21


学习啦,再灌水

#22


to fansnaf(投币一元),我看你还是直接往进去弄就可以了!

虽然这样耗时,但是如果你使用其它方法的时候,更加耗时,主要问题是你现在面对的三个系统你都不能改动,不然就好办了!  

#23


我碰到过类似情况, 在别人的系统基础上写一个新系统, 不能更改别人的库数据, 只能查询
解决方法是
除了你自己的数据库连接外, 新建三个数据库连接,分别连到那三个库, 并绑定若干用于查询的Query/ADOQuery

写程序时判断三个库的数据就行了, 如果有导入等功能, 用ClientDataSet控件较好
我以前用的是PB, DataWindow是内存表, 操作很方便。ClientDataSet也是取到内存后关闭数据源的。

#24


太深奥了,up

#25


to:xirumin(吃好喝好),是呀,而且这三个库还是在异地的,每次用他们通过 网路将它们的整个原始数据库上传码?安全性如何考虑?
to: zhang21cnboy(沧桑男人)这三个库的差异性是很大的,如何提高效率?

#26


不必另开贴,可以对该贴加分的。嘿嘿,

#27


up

#28


up

#29


up

#30


这种数据提取,首先不能影响原有系统的性能。所以通过直接访问的方式很不好。
还有数据量大不大?

我做过采集20套系统的数据,是采取数据上报的方式。也就是需要在原有的系统上外加程序

#31


这样就只统一了“原有的系统上外加程序”和自己系统的接口,就很方便了。不管你是什么数据库,有多少。只要在原有的系统中加一个模块就能进行数据传输。也不需要修改自己系统的代码了。

#32


数据量在几十万到数百万,还是很大的。
问题是:我不能对三个系统进行修改,包括各自的数据库。

#33


是否能用Sql Server的DTS自动地,定期地将上传的数据库倒入我建的库中呢?数据是追加?还是覆盖?因为上穿的数据库是原始的库,所以我需要是每次覆盖,能实现么?

#34


蹭点分,交个朋友嘛!

#35


建议用DTS来转换。。。然后做一个数据库来缓冲。
再查询。。呵呵。。是有够土的啦。。

#36


同意 kuangning(郎之间)。
典型的三层结构。

#37


需要校验数据的话可以在本地校验,校验完生成SQL(insert和update),上传的数据只是SQL语句。
我没做过,因为没环境和时间,但我想是可以的。

#38


up

#39


解释一下如何本地校验?
上传成功后,备份一次数据。下次上传前校验。

也可以不用本地校验,直接用batchmove控件试试,可能更好。

还是那句话,我没试过,都是凭想象,没时间实践。羡慕你们有那么多项目做。

#40


up

#41


如果不按照我上面说的,外加程序模块的方式,而且也不动数据库。根本无法实现
就算你通过其他方式来取数据,类似与DTS什么的。但是你能解决所有类型的数据系统吗?或者用直接到其他系统查询数据的方式,你又能保证对其他系统的性能没有影响吗?几百万的数据,对原有系统本身就是很大的数据了。加上你还要在这几百万(或者更多)的数据中抽取一些数据,肯定会大大降低原有系统的性能。可以采用的办法,最好就是原有系统加上上报接口,这样可以大大的降低对原有系统的影响。

#42


老大:我可能没有说清楚:现在,是要求三方把数据上传到我的服务器上(以解决),然后在本地进行数据的重组的。

#43


up

#44


up

#45


同意kuangning(郎之间),我觉得这里面有一个问题要考虑:
三方的数据上传到服务器后是以什么方式存储这些数据,数据库?文件?
这步的工作是怎么做的?为什么不在这个步骤里面就把你的库直接更新了呢。
既然对实时性要求不是很高。我认为直接覆盖掉前一次的数据是最高效的方法

#46


是从三方的数据库服务器上传的,然后放在我的服务器上。
数据库?表?这是要讨论的一个问题。
上传是通过B/S作了一个简单的上传,到一个文件夹中,是以文件的方式保存的。然后我通过C/S结构作一个数据的倒入工作。问:这样做是否合理?欢迎讨论,并参考楼上个位大侠的意见和建议。多谢!·!

#47


从文件导入数据库中,在这步就可以把你的数据直接更新(覆盖原有的数据)了,何必还要导入之后做比较取最新数据什么的。

#48


如果表是文件形式的直接覆盖就行了,如果是SQL SERVER就要做上传模块,先备份,后恢复,当然也可以用BatchMove控件试试。

#49


我现在决定选择直接覆盖了。
但是还有问题:sql server中如何只是把其中的某些表导出为一个文件?就像是把整个数据库备份为一个文件一样?用DTS好像不行呀,只能在两个sql server库中用DTS互相导。是如何进行的呀?

#50


up

#1


sql server 自身有一个“分布式事务处理机制”
可以把数据分发到不同类型的数据库中去
也可以从不同的数据库中取数
如果你的网速足够高
不妨直接利用

#2


请楼上的详示,多谢!!

#3


up

#4


stady
up

#5


兄弟这个问题也太困难了,我当时作过类似的处理,不过是在Oracle8.0.5
中,当时我做得很麻烦,每天晚上要进行当天数据的结算(就是把当天的
数据考到一各库中中),然后二天晚上就把工作库中的数据和昨天晚上结算
后的数据通过SQL的集合运算取出不同的(修改或者增加或者被删除)数据
然后把生成的数据集导成我要的文件!
不过我这个办法在7*24的应用就没用了!

#6


用存储过程在数据库服务器上处理

#7


采用Sql分布式事务

#8


采用midas得clientdataset,使用公文包模式的方案!!

建议你去仔细看一下*李维的书!

#9


现在问题是这样的:已经存在了三个不同的系统,并且用到了三个不同的数据库Sql server,Dbase,Fox。我要开发的的是第四个系统,数据库准备用Sql server。三个系统隔一段时间把它们的数据库给我(网络或者光盘)我如何从这三个数据库中抽取数据?因为我要保证我的库重的数据是最新的(有增加的,修改的等)。我需要遍历这三个库中每一条数据以判断数据有无修改吗?这样话量就太大了。另外说一句:该系统不需要非常好的实时性。

#10


根据你所说的,你自己不会修改数据,那么如果你只需要保证数据是最新的的话,我觉得,你值需要将新拿过来的数据,直接导入你的库中,这样一定可以保证数据是最新的!你也不用判断数据是否已经被修改!当然这样做的话,对于没有修改过的数据来说,这种操作很不合理!

#11


放入3个不同的数据库连接不就行了吗!

#12


放入3个不同的数据库连接不就行了吗!
我也在两个sql server 上处理数据!

#13


如zhang21cnboy(沧桑男人)所说:我这里是不需要修改数据的,基本只需查询。但是如果是每次都重新倒入数据的话,是否有点耗时?因为用到的四个表结构都是不同的。 okgxs(叶风铃1) ain2000(太上老君急急如令)这里的表结构都是不同的呀。

#14


up

#15


首先把三个不同系统的数据放入三个不同的目录中,DABASE和FOX的DBF数据表用TABLE控件连接;SQLSERVER数据库把备份恢复再用BDE或ADO连接;
然后,把你想做的事(提取相关数据)用DELPHI做好;
最后,每次把数据收集回来拷入相应路径。

#16


你的意思好象是从三个数据库中取出数据,然后在写入本地数据库的三张不同的表里。是吗?

#17


Up

#18


to:tongki_8(矛盾与迟钝),每次都要全部更新数据库吗?
to:zklove(花花公子) 数据肯定是从三个数据库中取得(可以通过网络,或者是盘),本地数据库待定。因为要从中抽取数据,表的个数待定。

#19


study.....
up

#20


UP

#21


学习啦,再灌水

#22


to fansnaf(投币一元),我看你还是直接往进去弄就可以了!

虽然这样耗时,但是如果你使用其它方法的时候,更加耗时,主要问题是你现在面对的三个系统你都不能改动,不然就好办了!  

#23


我碰到过类似情况, 在别人的系统基础上写一个新系统, 不能更改别人的库数据, 只能查询
解决方法是
除了你自己的数据库连接外, 新建三个数据库连接,分别连到那三个库, 并绑定若干用于查询的Query/ADOQuery

写程序时判断三个库的数据就行了, 如果有导入等功能, 用ClientDataSet控件较好
我以前用的是PB, DataWindow是内存表, 操作很方便。ClientDataSet也是取到内存后关闭数据源的。

#24


太深奥了,up

#25


to:xirumin(吃好喝好),是呀,而且这三个库还是在异地的,每次用他们通过 网路将它们的整个原始数据库上传码?安全性如何考虑?
to: zhang21cnboy(沧桑男人)这三个库的差异性是很大的,如何提高效率?

#26


不必另开贴,可以对该贴加分的。嘿嘿,

#27


up

#28


up

#29


up

#30


这种数据提取,首先不能影响原有系统的性能。所以通过直接访问的方式很不好。
还有数据量大不大?

我做过采集20套系统的数据,是采取数据上报的方式。也就是需要在原有的系统上外加程序

#31


这样就只统一了“原有的系统上外加程序”和自己系统的接口,就很方便了。不管你是什么数据库,有多少。只要在原有的系统中加一个模块就能进行数据传输。也不需要修改自己系统的代码了。

#32


数据量在几十万到数百万,还是很大的。
问题是:我不能对三个系统进行修改,包括各自的数据库。

#33


是否能用Sql Server的DTS自动地,定期地将上传的数据库倒入我建的库中呢?数据是追加?还是覆盖?因为上穿的数据库是原始的库,所以我需要是每次覆盖,能实现么?

#34


蹭点分,交个朋友嘛!

#35


建议用DTS来转换。。。然后做一个数据库来缓冲。
再查询。。呵呵。。是有够土的啦。。

#36


同意 kuangning(郎之间)。
典型的三层结构。

#37


需要校验数据的话可以在本地校验,校验完生成SQL(insert和update),上传的数据只是SQL语句。
我没做过,因为没环境和时间,但我想是可以的。

#38


up

#39


解释一下如何本地校验?
上传成功后,备份一次数据。下次上传前校验。

也可以不用本地校验,直接用batchmove控件试试,可能更好。

还是那句话,我没试过,都是凭想象,没时间实践。羡慕你们有那么多项目做。

#40


up

#41


如果不按照我上面说的,外加程序模块的方式,而且也不动数据库。根本无法实现
就算你通过其他方式来取数据,类似与DTS什么的。但是你能解决所有类型的数据系统吗?或者用直接到其他系统查询数据的方式,你又能保证对其他系统的性能没有影响吗?几百万的数据,对原有系统本身就是很大的数据了。加上你还要在这几百万(或者更多)的数据中抽取一些数据,肯定会大大降低原有系统的性能。可以采用的办法,最好就是原有系统加上上报接口,这样可以大大的降低对原有系统的影响。

#42


老大:我可能没有说清楚:现在,是要求三方把数据上传到我的服务器上(以解决),然后在本地进行数据的重组的。

#43


up

#44


up

#45


同意kuangning(郎之间),我觉得这里面有一个问题要考虑:
三方的数据上传到服务器后是以什么方式存储这些数据,数据库?文件?
这步的工作是怎么做的?为什么不在这个步骤里面就把你的库直接更新了呢。
既然对实时性要求不是很高。我认为直接覆盖掉前一次的数据是最高效的方法

#46


是从三方的数据库服务器上传的,然后放在我的服务器上。
数据库?表?这是要讨论的一个问题。
上传是通过B/S作了一个简单的上传,到一个文件夹中,是以文件的方式保存的。然后我通过C/S结构作一个数据的倒入工作。问:这样做是否合理?欢迎讨论,并参考楼上个位大侠的意见和建议。多谢!·!

#47


从文件导入数据库中,在这步就可以把你的数据直接更新(覆盖原有的数据)了,何必还要导入之后做比较取最新数据什么的。

#48


如果表是文件形式的直接覆盖就行了,如果是SQL SERVER就要做上传模块,先备份,后恢复,当然也可以用BatchMove控件试试。

#49


我现在决定选择直接覆盖了。
但是还有问题:sql server中如何只是把其中的某些表导出为一个文件?就像是把整个数据库备份为一个文件一样?用DTS好像不行呀,只能在两个sql server库中用DTS互相导。是如何进行的呀?

#50


up