Загрузка записей MS Access с локального компьютера - PullRequest
1 голос
/ 26 августа 2011

Мне нужен способ загрузки записей MS Access с локального компьютера в базу данных MS Access, расположенную на веб-сервере.

В идеале я хотел бы использовать простой интерфейс VBA с надписью «Загрузить все новые».«Записи», который затем подключит FTP (имя пользователя, pwd) и вставит записи в централизованную базу данных.

Возможно ли это?Если нет, кто-нибудь знает простое решение?Мы хотим использовать MS Access для удобства пользователей ...

Заранее спасибо, AC.

Ответы [ 2 ]

3 голосов
/ 26 августа 2011

Один из способов сделать это - использовать ADO Recordset.Save , чтобы сохранить постоянный набор записей на стороне клиента (не в сети), а затем отправить этот набор записей на веб-сервер (POST). может быть сделано с использованием объекта MSXML2.XMLHTTP на стороне клиента)

Как только веб-сервер получает POST, вы можете использовать сценарий ASP с ADO Recordset.Open , чтобы открыть его и заполнить базу данных.

РЕДАКТИРОВАТЬ - Прикрепить пример кода. Я проверил это, и, кажется, работает довольно хорошо. Самым сложным может быть настройка вашего веб-сервера для возможности чтения базы данных Access; тем не менее, я думаю, что, если он находится в той же папке, что и сценарий ASP, все будет в порядке.

Обратите внимание, что структура таблицы с обеих сторон должна быть одинаковой.

Я просто перечитал ваш пост и понял, что вы хотите использовать FTP. Это веб-решение (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 не является отличной веб-СУБД, но она должна быть в порядке, если у вас мало пользователей.

2 голосов
/ 26 августа 2011

Я не думаю, что есть простое решение , поэтому:

предложение 1 : вы не можете загрузить базу данных Access, обновить еелокально, а затем отправить его обратно?
в противном случае,
предложение 2 : используйте ms Access «для удобства пользователя» в качестве локального интерфейса, если хотите, но свяжите его с SQL Server или mySQL(все, что доступно на вашем хосте).

...