我需要一种将MS Access记录从本地计算机上传到位于Web服务器上的MS Access数据库的方法。
理想情况下,我会使用一个简单的VBA界面和“上传所有新记录”按钮,然后连接FTP(用户名,密码)并将记录插入集中式数据库。
这可能吗?如果没有,有没有人知道一个简单的解决方案?我们希望使用MS Access来提高用户友好性......
提前致谢, AC
答案 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(主机上可用的任何内容)。