ACCESS在局域网上可不可以互相传输数据?
我对此也很感兴趣,问题是纯粹的导入导出,还是数据同步交换?
目前我尝试过数据的导入导出,对于同步交换尚未解决。
我的方法可能很笨拙,只把我的思路提出来,抛砖引玉。
首先建一个窗体,在窗体上建一个命令按钮,点击命令按钮打开文件路径(打开文件的模块可参
考网上李寻欢提供的),找到你要导入表的数据库,它的路径如strFulPth(含数据库名),同时
用VBA编写一段程序
Set dbs = DBEngine(0).OpenDatabase(strFulPth, False, False)
SQL = "SELECT MSysObjects.Name FROM MSysObjects WHERE " & _
"(MSysObjects.Flags=0 AND MSysObjects.Type=1);"
Set rst = dbs.OpenRecordset(SQL)
If rst.RecordCount = 0 Then Exit Sub
Do Until rst.EOF
If Left(rst("Name"), 4) <> "MSys" Then sWnm = sWnm & rst("Name") & ";"
sWtp = sWtp & rst("Type") & ","
rst.MoveNext
Loop
上述这个文本变量sWnm就是要导入的数据库的全部表的名称,你可以把表名称逐个追加到一个对象表,
如TL清单,或者把这个文本变量作为列表框的RowSource,以供选择表名。
表名的剥离有以下方法
set dbs=CurrentDB
Do Until Len(sWnm) = 0
iNm = InStr(sWnm, ",")
sNm = Mid(sWnm, 1, iNm - 1) ‘每个表的名称
将每个表追加入TL清单程序省略
If Len(sWnm) = 0 Then Exit Do
Loop
然后对这个对象表(TL清单)进行循环,将对象表中每个表名与本机的所有表名进行比较,如果不存在则提问
是否要导入,如果存在提问是否覆盖。
strSc=每个表的表名
If IsNull(DLookup("Name", "MSysObjects", "Name='" & strSc & "' And Type=1")) Then
DoCmd.TransferDatabase acImport, "Microsoft Access", strFulPth, acTable, strSc, strSc, False
Else
strMessage = sObnm & " " & strSc & " 已经存在,是否覆盖?"
If Confirm(strMessage) Then
DoCmd.DeleteObject acTable, strSc
DoCmd.TransferDatabase acImport, "Microsoft Access", sRspath, acTable, strSc, strSc, False
End If
End If
如果是导出则对象表的产生改为
Set dbs = CurrentDB
SQL = "SELECT MSysObjects.Name FROM MSysObjects WHERE " & _
"(MSysObjects.Flags=0 AND MSysObjects.Type=1);"
Set rst = dbs.OpenRecordset(SQL)
If rst.RecordCount = 0 Then Exit Sub
Do Until rst.EOF
If Left(rst("Name"), 4) <> "MSys" Then sWnm = sWnm & rst("Name") & ";"
sWtp = sWtp & rst("Type") & ","
rst.MoveNext
Loop
然后打开目标文件以获得目标路径strFulPth,步骤类同。
DoCmd.TransferDatabase acExport, "Microsoft Access", strFulPth, acTable, strSc, strSc, False
但是导出表时,目标文件必须是关闭的,而且只能是覆盖方式导出。
对于更新式的同步传输,类似于手机与PC之间同步传输,尚未想出思路,也希望知道这方面的思路。
以上仅供参考。