呵呵,举个肯定会有问题的例子。如果你用的数据库不同ACCESS/SQL SERVER
会用不同的SQL 语句。
ACCESS:”SELECT * FROM 表 WHERE 日期 BETWEEN #2002-01-01# AND #2002-05-01#“SQL SERVER””SELECT * FROM 表 WHERE 日期 BETWEEN ‘2002-01-01’ AND ‘2002-05-01’“
也就是说查询语句的写法不通用。还例如通配符%的应用。反正不可行。

解决方案 »

  1.   

    如果在网上我认为必须用sql你总不能把access的数据库文件在网上传来传去吧
      

  2.   

    传递Access也是可以的,不过不太专业而已;呵呵
      

  3.   

    用SQL 服务器就不叫单机版了,因为SQL 服务器就提供了服务器功能了。
    ACCESS是可以的,你把先服务器放置ACCESS的磁盘映射的本地机上,再象本地数据库一样读写就可以了。我没有试过,你可以试一下。
      

  4.   

    在服务器上只存放数据库的话就好办了,在本机上将要打开的数据库的路径改一下就可以了。如:服务器的计算机名是“MAIN",数据库名是“M。MDB”
    数据库存放在C盘的根目录下
    dim db as database
    dim rst as recordset set db=opendatabase("\\main\c\m.mdb")
    set rst=db.opendatabase("select .....")
    with rst
    ...
    end with
      

  5.   

    我没事过,应该可行,oledb 会进行多用户时的管理
      

  6.   

    以上各位朋友,大家好!    首先感谢各位的指导!    还望各位分别就 SQL Server 及 Access 在这种情况下的使用给以深入的说明,特别是在多用户共同操作的情况下会发生的问题。ADO 有能力支持多用户操作时数据的共享冲突等问题吗    不胜感激!!!
      

  7.   

    1。换数据库   ACCESS  ----》 SQL SERVER
    -----------------------------------------
    如果采用把ACCESS数据库放在服务器上,客户端通过文件访问方式来做,效率太底。
    ---------------------------------
    其实还有一个很好的办法,就是对你可能有些困难,
    就是在VB与ACCESS之间加一个接口层。
    原来是这样的
    VB   <---------------->   ADO  <---------> ACCESS
    现在改为
                            TCP/IP
    VB <---> ACCESSPROXY(C) <---->ACCESSPROXY(S) <---> ADO  <---> ACCESS
    其中VB与ACCESSPROXY(C)的接口可以和ADO设计的一样。
    这样就不需要(很少)修改原来的VB程序了,只要加上
    ACCESSPROXY(C)和ACCESSPROXY(S)就可以了。
    其中ACCESSPROXY(C)和ACCESSPROXY(S)可以采用CORBA,DCOM,RPC,或直接使用WINSOCK来开发。只要有了这个接口以后,可以很方便的把单机版程序升级为服务器班程序,绝对是C/S模式。如果把ACCESS换成SQL SERVER,那不就是典型的三层模型。
      

  8.   

    天同,您好!    感谢你如此认真的指导!    对你所讲的内容有不太理解的地方,其中几点还请再次说明。    一、对于把ACCESS数据库放在服务器上,客户端通过文件访问方式来做,效率太底这一点,除了效率太底,数据库的工作状态有没有问题,数据的安全性有问题,能够负责的用户群(同时进入工作状态)约有多大,用户群的大小与服务器的配置的关系如何。    二、增加访问代理一说,能否再讲讲其原理与实现过程。    三、使用 SQL SERVER 时,程序对数据的访问与在本地访问有什么特别注意的问题,仅仅修改连接行吗?在局域网上域名,主机名(服务器),主机IP如何使用,(对于使用ACCESS,这些问题又该如何考虑?)有了 SQL SERVER 能更进一步地进行远程访问吗,比如通过 INTERNET 。
        对不起太罗琐了吧,再次表示谢意!
      

  9.   

    我已经做一个接口程序,可以使用它来访问服务器上的ACCESS,
    它的原理是这样的。 客户端                                     服务器端                               TCP/IP
      vb编的程序               <---------->      RAccessService
      通过SOCKAPI                                      |
                                                       |   
                                                    MSACCESS
    -------------------------------------------------------------
    这就相当于三层模型结构。
    ---------------------------------------------------------------
    代码示例:以下代码比较简单,与ADO类似
    以下代码演示了,怎样获取数据,更新数据Sub main()
    Dim conn As New CConnection        '定义连接    -----相当于ADO中的Connection
    Dim rs As New CRecordset           '定义记录集  -----相当于ADO中的Recordset
    Dim sField1 As String, sField2 As String, sField3 As String, sField4 As String
    Dim bConn As Boolean
    Dim nFieldsCound As Long
    Dim bOK As Boolean
    '----------打开服务器上的数据库-----------------------------
    'bConn = conn.OpenConnection("192.168.1.125", "DSN=sa;DRIVER={SQL Server};UID=sa;PWD=;")
    bConn = conn.OpenConnection("192.168.1.155", "DSN=testmdb;DRIVER={Microsoft Access Driver (*.mdb)};UID=admin;PWD=;")
    If Not bConn Then
        MsgBox conn.GetLastError()
        Set conn = Nothing
        Exit Sub
    End If'------------------------打开服务器上的记录集----------------
    Set rs = conn.OpenResultset("SELECT * FROM zdxx")
    If rs Is Nothing Then
        MsgBox "记录集合打开错误!"
        Exit Sub
    End If
    nFieldsCound = rs.GetFieldsCount()
    Do Until rs.EOF
        sField1 = rs.GetFieldValueByIndex(0)
        sField2 = rs.GetFieldValueByIndex(1)
        sField3 = rs.GetFieldValueByIndex(2)
        sField4 = rs.GetFieldValueByIndex(3)
        Debug.Print sField1, sField2, sField3, sField4
        rs.MoveNext
    Loop
    rs.CloseRecordset'------------------------插入服务器上的记录--------------------
    Dim nRowAffected As Long
    bOK = conn.Execute("INSERT  into zdxx(zdxx,lkd,tabstop) values('测试内容','120','1')", nRowAffected)
    If (Not bOK) Then
        MsgBox conn.GetLastError
    Else
        MsgBox "更新记录数:" & nRowAffected
    End If
    Set rs = Nothing
    Set conn = Nothing
    '-------------------------------------------------
    '连接,记录集不关闭也可以,程序退出自动关闭
    End Sub
      

  10.   

    最好还是换数据库 ACCESS  ----》 SQL SERVER
    只要换个连接字符串就差不多了,可能sql语句有的也要改改了
    sqlserver可以通过internet访问的。
    天同的那个做法我没看大懂,但我觉得那样好像改动代码太多了
    好像重新编程一样。不知道我的看法对不对。
      

  11.   

    单机程序里可以增加上传数据和提取数据,在服务器上建个数据库,用sql server,这样你只需要增加一些功能,和服务器端的开发,使用sql server的好处就是管理比较方便。数据的存取都在服务器端,如果所有数据都放在服务器端那此方法不行,效率太低,如果部分数据可以在本机保存,那这个就比较方便。如果管理的数据不是很复杂,最好就换成B/S结构的,用ASP做很简单,因为使用的脚本vbscript和VB差不多,只是做个界面,而且可以不断修改,很方便,B/S结构的好处就不用说了吧。
      

  12.   

    看了这么多,我说一句吧。我觉得最简单快速的办法还是把access数据库导出到
    sql上,程序改动比较小,解决多个用户同时对数据库操作出现的冲突问题,我们
    当时用的是错误捕获,发现用人正在对数据库进行写或改动操作时,就等待,等待时间很少的,根本感觉不到,我们做的单机版升级到网络版就是那样做的,工作量很少。你不妨试试。我觉得能用简单的实现就用简单的实现。
      

  13.   

    1、建议数据连接方式不要通过直接写字符,而通过ODBC连接:你在程序里面只关心ODBC的名字即可,即使要改动数据源则直接修改ODBC即可;
    2、如果你编好以后有可能要变动数据源,一时用ACCESS,一时用SQL SERVER,那么你在程序里可以尽量不用SQL语句,看通过ADO控件本身的一些函数能不能实现目的,这样是不是能避免不同数据库SQL语句可能不同的问题;
    3、如果你编好以后数据源不再变动了,那么肯定可以由单机版变成网络版;
      

  14.   

    赞成用ODBC的做法,自己比轻松,不管是Access 还是 SQL SEVER一样的做法。很简单的,两种数据库的我都试过。
      

  15.   

    赞成用ODBC或用B/S模式
    现在我也在做个类似的东西,在考虑用B/S还是VB做,这个帖子给我不错的建议……
      

  16.   

    其实觉得用SQL比ACCESS好得多了,但是现在的工程不允许用,呵呵
      

  17.   

    同意楼上各位:
    我在这里提供一个糟糕的思路,将数据库放在一台电脑上,用access,并设为完全共享,其他电脑访问这台电脑上的数据,连接的函数:Function adoconnect2(ByVal MyDatabase As String, ByVal MyTable As String, ByVal MyFields As String) As Recordset
       
       
       Dim MyRs As ADODB.Recordset
       Dim MyConnectString As String
       Dim sql As String
        '打开连接。
       MyPath = "\\192.168.9.38\database\"  '192.168.9.38为存放数据库的电脑的ip
       MyConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & MyPath & MyDatabase & ";Jet OLEDB:Database Password=" & DataBasePassword 'D:\czvb\suneastmanage\AttendanceCheck\1\database\main.mdb" '
       Set MyCnn = New ADODB.Connection
       MyCnn.Open MyConnectString
       
       '建立RecordSet
       Set MyRs = New ADODB.Recordset
       sql = "SELECT " & MyFields & "  FROM " & MyTable
       MyRs.CursorLocation = adUseClient             
       MyRs.LockType = adLockBatchOptimistic
       MyRs.Open sql, MyCnn
       
       '给函数赋值
      Set adoconnect2 = MyRs
      
    End Function
      

  18.   

    如何用Visual Basic编写小型的网络系统 
    Visual Basic 以 下 简 称(VB) 十 一 个 功 能 强 大 的 编 程 语 言。 特 别 是4.0 以 后, 支 持 了OLE Automation 技 术, 给 编 程 带 来 了 更 大 的 方 便。 前 些 时, 我 试 着 编 写 一 个 支 持 网 络 的 数 据 库。 但 是 由 于 没 有 联 网, 所 以 没 法 测 试。 于 是, 我 想 到 了OLE Automation, 用 它 就 可 以 在 一 台 机 器 上 测 试 网 络 功 能。 经 过 改 动, 还 可 以 用 它 通 过Modem 来 进 行 联 机。 下 面, 我 介 绍 一 下 如 何 用Visual Basic 编 写 小 型 的 网 络 系 统。 ---- 首 先, 建 立 一 个 支 持 网 络OLE Automation ---- 启 动VB。 在 窗 体Form1 中 建 立 一 个 列 表 框List 1, 在 它 上 面 建 一 个Frame1, 设 置 它 的Caption 属 性 为 空。 在 它 中 间 建 立 一 个Label1, 同 样, 设 置 它 的Caption 也 为 空。 最 后, 在List1 上 建 立 一 个Caption 为UserList 的Label2。 最 后, 把 一 个 定 时 器Timer1 安 上, 把 它 的Interval 设 为3000,Enabled 设 为False 就 行 了。 至 此,NetWorkConnection 的 窗 体 部 分 就 完 成 了。---- 随 后, 在VB 的Tools 菜 单 中 选Options, 按 照 填 好 各 项 内 容。 ---- 接 下 来, 在Insert 菜 单 中 选 取Module 建 立 一 个 新 的 模 块Module1。 在(General) 中 输 入 填 写 进 下 列 代 码。 (UserInfo数据类型)
    Type UserInfo
    Username As String
    Alias As Integer 
    End Type
    (最大的用户数)
    Public Const MaxUser = 10
    (定义消息)
    Public Const Msg_User_LogOn = 1
    Public Const Msg_User_LogOff = 2
    (设定数据类型)
    Public Users (MaxUser) As UserInfo
    Public Inbox (MaxUser) As String
    Public UserSystemInbox As Integer
    Public Online(MaxUser) As BooleanSub main()
    Form1.Show
    End Sub---- UserInfo 数 据 类 型 记 录 了 已 经 登 录 的 用 户 的 用 户 名 和 别 名。 在 显 示 和 通 讯 时 只 使 用 别 名。 用 户 名 只 作 为 判 断 用 户 是 否 有 效 时 用。 出 于 安 全 考 虑, 以 上 数 据 用 户 不 能 随 意 访 问, 必 须 通 过 下 面 的 子 程 序 来 访 问。 ---- 在Insert 菜 单 中 选 取Class Module 建 立 一 个 新 的 类Class1。 更 名 为Common, 并 设 置 它 的 各 个 属 性。 ---- 填 写 进 下 列 代 码。 ---- ( 提 供 获 取 用 户ID 值 的 功 能, 用 户 可 以 通 过 此 功 能 使 用 别 名 来 返 回ID 值) Public Function GetUserID(Alias As String) As Integer
    For I = 1 To MaxUser
    If Users(I).Alias = Alias Then GetUserID = I
    Next I
    End Function---- ( 提 供 获 得 系 统 信 息 的 功 能。 用 户 可 以 通 过 它 了 解 用 户 是 否 有 改 动) Public Function GetSystemMessage() As Integer
    GetSystemMessage = UserSystemInbox
    End Function---- ( 提 供 获 得 用 户 信 息 的 功 能。 用 它 来 获 取 所 有 在 线 用 户 的 别 名, 中 间 用"|" 分 开。) Public Function GetUserInfo() As String
    For I = 1 To MaxUser
    If Users(I).Username < > "" Then
    temp = temp + Users(I).Alias + "|"
    End If
    Next I
    GetUserInfo = temp
    End Function---- ( 提 供 获 得 用 户 私 有 信 息 的 功 能。 用 来 接 受 别 的 用 
    户 发 送 的 信 息。) Public Function GetUserMessage(ID As Integer) As String
    If ID < = 0 Or ID > MaxUser Then
    Exit Function
    End If
    GetUserMessage = Inbox(ID)
    End Function---- ( 提 供 注 销 功 能。 用 来 退 出 网 络。) Public Function LogOff(ID As Integer) As Boolean
    If ID < = 0 Or ID > MaxUser Then
    LogOff = False
    Exit Function
    End If
    If Users(ID).Username < > "" Then
    Users(ID).Username = ""
    LogOff = True
    Else
    LogOff = False
    End If
    UserSystemInbox = Msg_User_LogOff
    `-------------- Update Form1 ------------
    For I = 0 To Form1.List1.ListCount - 1
    If Form1.List1.List(I) = Users(ID).Alias Then 
    `查找List1中的用户别名并删除
    Form1.List1.RemoveItem I
    Exit For
    End If
    Next I
    If Form1.List1.ListCount = 0 Then `如果没有用户登录
    Form1.Label1.Caption = "DisConnected"
    Form1.timer1.Enabled = False
    End If
    End Function---- ( 提 供 登 录 功 能 来 上 网) Public Function LogOn(Username As String,
    Alias As String) As Integer
    For I = 1 To MaxUser
    If Users(I).Username = "" Then
    Users(I).Username = Username
    Users(I).Alias = Alias
    LogOn = I
    UserSystemInbox = Msg_User_LogOn `发送"用户登录"信息
    `-------------- Update Form1 ------------
    Form1.List1.AddItem Alias `有用户上网
    Form1.Label1.Caption = "Connected"
    Form1.timer1.Enabled = True
    Exit Function
    End If
    Next I
    LogOn = 0
    End Function---- ( 提 供 刷 新 用 户 是 否 在 线 标 志 的 功 能。 使 系 统 能 够 判 断 你 是 否 在 线 上, 如 果 在6 秒 内 没 有 调 用 此 功 能, 系 统 将 会 把 您 自 动 删 除。) Public Sub Refresh(ID As Integer)
    If ID < = 0 Or ID > MaxUser Then Exit Sub
    Online(ID) = True
    End Sub---- ( 提 供 发 送 用 户 私 有 信 息 的 功 能。 用 来 和 其 它 用 户 传 递 信 息。) Public Function SendUserMessage(Message As 
    String, ToID As Integer) As Boolean
    If ToID < = 0 Or ToID > MaxUser Then
    SendUserMessage = False
    Exit Function
    End If
    Inbox(ToID) = Message
    SendUserMessage = True
    End Function---- 在Form1 的Code 中 输 入 剩 下 的 代 码。 (初始化Form1)
    Private Sub Form_Load()
    Label1.Caption = "DisConnected"
    Form1.Caption = "NetWork Connected Server"
    Form1.Show
    For I = 1 To MaxUser
    Users(I).Username = ""
    Next I
    End Sub---- ( 通 过 判 断Online 的 值 定 时 检 查 用 户 是 否 在 线) Private Sub timer1_Timer()
    For I = 1 To MaxUser
    If Users(I).Username < > "" Then
    If Online(I) = False Then
    For s = 0 To List1.ListCount - 1
    If List1.List(s) = Users(I).Alias Then
    List1.RemoveItem s
    Users(I).Username = ""
    UserSystemInbox = Msg_User_LogOff
    ` 发 送" 用 户 注 销" 信 息
    End If
    Next s
    End If
    Online(I) = False
    End If
    Next I
    If List1.ListCount = 0 Then
    ` 如 果 没 有 用 户
    Label1.Caption = "DisConnected"
    timer1.Enabled = False
    End If
    End Sub---- 运 行 此 程 序。 在 启 动 另 一 个VB, 开 始 编 写 用 户 部 分。 在 默 认 窗 体 中 按 下 图 排 好 这 些 控 件。 ---- 填 入 下 列 代 码 Public ID As Integer
    Public Connected As Object
    Private Sub Command1_Click() `登录
    Dim username As String
    Dim alias As String
    Set Connected = CreateObject
    ("NetWorkConnection.Common") 启 动NetWorkConnection
    username = Text1.Text
    alias = Text2.Text
    ID = Connected.logon(username, alias) `登录并返回ID值
    Timer1.Enabled = True
    Command4_Click
    End SubPrivate Sub Command2_Click() `注销
    x = Connected.logoff(ID)
    Timer1.Enabled = False
    Set x = Nothing `释放对象
    End SubPrivate Sub Command3_Click() `发送用户信息
    Dim TempID As Integer
    Dim TempString As String
    Dim x As String
    Dim y As Boolean
    x = Combo1.Text
    TempID = Connected.getuserid(x) `获得指定用户的ID值
    TempString = Text3.Text
    y = Connected.sendusermessage(TempString, TempID)
    End SubPrivate Sub Command4_Click()
    For I = 0 To Combo1.ListCount 1 `清空Combo1
    Combo1.RemoveItem 0
    Next Ix = Connected.GetUserInfo `接收用户信息
    cd$ = x
    lastst = 1
    For I = 1 To Len(cd$)
    If Mid$(cd$, I, 1) = "|" Then
    Namef$ = Mid$(cd$, lastst, I - lastst)
    Combo1.AddItem Namef$ `分离用户别名并加入Combo1
    lastst = I + 1
    End If
    Next IEnd SubPrivate Sub Form_Load()
    Timer1.Enabled = False
    Timer1.Interval = 300
    End SubPrivate Sub Timer1_Timer()
    Connected.Refresh (ID) `刷新用户标志
    x = Connected.GetSystemMessage() `接收系统信息
    y = Connected.GetUserMessage(ID) `接收用户信息
    If y < > "" And y < > Label6.Caption Then Label6.Caption = y
    If x < > Val(Label4.Caption) Then `刷新Combo1
    Label4.Caption = x
    Command4_Click
    End If
    End Sub---- 开 始 运 行。 输 入 你 的Username 和Alias, 单 击LogOn, 查 看 一 下 先 前 的VB 范 例, 看 看 你 的 名 字 是 否 在 内。 如 果 是, 证 明 你 的" 集 线 器" 成 功 了。 这 时, 不 管 已 登 录 的 用 户 处 于 什 么 原 因 没 有 用 LogOff 就 中 断 联 系, 系 统 都 会 在6 秒 后 自 动 删 除 这 些 用 户。 确 保 其 它 用 户 不 受 影 响。 ---- 这 个 程 序 经 过 改 动, 可 以 给 它 支 持Modem 的 功 能。 而 用 户 部 分 的 程 序 可 以 原 封 不 动。 编 译 时 在Options 中 选 中Remote Support File 并 利 用 附 带 的 安 装 程 序 安 装 到 网 络 服 务 器 上 就 可 以 真 正 实 现" 联 网" 了。 
      

  19.   

    在VB6.0中使ACCESS数据库在网络使用中保持同步同步(Synchronization)是数据库在网络环境中应用所要涉及到的一个重要概念。其基本过程大致分以下几个步骤:首先把一个数据库设为可复制副本属性,使其成为设计正本(VB中称设计原版,ACCESS中称设计母版);然后根据应用程序的实现需要从设计正本复制出多个副本(VB中称复本),这些副本组成一个副本集合(设计正本也被看做是第一个的、初始的副本);最后在集中任何复本的数据或结构被更改会时启用同步机制把改变发送并且应用于此复本集中的其他成员,使得副本集中的成员在数据或结构上保持一致性。实现同步的这一过程被称为同步化。VB6.0为实现同步,在数据库对象中提供了多个属性与方法来实现这一过程,以下介绍主要的几个属性与方法,分别对应同步化的几个步骤: 
    ---- 1.Replicable属性: ---- Replicable属性用来使一个数据库对象或数据库中的表对象、查询对象等对象成为可复制副本的,即成为设计正本。但数据库对象并不提供Replicable这一属性,因此首先要用CreatePropety方法来创建它,然后把它添加到对象的属性集中,最后再给它赋值,使数据库成为设计正本。对于数据库对象而言,把Replicable属性设置为“T”将使数据库对象成为可复制的。以下代码将使VB6.0安装目录下附带的Nwind.mdb数据库成为一个设计正本(为确保安全建议在操作前备份这一库文件): Private Sub Command1_Click() 
    Dim dbNwind As Database    
      '如果末引用DAO则一定要先引用
    Dim prpNew As Property
    Set dbNwind = OpenDatabase("Nwind.mdb", True)
    With dbNwind
    ' 建立Replicable属性,
        如果已经存在该属性则程序略过这一步
    On Error Resume Next
    Set prpNew = .CreateProperty
           ("Replicable", dbText, "T")
    .Properties.Append prpNew
    '设置数据库的Replicable属性为True
                      .Properties("Replicable") = "T"
    .Close
    End With
    End Sub
    ---- 2.MakeReplica方法: ---- MakeReplica方法从设计正本复制出一个新的完全副本。其语法为:database.MakeReplica replica, description, options,其中replica是代表一个新副本路径名称的字符串;description是对正在创建的新副本的一个描述字符串;options是一个可选项,可以是dbRepMakePartial常量(创建一个部分副本)或dbRepMakeReadOnly常量(防止用户修改新副本中的可复制对象),如果要建立的是一个只读式的部分副本,则要加入参数常量 dbRepMakeReadOnly + dbRepMakePartial 。 ---- 在第一个例子中,在关闭数据库之前加入代码:.MakeReplica "NwReplica", "replica of nwind.mdb",则从Nwind.mdb设计正本复制出一个名为NwReplica.mdb的副本,位置在Nwind.mdb同一目录中。以下是一个通过传递参数的形式,在实际应用中可供灵活调用的函数,每调用该函数一次即可实现新建一个副本: Function MakeAdditionalReplica(strReplicableDB As 
     String, strNewReplica As String, intOptions As 
     Integer) As Integer
    Dim dbsTemp As Database
    On Error GoTo ErrorHandler
    Set dbsTemp = OpenDatabase(strReplicableDB)
    ' 如果在调用此函数时,intOptions处末给出参数,
    则忽略该参数项,默认建立一个完全   
      '的、可读/写的副本,否则就利用提供的参数按要求建立副本
    If intOptions = 0 Then
    dbsTemp.MakeReplica strNewReplica, 
    "Replica of " & strReplicableDB
    Else
    dbsTemp.MakeReplica strNewReplica, 
    "Replica of " & strReplicableDB, intOptions
    End If
    dbsTemp.Close
    ErrorHandler:
    Select Case Err
    Case 0:
    MakeAdditionalReplica = 0
    Exit Function
    Case Else:
    MsgBox "Error " & Err & " : " & Error
    MakeAdditionalReplica = Err
    Exit Function
    End Select
    End Function
    ---- 3.Synchronize方法: 
    ---- Synchronize方法使两个完全副本(包括设计正本)同步化。其语法为:database.Synchronize pathname, exchange。其中pathname为要同步的目标副本的路径名称字符串(串中的 .mdb扩展名可省略);exchange用来标识两个数据库之间的同步方向(如表一),这是一个可选项,默认为表中的第三个选项,即双向交换。利用表中第四个dbRepSyncInternet常量选项,还可对通过Internet互联的数据库进行同步化,这时要将代表本地网络路径选项pathname用URL地址来代替。 常量 同步化方向
    DbRepExportChanges 从数据库到副本路径名称
    DbRepImportChanges 从副本路径名称到数据库
    DbRepImpExpChanges 双向交换改变(默认)
    DbRepSyncInternet 在通过Internet路径连接的数据库之间传递改变
    ---- 表一、同步化方向常量 
    ---- 在同步化操作之前,要确保已经利用 Replicable属性使一个数据库初始出设计正本,并且利用MakeReplica方法复制出了一个以上的副本。 ---- 以下通过在第一个例子添加的副本复制语句之后,加入如下语句:.Synchronize "NwReplica.mdb", dbRepExportChanges,实现把数据库 Nwind的设计正本的任何改变传递给副本 NwReplica。我们可以在Nwind.mdb库中改变一些数据内容,然后再运行这一例子,我们会发现Nwind.mdb库的改变已经反映在NwReplica.mdb这一副本中了。 ---- 以上语句实现从数据库到副本路径名称的同步(把设计正本的数据或结构改变传递给副本),把dbRepExportChanges常量改为dbRepImportChanges和dbRepImpExpChanges可分别实现从副本路径名称到数据库(数据库接收副本上的改变)以及双向交换(两者间的双向数据传递)同步。 ---- Synchronize方法还可对通过Internet互联的数据库进行同步化,以下语句实现本地数据库正本与位于Internet服务器上的一个副本同步化: dbNwind.Synchronize
     "www.mycompany.myserver.com"
     & "/files/NwReplica.mdb", _
    dbRepImpExpChanges + dbRepSyncInternet
    ---- 4.PopulatePartial 方法: 
    ---- 上面介绍利用Synchronize方法使两个完全副本同步化,不会出现问题,但如果用一个完全副本来同步一个部分副本,因为部分副本是由副本过滤器来从完全副本来过滤重新生成的,因此可能在部分副本中产生所谓的“孤立”记录,即这些记录不能再与其他副本保持同步。要解决这一问题引入了另一个称为PopulatePartial的方法,该方法与Synchronize方法类似,只不过它是实现部分副本与完全副本的同步,在同步时,首先清除部分副本中的所有记录,然后根据当前副本的过滤器来重新生成部分副本,这样就解决了“孤立”记录的问题。其语法为:database.PopulatePartial dbname。Dbname是完全副本的路径名称。由于篇幅所限以及其与Synchronize方法的相似性,因此在此不再累述,更详细的描述请参阅相关的联机帮助。