Клиент Access знает, находится ли он в режиме «on» или «off line». Таким образом, должен быть способ, которым Access проверяет / проверяет / знает, что эти таблицы в настоящее время отключены (локально) или фактически имеют прямое соединение с SharePoint и активно синхронизируют данные. Мое чувство паука говорит мне, что этот статус может быть не раскрыт, и если это так, я не знаю, как получить это значение.
Однако вы можете попытаться выполнить полную операцию веб-синхронизации, и если вы отключены от сети, вы получите ошибку (3021). Это кажется чем-то вроде клуджа, и вполне возможно, что статус можно проверить (но я не знаю, как на данный момент).
Так что попытка синхронизации вызовет эту проблему.
например
On Error Resume Next
DoCmd.RunCommand acCmdSyncWebApplication
Debug.Print Err.Number
Как правило, константа acCmdSyncWebApplicaiton равна 699
Однако вышеприведенное фактически выдает диалоговое окно, которое должно быть закрыто. Так что выше, это нормально для кнопки взаимодействия с пользователем, но НЕ для взаимодействия или автоматизации без взаимодействия с пользователем.
Единственный способ узнать, как это сделать прямо сейчас из Access, - это вызвать процедуру на уровне таблицы в SharePoint.
Для меня неплохо работает следующее:
On Error Resume Next
DoCmd.RunDataMacro "tblmonthtext.test1"
Debug.Print Err.Number
Если мы находимся в режиме онлайн и таблицы подключены, то вызов процедуры на уровне таблицы (она ничего не делает) работает нормально, и errnumber = 0. Если мы находимся в автономном режиме, то вызов процедуры таблицы невозможен, и, следовательно, ошибка номер = 13087.
Как уже отмечалось, поскольку мы имеем дело с автоматическим соединением или отключением таблиц, тогда мой код VBA, открывающий таблицы, работает нормально, независимо от того, подключено ли вы к сети или приложение работает в автономном режиме, а не в режиме онлайн. , Я не думаю, что код знает или заботится, и это большая ваша проблема.
Так что я могу вызвать эту табличную процедуру из Access. Я полагаю, что объект и методы docmd предоставляются в виде автоматизации (взаимодействия) .net, поэтому на данный момент я использую этот kluge, и он работает для меня довольно хорошо. Если выставлен rundatamacro, вы можете использовать эту идею.
Еще один ключ (тот, который вам больше подойдет) должен использовать фиктивную таблицу и добавить новую запись. Когда таблицы находятся в автономном режиме, сгенерированное значение PK автономера равно отрицательным значениям. Когда вы, наконец, подключены к сети и выполняете синхронизацию, эти отрицательные числа PK заменяются сгенерированными положительными значениями PK на стороне сервера.
И когда вы в сети и добавляете строку, вы получаете положительное значение автонумера PK. Итак, еще один возможный трюк - просто иметь фиктивную таблицу без записей.
Затем вы просто добавляете запись, убедитесь, что она сохранена. Затем вы берете значение pk, а затем, я полагаю, просто удалите строку. (поэтому таблица никогда не заполняется). Если значение pk> 0, вы подключены к сети. Если значение PK <0, то вы находитесь в автономном режиме. Таким образом, одна «подсказка» или идея находится в автономном режиме. Значения строки PK будут заменены, когда вы, наконец, получите соединение с синхронизацией, и в течение этого периода времени эти значения PK будут <0. </p>