从本地计算机上载MS Access记录

时间:2011-08-26 10:03:03

标签: ms-access ftp access-vba

我需要一种将MS Access记录从本地计算机上传到位于Web服务器上的MS Access数据库的方法。

理想情况下,我会使用一个简单的VBA界面和“上传所有新记录”按钮,然后连接FTP(用户名,密码)并将记录插入集中式数据库。

这可能吗?如果没有,有没有人知道一个简单的解决方案?我们希望使用MS Access来提高用户友好性......

提前致谢, AC

2 个答案:

答案 0 :(得分:3)

这样做的一种方法是使用ADO Recordset.Save在客户端(非Web)端保存持久记录集,然后将该记录集POST到Web服务器(POST可以使用客户端的MSXML2.XMLHTTP对象)

Web服务器收到POST后,您可以使用带有ADO Recordset.Open的ASP脚本将其打开并填充数据库。

编辑 - 附加一些示例代码。我测试了这个,它似乎工作得很好。最难的部分可能是配置Web服务器以便能够读取Access数据库;但是我想只要你把它放在与ASP脚本相同的文件夹中就可以了。

请注意,您的桌面结构必须完全相同。

我刚刚重新阅读你的帖子并意识到你想使用FTP。这是一个Web(http,仅限ASP)解决方案。如果 使用FTP,可以下载整个数据库,更新并发送回来。您还可以在文本文件中FTP持久记录集,并定期检查该文件夹中的更新,并在找到新文件时导入它们。

客户端(非网络端)MS-Access代码:

Sub ClientSide()
    'Used CreateObject in lieu of the lines below,
    'so you can run this code without references.

'    Dim oRS As ADODB.Recordset
'    Dim oStream As ADODB.Stream
'    Dim oXMLHTTP As MSXML2.XMLHTTP

    Dim oRS, oStream, oXMLHTTP

    Set oRS = CurrentProject.Connection.Execute("SELECT * FROM [MyClientTable]")
    Set oStream = CreateObject("ADODB.Stream")
    oRS.Save oStream, 1

    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")

    oXMLHTTP.Open "POST", "http://myserver:80/path/to/asp/server.asp", False, "username", "password"
    oXMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    oXMLHTTP.setRequestHeader "Connection", "keep-alive"
    oXMLHTTP.setRequestHeader "Accept", "text/xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2"

    sXML = oStream.ReadText

    oXMLHTTP.send sXML
    'The web server's response is in oXMLHTTP.responseText. You may need it for debugging.
    If oXMLHTTP.status <> 200 Then
        'This should pop up some useful information if the POST request fails.

        Set app = CreateObject("InternetExplorer.Application")
        app.Visible = True
        app.Navigate "about:blank"
        app.Document.Write oXMLHTTP.responseText
    End If

    oRS.Close
End Sub

服务器(网络侧)ASP页面“server.asp”:

<%
    sXML = Request.Form

    'Database is in the same folder as the asp page
    sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\inetpub\wwwroot\path\to\script\serverdb.mdb;User Id=admin;Password=;"
    Set oStream = Server.CreateObject("ADODB.Stream")
    oStream.Open
    oStream.WriteText sXML
    oStream.Position = 0

    Set oRS = Server.CreateObject("ADODB.Recordset")
    oRS.Open oStream

    sSQL = "SELECT * FROM [MyServerTable]"
    Set oDB = Server.CreateObject("ADODB.Recordset")
    oDB.Open sSQL, sConn, 1, 3

    'There's probably a more elegant/quick way of inserting the records,
    'but this should be a good start.
    Do While Not oRS.Eof
        oDB.AddNew
        For Each f in oRS.fields
            oDB.Fields(f.Name).Value = f.Value
        Next
        oRS.MoveNext
        oDB.Update
    Loop
    oDB.Close
    oRS.Close

    Response.write "Done"

%>

@iDevlop说明Access数据库不是一个出色的Web端DBMS是正确的,但只要你的用户数量很少就可以了。

答案 1 :(得分:2)

我认为没有简单的解决方案,所以:

建议1 :您无法下载Access数据库,在本地更新,然后将其发回去吗? 否则,
建议2 :如果需要,使用ms“将用户友好性”作为本地接口,但将其链接到SQL Server或mySQL(主机上可用的任何内容)。