在异地有两台电脑(A,B)能通过网络进行连接。
电脑A和电脑B使用同一数据库,A为主机,B为分机。
分机B中的数据如有增加、修改、删除等操作,采用类似于数据报盘的方式,将发生变更的数据导出到U盘中,然后在电脑A中实现更新数据库的操作。
以便主机A与分机B实现数据同步。请问大家如何才能用VB编程实现上述内容,注意:电脑之间无法使用C/S模式

解决方案 »

  1.   

    电脑之间无法使用C/S模式?
    那你可以用B/S模式呀。
      

  2.   

    既然有网络连接,就能用 VPN 模拟成局域网,就可以用数据库自己的发布功能进行同步。
      

  3.   

    如果是这样仅相当于copy文件了.(filecopy)
      

  4.   

    SQL Server 2000 也有发布
      

  5.   

    我再重新说明一下吧,A电脑是总机,在异地有很多分机,如B电脑,C电脑....,然后各处的分机把本地的sql数据汇总到总机A中。如果B电脑中的数据发生了变化(增加,修改,删除),如何把这种变化后的数据反映到总机A中去?请大家帮帮忙
      

  6.   

    1: 如果两个电脑在同一个局域网中,可以采用CS模式进行通讯。这个而是最简单的方法。
    2:如果两个电脑仅在广域网中连接,就采用BS模式吧。(Socket也行)
    3:如果两个电脑根本就无法连接,请继续使用U盘,因为VB不是万能的。
      

  7.   


    可以连网的话,可以直接用SQL数据库的数据同步功能吧(配置订阅和发布)?为什么用U盘?
      

  8.   

    对啊,就是使用U盘啊,我只是说用VB怎样把分机SQL的数据导出,然后在总机电脑上如何将变化的数据导入啊??
      

  9.   


    只能用U盘的话,如果分机和总机数据库结构一样,我想是不是可以在U盘上记录分机上执行成功的SQL语句,拿到总机上的SQL数据库中去执行就行了吧?
      

  10.   

    恩恩。就是这个意思,但是直接记录语句好像不太好吧,因为操作人员不会使用数据库,最好还是能用vb在前台进行操作。看看如何把SQL语句生成一个什么文件,然后在vb中进行执行
      

  11.   


    就是这个意思啊, 操作分机和主机的VB程序都你写吧? 记录分机操作的SQL语句到文件,文件结构你自己定义,主机程序解析这个文件,执行其中的SQL语句...
      

  12.   

    现在的主要问题就是如何记录B电脑中vb操作sql所使用的语句,然后进行导出,在A电脑中在调用这段sql语句,更新A电脑中的数据库内容。最终实现数据同步
      

  13.   

    建一个DB类,把以下语句拷进去:
    '保持属性值的局部变量
    Private mvarConnection As Connection '局部复制
    Public Sub OpenDB(ByVal vConnectionString As String)
        If mvarConnection.State = ADODB.adStateOpen Then
            mvarConnection.Close
        End If
        mvarConnection.CursorLocation = adUseServer
        mvarConnection.Open vConnectionString
    End Sub
    Public Property Get Connection() As Connection
    '检索属性值时使用,位于赋值语句的右边。
    'Syntax: Debug.Print X.Connection
        Set Connection = mvarConnection
    End PropertyPublic Function QuerySql(ByRef rRs As Recordset, ByVal vSql As String, ParamArray vParams() As Variant) As String
        Dim cmd As New Command
        Dim param As Variant
        Dim rt As String
        On Error GoTo tErr
        
        Set cmd.ActiveConnection = mvarConnection
        cmd.CommandText = vSql
        cmd.CommandType = adCmdText
        
        '记录语句
        WriteLog vSql & vbtab & join(vParams,"`~`")    cmd.Prepared = True
        Set rRs = cmd.Execute(rt, vParams)
        QuerySql = rt
        GoTo funEnd
    tErr:
        QuerySql = err.Description
        err.Raise vbObjectError + 5, err.Source, "执行查询时发生错误" & vbCrLf & vbCrLf & "原因:" & err.Description
    funEnd:
    End FunctionPrivate Sub Class_Initialize()
        Set mvarConnection = New Connection
    End SubPrivate Sub Class_Terminate()
        Set mvarConnection = Nothing
    End Sub
    private sub WriteLog(byval LogText as string )
        dim iFileNum  as integer
        dim sFileName as string
        dim bytContent() as byte
        iFileNum  =freefile    sFileName =app.path & "\Sql.txt"
        bytContent=strconv(LogText,vbFromUnionCode)
        open  sFileName  for binary as #iFileNum    put #iFileNum,lof(iFileNum)+1,bytContent
        close #iFileNum
    end sub然后每次使用QuerySql方法执行数据库查询,在应用程序目录中就有Sql.txt文件,里面就是执行的语句.
      

  14.   

    LS的方法很好
    记录所有的SQL操作,再到服务器上执行
      

  15.   

    向表1中添加1条记录
    Set cn = New ADODB.Connection
    cn.Open "Provider=sqloledb;Data Source=服务器名 ;Initial Catalog=数据库名;User Id=sa;Password="
    sql = "select * from 表1"
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.Open sql, cn, adOpenDynamic, adLockOptimisticrs.Requery
    If rs.EOF <> False Then          '数据库为空
    rs.AddNew
    rs.Fields(1) = Trim(Text2.Text)
    rs.Fields(2) = Trim(Text1.Text)
    rs.Update请大家指导一下,上述语句如何改写成调用QuerySql的形式??
      

  16.   

    不太好办,建议用SQL自身的出版订阅
      

  17.   

    我主要就是解决如何在B主机中对sql的操作在异地的A主机中同样执行一下对sql的操作,而且只能用vb代码实现
      

  18.   

    重复:增量备份就是对日志(所有的 SQL 操作)的备份。恢复增量备份就是将 SQL 操作同样执行一般。
    重复:BACKUP DATABASE 和 RESTORE DATABASE 都可以在 VB 中通过 ADODB.Connection.Execute 进行调用。
      

  19.   

    怪事,如果a-b之间没有实时联接的话,你所说的操作不就无法实现了吗?而如果你需要做的只是B上的sql操作在事后到A上再操作一次,不是很容易实现吗?在B上操作Sql时,用txt记录每一条sql语句,然后到A上时,打开这个txt文件,再操作每一条Sql语句,不行吗?
      

  20.   

    电脑之间无法使用C/S模式?
    那你可以用B/S模式呀