如何在具有拆分数据库的MS Access 2010应用程序中同步网络中的6台笔记本电脑

时间:2016-07-18 18:46:19

标签: ms-access-2010

我在MS Access 2010中创建了一个应用程序构建,这创建了作业单,我使用了分割数据库,它让我将表保留在服务器中,并将前端程序保存在工作站中。现在,问题是我有6台具有相同应用程序的笔记本电脑,但是当外出时,笔记本电脑与网络断开连接。当笔记本电脑回到办公室并再次连接到网络时,我需要一种与工作同步的方法。

我正在同步按下一个按钮,将文件复制到服务器,在本地删除表格,然后从服务器复制回记录,但我想找到一种在笔记本电脑找到网络时自动同步的方法。

'*************IN THIS PART AM SENDING UPDATING SERVER AND SENDING NEW RECORDS ************
Dim x As Integer
Dim i As Integer
Dim strSQL As String

x = MsgBox("Are you Sure you want to Send to Server?????", vbOKCancel, "Are you sure?")
If x = vbOK Then
Dim intX, intY As Integer
Dim intW As Integer
Dim db As Database
Dim LSQL, SOurce, DestinaTion, fILE As String
Dim FSO

Set FSO = CreateObject("Scripting.FileSystemObject")

SOurce = "O:\fieldticket\"
'DestinaTion = "\\rvfile03\Departments\Water\Common\FieldTickets\"
DestinaTion = "\\rwmain01\gis\FieldTicket\"
fILE = Dir$(SOurce & "*.one")
'    Do While Len(fILE) > 0 And FSO.FileExists(DestinaTion & fILE) = True
Do While Len(fILE) > 0
    If FSO.FileExists(fILE & DestinaTion) = False Then
        FileCopy SOurce & fILE, DestinaTion & fILE
    End If
    fILE = Dir$()
Loop

fILE = Dir$(SOurce & "*.pdf")
Do While Len(fILE) > 0
    If FSO.FileExists(fILE & DestinaTion) = False Then
        FileCopy SOurce & fILE, DestinaTion & fILE
    End If
    fILE = Dir$()
Loop

Set db = CurrentDb()

'  REINIT PROGRESS BAR
ProgressBarB.WIDTH = 0
Me.Repaint
' FILL IN OUR SQL QUERIES COLLECTION
   Define_SQL_Queries

DoCmd.SetWarnings False
Me.Refresh
Me.Repaint

DoCmd.SetWarnings False
Me.Refresh
    With CurrentDb
        '    ******* COUNT HOW MANY NEW RECORD ARE TRANSFERING **************************************************
        intX = DCount("*", "RECORDS IN JobsOrder NOT IN JobsOrder1")

        ' ********** UPDATE JOBSORDER TABLE AND COUNT HOW MANY RECORDS ARE UPDATED ******************************
        LSQL = "UPDATE_Jobsorder1_SERVER_WITH_Jobsorder"
        db.Execute LSQL

        ' ****************  GIVE A MESSAGE OF HOW MANY RECORDS ARE UPDATED AND TRANSFERED **********************
        MsgBox CStr(db.RecordsAffected) & " RECORDS UPDATED " & intX & " NEW RECORDS WILL BE ADDED AND "

        '************ new progress bar code using for command *************
        Me.ProgressBarA.Visible = True
        Me.ProgressBarB.Visible = True
        For i = 1 To colSQL.Count
            strSQL = colSQL(i)
            Debug.Print "Executing : " & strSQL
            Call .QueryDefs(strSQL).Execute
            ProgressBarB.WIDTH = (ProgressBarA.WIDTH / colSQL.Count) * i
            Me.Repaint
        Next i
        Call Me.Requery
        DoCmd.SetWarnings True
    End With

'    MsgBox ("TRANSFER AND UPDATE HAS BEEN FINISHED!!!")
Me.ProgressBarA.Visible = False
Me.ProgressBarB.Visible = False
'    Exit Sub
ElseIf x = vbCancel Then
    Exit Sub
End If

    '*******NOW I AM SENDING BACK FROM SERVER TO HANDHELD ************************

Dim y As Integer
Dim ii As Integer
Dim strSQL1, SOurce1, DestinaTion1, fIL1E As String

Beep
'x = MsgBox("Are you Sure you want to UPDATE HANDHELD?????", vbOKCancel, "Are you sure?")
'If y = vbOK Then
 'If PASSWORD = "222222" Then
    Dim intX1, intY1 As Integer
    Dim intW1 As Integer

DoCmd.SetWarnings False

ProgressBarB.WIDTH = 0
Me.Repaint

    'SOurce = "\\rvfile03\Departments\Water\Common\FieldTickets\"
    'DestinaTion = "c:\mapping\"
    'fILE = Dir$(SOurce & "*.one")
    'Do While Len(fILE) > 0
    '    If Dir$(fILE) & "" = "" Then
    '        FileCopy SOurce & fILE, DestinaTion & fILE
    '    End If
    '    fILE = Dir$()
    'Loop


    ' FILL IN OUR SQL QUERIES COLLECTION
     Define_SQL_Queries1

    DoCmd.SetWarnings False
    Me.Refresh
        With CurrentDb
            intX1 = DCount("*", "RECORD IN Jobsorder1 not Finished")
'             MsgBox (intX1 & " RECORDS WILL BE ADDED")


        Me.ProgressBarA.Visible = True
        Me.ProgressBarB.Visible = True
        For ii = 1 To colSQL1.Count
            strSQL1 = colSQL1(ii)
            Debug.Print "Executing : " & strSQL1
            Call .QueryDefs(strSQL1).Execute
            ProgressBarB.WIDTH = (ProgressBarA.WIDTH / colSQL1.Count) * ii
            Me.Repaint
        Next ii
        Call Me.Requery
        DoCmd.SetWarnings True
    End With
MsgBox ("HANDHELD UPDATE COMPLETED!!!"), vbInformation
ProgressBarA.Visible = False
ProgressBarB.Visible = False
Exit Sub
'ElseIf y = vbCancel Then
'    Exit Sub
'End If
 MsgBox (intX1 & " RECORDS ADDED TO HANDHELD")


'******** FINISHING THE HANADHEL UPDATING *******************

1 个答案:

答案 0 :(得分:0)

您需要编写一些代码来检查连接性(连接到后端表时接下来是错误恢复并检查错误),然后在离线时连接到另一个本地表。然后回到办公室后,代码可以正常连接,然后您可以上传您的工作。最重要的是它会采取一些VBA来做到这一点。我无法在代码中为您提供解决方案,但这是它的要点。

如果您知道如何在VBA中进行编码,那么您可以真正检查网络文件夹,如果您在网络上,它将会在那里。如果它不存在,那么您可以假设您已离线。然后,您将需要编写更多代码来处理本地表而不是链接表。

Dim fso As FileSystemObject    
Set fso = New FileSystemObject

If fso.FolderExists("[Path to Network Folder]") Then
    ' I'm online
Else
    ' I'm offline
End If