回复人:3nt(3nt) (2001-6-29 15:36:44)  得0分 
  远程数据传输始终是一个棘手的问题,所以才会有那么多不同的解决方案和产品,比如各数据库厂商的Replication、Mail Replication,各种Message Queue。到底采用那种方法要根据自己的实际情况灵活使用,尽量利用已有的方法和产品。
ftp也是一种可行的方法,但要求有专人管理,对用户的要求较高,也不太适合于大批量数据的处理。 我很同意3nt的说法 

解决方案 »

  1.   

    我觉得还是EMAIL比较好。我设计了一个发信端,把需要发送的资料按照特定的格式生成字符串(也可以生成一个打包文件,但是打包文件可能会很大,不太好发,也不好拆分),按照每封邮件1M的大小发出(记得RAR分卷压缩吗?),文件头上有特定的识别标志。在接受端的收信机上,对这些有特殊标志的信还原,恢复到数据库中。我一直想把这些程序作成控件的,只是没那么多时间和那么高水平。
      

  2.   

      to bossnan(bossnan)
    你的想法很好,这就是所谓的“基于消息的复制”(Message-based replication)。实现起来还是很复杂的,要考虑的东西很多,比如数据的双向同步,目前也已经有现成的产品了,比如sybase。
      我想如果利用现有的可订制的邮件系统比如 exchange,做一个异种数据库的复制代理或许会很有钱途吧。
      

  3.   

    这个如果真要研究是一个极具挑战性的课题,如果不需要什么通用性的话,
    我想QQ的做法足够了,做成TCP实达的客户端这是这么做的,
    服务器和客户端的数据类型保持一致
    进行一定的规划和基础数据的统一工作,发一个报文就可以了
    主要是服务那边,
    收到报文后的处理
    是个技术难点,
    主要是看报文的复杂度
      

  4.   

    用MIDAS处理,对于数据的更新较为方便
    可以用ClienDataSet.LoadForm和SaveToFile
    但是要注意SQL语句,尽量减少网络的rote
      

  5.   

    用midas基本上能解决这些问题,具体实施比较麻烦
      

  6.   

    一个简单而有效的办法:
    业务人员用笔记本每天录入业务数据 到access库中,当他要上传数据的时候就将当天记录在
    access中的数据读出,写入远程的数据库中。
    *************************
    我们每天都在进步!
    愿与大家交流。
    [email protected]
      

  7.   

    sorry 各位!这几天忙,没上来和大家交流。bossnan的想法很好
    但是我时间有限,恐怕做不成,再说我的水平似乎也达不到:(
      

  8.   

    Steven_Chang(steven) 的想法对于只是向上合并数据,应该是比较有效的 但是对于从上向下分发,有一定困难
      

  9.   

    我也还是EMAIL比较好,理由是:
    一 综合成本最少
    二 技术实现比较简单,系统运行也非常稳定
    三 像在国外,这种程度一般也用Email 实现。
    dephi 中有 nmpop nmsmtp 控件,功能非常强大,简单有好用。
    略微麻烦的是将相应信息的识别和分解!
    我 作过像你这样的软件,用 email实现
      

  10.   

    应采用EMAIL的方式来做,客户端先将数据库用程序导出,打包,自定义格式,附到MAIL中,发回去,这个操作对用户透明;中央端定期收MAIL,用程序做,收到后将数据解包,导入数据库即可,同样是用程序做,对用户透明;表的关键字要定义好,不允许关键字重复的记录出现,否则覆盖前面的记录。
      

  11.   

    我在用sqldistribution 控件时,发现一个问题:
    在调用initialization 时 总是说在初始化sql active 之前 要先设置发布服务器属性但是我在程序里设置了 publisher属性了:(
      

  12.   

    在用sqldistribution 和 sqlmerge之前,要在两端服务器上 做哪些设置呢?
      

  13.   

    to whatname()
    对于从上向下分发也是一样的,把从上向下分发的数据读出存入access中,当然要标明这些是从上向下分发的数据。
      

  14.   

    to whatname() 
    我不知道你是怎么弄的,所以无法准确回答。
      1.首先建立publisher和subscriber,手动同步一次。如果客户端不是域用户(远程用户一般都是这样)快照文件要拷贝(可以ftp)到本地同时设置subscriber指定快照的路径,
      2.启动sqldistribution 和 sqlmerge之前要先分别指定publisher和subscriber的服务器名、登录方式、登录名、发布数据库名、订阅数据库名、订阅方式(pull或push)。看看我贴的程序的form_load事件。
      又,考虑到安全性publisher应当不允许匿名订阅。
      

  15.   

    to Steven_Chang(steven)
      用你的方法,如果是一对多的发布,标识发布状态(哪些发了、哪些没发)相当麻烦,尤其是客户端有可能临时增加或者取消、还要处理各种异常。要做一个通用的程序,乐观的估计要3人年。
      

  16.   

    3nt 你上面说的(publisher和subscriber的服务器名、登录方式、登录名、发布数据库名、订阅数据库)一定要手工用程序设定吗? 在delphi里 我直接在object inspector 里面设的,似乎不承认,用程序写 好象好点了  
      

  17.   

    Luckyfeeling(任我游)我现在时间很少,而你说的 我又一点没有用过,可否提供更详细的信息 ?
      

  18.   

    对了3nt(3nt) 你的客户端用的是什么数据库 ? 
      

  19.   

    3nt 用你的 方法 应该 是采用拉订购(pull)吧
      

  20.   

    可以开发一套客户端-服务器端软件,笔记本方直接选UPDATE SERVER功能,一切由程序完成。
    1、传送用ZIP打包,服务器端还要校验,保证其完整性。才可更新自身数据。
    2、ACCESS等数据库都留有编程接口,可在程序是进行。
    3、在客户端提示更新进度及成功提示;在服务器端提示各客户更新日期,数据的操作
      

  21.   

    alwayscy(大力水手)
    你的方法全是自动的 不需要人的干预吗?你的想法在实际中做过吗? 效果如何 ?
      

  22.   

    Luckyfeeling(任我游)
    你做的软件中,用email实现,包括数据的向上合并,和从中心向下分发吗?
      

  23.   

    为什么 我在sqlserver 里面用pull subscription 只能在本机上创建订阅?:(
      

  24.   

    to justonly(一点点) 
    原因很多,你这样发问没法回答。出错提示是什么?
      

  25.   

    是不是 设置pull订购的时候 要在订阅服务器上 设置 ?
      

  26.   

    3nt(3nt) 你的客户端用的是什么数据库 ? 
      

  27.   

    我做过C-S方面程序,压缩程序。
    我觉得这是一个典型的C-S应用。
      

  28.   

    如果是把一样的数据统一广播出去,可以把所要广播的数据存放在一张表
    我想可以通过winsock(udp)向每一个客户端广播命令,客户端判断命令内容,
    如果时下载命令就主动连接服务器取得数据。
      

  29.   

    baxp 这种方法 由于是 两段的(下载-合并,或上传-合并)所以 处理起来比较麻烦 比如说第一步操作成功,第二步失败
      

  30.   

    客户端是 sqlserver desktop 的情况 要把server端的许可协议设置为每客户 才可以
      

  31.   

    好了 下面我要试试 怎么让订阅者是access
    还请大家多交流以后这个问题解决了 我一定开放所有的方案 :)
      

  32.   

    好呀,恭喜恭喜关于与access相连的问题 高手都帮帮whatname吧
      

  33.   

    我的观点,用Soap+xml很简单了(delphi6)
      

  34.   

    zhboy(孔方兄) 能否介绍一下Soap+xml的实现方法
      

  35.   

    我现在 在试着用access做 订阅者可是 总是不通 
      

  36.   

    这段话我不是很清楚到底是什么意思,还请大家帮忙分析一下若要复制到 Access 订阅服务器,必须将合适的域用户帐户指派给 MSSQLServer 服务,这个域用户帐户与 SQL Server 代理所指派的域用户帐户相同。这样使该服务有通过网络连接到 .mdb 文件所必须的权限。使用控制面板中的服务应用程序可以完成这项工作。
      

  37.   

    还有这段 :(当使用 Access 8 以后的 Microsoft® Access 版本时,可以为自己的 Access 数据库选择使用 SQL Server 2000 Desktop Engine 或者使用 Microsoft Jet 作为数据库引擎及数据存储。Desktop Engine 是一种基于 Microsoft SQL Server™ 2000 技术的数据存储,但是经过设计与优化,用于较小的计算机系统,例如一台计算机或小型工作组服务器。因为 Desktop Engine 基于与 SQL Server 相同的数据库引擎,所以大多数 Access 工程或客户端/服务器应用程序可以不加修改地运行在 Desktop Engine 或者 SQL Server 标准版或企业版上。但是,与其它版本的 SQL Server 不同,Desktop Engine 有 2 GB 数据库大小的限制,不支持对称多处理 (SMP),并且不能是事务发布的发布服务器(但可以是事务发布的订阅服务器)。如果您为自己的应用程序选择 Desktop Engine 或 SQL Server 作为数据库引擎,那么为了在 SQL Server 发布服务器和 Access 订阅服务器之间进行复制,就不再需要更多的步骤。运行 Access 的计算机出现在 SQL Server 企业管理器中,只是简单地作为另一个服务器。如果为自己的 Access 应用程序选择 Microsoft Jet 作为数据库引擎,那么就必须启用 Jet 4.0 版数据库作为订阅服务器。为了完成这项工作,必须配置 SQL Server,以使用到每个 Jet 订阅服务器的数据库的 OLE DB 连接。完成这项工作的最简单方法是利用 SQL Server 企业管理器;但是还可以通过执行 sp_addlinkedserver,以编程方式将 Jet 数据库添加为链接服务器。