Доступ с 1 MySQL Table с запросом учетных данных - PullRequest
6 голосов
/ 12 мая 2019

У меня есть база данных доступа, использующая локальный сервер SQL Server для всех таблиц, кроме 1 таблицы MySQL, основанной на Интернете.Таблица MySQL имеет 50 строк или около того, 3 поля, совсем не большие.У меня есть настройка соединения odbc, и таблица связана с сохраненным паролем.Эта таблица обновляется не более 30 раз в день ... Иногда разрывается соединение и появляется всплывающее окно подключения MySQL ... щелчок по тесту приведет к успеху, а нажатие кнопки ОК позволит продолжить выполнение кода.Он выполняет обновление в 1 строку (SET LastUpdatedDate = # "& now () &" # WHERE ItemID = 'xyz').

Я хочу зафиксировать ошибку или заставить ее продолжить без подключения, еслион недоступен ... но, похоже, ошибка не генерируется.Я бы предпочел не обновлять таблицу, когда это произойдет, а затем физически выбрать ok, чтобы запустить ее снова.Эта проблема существует в нескольких местах на нескольких компьютерах по всей территории США.Я предполагаю, что это сервер, на котором размещена база данных MySQL, возникают проблемы - я просто хочу знать, как их игнорировать и переходить к другому коду ... опять же, никаких сгенерированных ошибок (так при ошибке ... выиграл 'т работа).Есть идеи?Использование Access 2016.

ОБНОВЛЕНИЕ: мои текущие настройки - пинговать сервер ... и, если пинг получает ответ, я предполагаю, что он работает ... тогда я запускаю "CurrentDb.Execute" UPDATE XYZ SETABC = 'DEF', где GHI = 'JKL' ".Так просто.Если я пытаюсь выполнить запрос к таблице XYZ, но она недоступна, я получаю то же всплывающее окно подключенияКак мне обновить стол?Удалить ссылку и воссоздать?

НОВОЕ ОБНОВЛЕНИЕ Наконец-то нашлось время попробовать запрос на передачу без DSN, предложенный Андре ниже.Когда я добираюсь до шага 'execute', я получаю сообщение об ошибке, в котором говорится, что я не могу выполнить запрос select ... но это запрос на обновление.Вот строка SQL ... .SQL = "UPDATE [Status] SET ItemDate = NOW() WHERE PlantID = '" & PlantID & "' AND ItemID = '" & ItemID & "'"

Ответы [ 3 ]

5 голосов
/ 19 мая 2019

Я предлагаю вместо того, чтобы выполнять запрос Access для связанной таблицы, вы используете DSN-без сквозной запрос , который вы создаете на лету.

Это должно либо работать всегда, либо вызывать ошибку, которую можно отследить.

Const ConnectString = "ODBC;DRIVER={MySQL ODBC 5.1 Driver};SERVER=your.server.com;PORT=3306;DATABASE=mydatabase;UID=myuserid;PWD=mypassword"

Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.CreateQueryDef("")
With qdf
    ' Setting .Connect turns it into a Pass-Through query
    .Connect = ConnectString
    ' Need to set this for non-SELECT queries
    .ReturnsRecords = False
    ' Note: you need to use MySql syntax here, not Access SQL, especially the correct date format
    .SQL = "UPDATE XYZ SET ABC = 'DEF' WHERE GHI = 'JKL'"
    ' or since MySql has a NOW() function too, just this:
    .SQL = "UPDATE foo SET LastUpdatedDate = NOW() WHERE ItemID = 'xyz'"
    .Execute
End With

Вы также можете попробовать сохраненный сквозной запрос, он также может работать. Тогда вам нужно будет только указать текущий .Sql, а не строку подключения.

1 голос
/ 17 мая 2019

Прежде чем попробовать UPDATE, выполните простое SELECT. Если он не возвращает разумный результат, предположим, что соединение разорвано.

1 голос
/ 12 мая 2019

Может быть, вы получите полезную ошибку, если выполните команду SQL с параметром dbFailOnError? Как CurrentDB.Execute ("Ваш SQL", dbFailOnError)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...