Клуб API Карт

the download of the specified resource has failed (VBA, ADODB)

Пост в архиве.

Добрый день,

я хочу воспользоваться API Яндекс.Карт через http в своей форме в Access для получения координат введенного адреса. Функция получает город и адрес и возвращает координаты. 

Половина запросов работает нормально, и все хорошо работает, возвращает xml-документ с координатами. Но другая половина дает следующую ошибку в момент открытия соединения: -2147217887 (80040e21)  The download of the specified resource has failed.

Код такой:

 

Public Function YandexCoord(City As Variant, address As Variant) As String

    Dim adoConn As ADODB.Connection
    Dim adoRS As ADODB.Recordset
    Dim yandurl As String
    
    Set adoConn = New ADODB.Connection
    Set adoRS = New ADODB.Recordset

    adoConn.Open "Provider=MSDAOSP; Data Source=MSXML2.DSOControl;"
   yandkey =  "AIubs0sBAAAAv9znOAQAjJv0OLU5VvqogJTzyUfsjXo8lloAAAAAAAAAAADIKqUffHTfOYiuar6iUlm07SbEcQ==" 
           & IIf(City & "" <> "", ",+" & Spaces2Url(City & ""), "") & IIf(address & "" <> "", ",+" & Spaces2Url(address & ""), "") _ 
           & "&key=" & yandkey

    adoRS.Open yandurl, adoConn '  <------------ Ошибка тут


    Dim iLevel As Integer
    iLevel = 0
    WalkHier iLevel, adoRS, YandexCoord ' эта процедура запускает разбор xml, но до нее не доходит дело 
    If found = False Then YandexCoord = "не найдено или ошибка"
    Set adoRS = Nothing
    found = False
  
                         
End Function

Function Spaces2Url(str As Variant) As String
    Dim n As Long
    
    For n = 1 To Len(str)
        If Mid(str, n, 1) = " " Then str = Left(str, n - 1) & "+" & Mid(str, n + 1)
    Next n
    Spaces2Url = str
End Function

 

При открытии сгенерированного адреса в Браузере все ок, а если проверить ответ сервера из Access, то в нем будет 400 - Bad Request. Причем если запросить координаты "Беларусь+Барановичи,+Красногвардейска+18" он вернет координаты г. Барановичи (в Яндексе нет карт г. Барановичи), а если запросить "Беларусь+Барановичи,+Красногвардейская+18"- то будет ошибка. Или, например, если спросить адрес "Беларусь,+Берестовица" - найдет, а "Беларусь,+Большая+Берестовица" - ошибка. Если открыть xml-документ на диске, полученный через браузер и сохраненный, то все ок.


Ключ API получен на IP-адрес (сегодня)


Что-то ничего не пойму.

3 комментария
Александр Новиков
28 января 2016, 07:40
Вы практически ответили на свой вопрос. Очень похоже что ошибки возникаю в том случая, когда в запросе есть буква "я". В принципе известный баг... Похоже что VBA немного подглючивает с кодировкой и в результате запрос получается невалидный. Как исправить не скажу -- давно на VBA не программировал :) Но могу посоветовать кодировать данные перед отправкой запроса. Либо использовать UTF-8 либо попробовать url encode - кода символы заменяются на их шестнадцетиричные коды.
Однозначно надо использовать urlencode
как это я сам не догадался? спасибо большое