Ошибка выполнения запроса
Зависимость результата ограничений доступа к данным от плана запроса СУБД
В некоторых случаях результат ограничений доступа к данным может зависеть от плана запроса СУБД. В данной статье рассмотрены возможные ситуации и даны рекомандации, как этого избежать.
Условия возникновения проблемы
Проблема возможной зависимости результата ограничений доступа к данным от плана запроса СУБД может возникнуть при выполнении запроса к базе данных без ключевого слова РАЗРЕШЕННЫЕ , если для текущего пользователя имеются ограничения доступа к данным, и при этом запрос содержит одно или несколько сравнений вида:
Если в этом случае использует таблицы базы данных, на которые наложены ограничения доступа, то возможно, что на одних СУБД запрос будет выполняться успешно, а на других будет выдаваться сообщение У пользователя недостаточно прав на исполнение операции над базой данных при условии полной идентичности данных в информационных базах.
Причина различий
Возможная разница в поведении объясняется реализацией ограничений доступа к данным без ключевого слова РАЗРЕШЕННЫЕ в 1С:Предприятии.
Запрос без ключевого слова РАЗРЕШЕННЫЕ должен выполниться успешно только в том случае, если в процессе его выполнения не происходит обращений запрещенным данным. Для этого выборке данных добавляется специальное сигнальное поле, которое принимает значение Истина для тех записей, в формировании которых участвовали только разрешенные данные, и значение Ложь для всех остальных записей. Если хотя бы в одной записи выборки имеется значение Ложь в сигнальном поле, то выполнение запроса завершается аварийно.
Такое же сигнальное поле добавляется и к результатам запросов, вложенных в сравнение В / НЕ В . Причем проверка значения сигнальной колонки в этом случае выполняется средствами СУБД. Таким образом, если в процессе выполнения вложенного запроса происходило обращение к запрещенным данным, то выполнение запроса должно завершиться с ошибкой У пользователя недостаточно прав на исполнение операции над базой данных .
Однако, при построении плана запроса СУБД может не получать полную выборку , а получать только те записи, которые фактически необходимы для проверки условия В / НЕ В . В этом случае выполнение запроса может оказаться успешным даже если при выполнении , как самостоятельного запроса, могли бы произойти обращения к запрещенным данным.
Пример и рекомендации
Рассмотрим простой пример. Пусть на таблицу Справочник . ФизическиеЛица наложены ограничения доступа к данным. В этом случае запрос:
будет выполнен с ошибкой из-за попытки обращения к запрещенным данным. Если же этот запрос участвует в сравнении, например:
то в зависимости от выбранного СУБД плана запроса запрос может быть выполнен как успешно, так и с ошибкой. Такое поведение запроса не является ошибочным, поскольку обращение к запрещенным данным в процессе выполнения этого запроса может произойти, а может и не произойти. Для получения более предсказуемого результата необходимо построить запрос таким образом, чтобы вложенный запрос гарантированно не выполнял обращений к заведомо ненужным данным. В частности, если предыдущий запрос переписать так:
Данный запрос отличается от предыдущего тем, что вложенный запрос не выбирает записей, которые заведомо не требуются для выполнения сравнения В . Поэтому он завершится успешно, если ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо ссылается только на разрешенные записи таблицы Справочник.ФизическиеЛица , и аварийно, если среди ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо имеются ссылки на запрещенные записи.
Ошибка «У пользователя недостаточно прав на исполнение операции над базой данных»
Всем добрый день!
Очень странная ситуация. В базе ведется учет по разным организациям. Права доступа настроены так, что пользователи видят только данные по своей организации. Есть два пользователя из разных организаций, у которых права доступа настроены абсолютно одинаково. Пытаюсь рассчитать средний заработок в документе «Оплата по среднему» (при расчете среднего заработка в отпуске тоже самое) — в одной организации все нормально, в другой не рассчитывается. Ошибка при выполнении запроса. Нажимаю подробно:
<ОбщийМодуль.ПроведениеРасчетовПереопределяемый.Модуль(2433)>: Ошибка при вызове метода контекста (Выполнить)
ВыборкаБазы = Запрос.Выполнить().Выбрать();
по причине:
по причине:
Ошибка выполнения запроса
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.
Лезу в код. В этом модуле, перед тем, как выполняется запрос, вызывается процедура
ПроведениеРасчетов.ДописатьАлгоритмВЗапрос(«РасчетнаяБазаСреднегоЗаработка», КомментироватьРасчет, Запрос);
в которой дописывается кусок запроса, именно в нем проблема. Если закомментировать вызов этой процедуры, запрос выполняется. Проверила доступ ко всем регистрам, справочникам, используемым в этом запросе — с доступом все нормально.
Не понимаю, где рыть. Повотрюсь — в других организациях все считается нормально. Только в одной.
Есть еще непонятная ситуация — перепровожу документы «Начисление зарплаты» (все в той же организации). Все документы перепроводятся, а по одному месяцу не проводится. Ошибка при вызове метода контекста (Выполнить):
Ошибка при выполнении обработчика — ‘ПриЗаписи’
по причине:
<РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.МодульНабораЗаписей(688)>: Ошибка при вызове метода контекста (Выполнить)
по причине:
Ошибка выполнения запроса
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.
В самом запросе идет затык при попытке выбрать записи:
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций. ФактическийПериодДействия (
| ВидРасчета В
| (ВЫБРАТЬ
| СписокВР.ВидРасчета
| ИЗ
| ВТ_СписокВР КАК СписокВР)
| И (Сотрудник, ПериодДействия) В
| (ВЫБРАТЬ
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.ПериодДействия
| ИЗ
| ВТ_СотрудникиПериодыДействия КАК ОсновныеНачисления)) КАК НачисленияФПД
Что это за ФактическийПериодДействия и как к нему определяется доступ?
Если бы была проблема некорректной настройки правд доступа в принципе, не думаю, что документы «Начисление зарплаты по сотрудникам организаций» вообще бы проводились. А так, получается, что по всем месяцам проводятся, и только в одном — нет.
А отпуска и оплата по среднему вообще не проводятся. Кто с таким сталкивался? Не знаю, что делать, куда лезть дальше.
Ошибки USSD запросов: что происходит и как исправить
“Не могу проверить баланс”, “Не получается перевести деньги со счета на счет”, “Вместо звонка начинается выполнение запроса USSD” — все эти жалобы и многие другие можно объединить в общую проблему абонентов: ошибки USSD-запросов.
Сложности с технологией USSD расстраивают пользователей, поскольку многие люди ощутили, как удобно управлять балансом и тарифами через короткие коды.
Спешим обрадовать: если не работают USSD запросы, в 99% случаев это решаемая проблема, не составит особого труда, и не требуется специальных знаний.
Временные сбои
Если при выполнении USSD запроса сообщение об ошибке появляется изредка (“USSD запрос не может быть выполнен”, “Произошла ошибка” и т. п.), это можно списать на неполадки с сетью. В процессе обмена между телефоном и сервисной платформой оператора случаются сбои. Повторите запрос заново или перезагрузите телефон и попробуйте задать команду еще раз.
Гораздо сложнее случаи, когда USSD запросы не проходят систематически, и выключение-включение телефона никак не помогает.
”Раньше всё работало!”
Это первое, что говорят абоненты, кто столкнулся с постоянными ошибками. Действительно, владельцы новых телефонов редко жалуются на ошибки USSD запросов — с только что приобретенными аппаратами всё работает четко. И только через некоторое время можно обнаружить (обычно при проверке баланса), что команды USSD не выполняются. При этом телефон может никак реагировать на запрос, сразу показывая стартовую страницу, а может зависнуть
Почему же не выполняются USSD запросы, и что делать?
Как показывает практика, ошибки чаще всего возникают на операционной системе Android, и почти никогда — на IOS и Windows Phone. Страдают владельцы гаджетов HTC, Huawei, LG, Sony и многих других.
Пользователи описывают несколько ситуаций, связанных с ошибками USSD команд. Рассмотрим каждую из них подробнее.
Быстрые решения
Независимо от модели вашего смартфона, есть несколько простых решений, позволяющих быстро устранить проблему с ошибками коротких команд, если проблема не в самом гаджете. Для начала просто попробуйте перерегистрироваться в сети.
- Переведите телефон в “авиарежим”;
- Выключите “авиарежим” через минимум 10-15 секунд.
Обычно такого простого решения достаточно, для решения проблемы, если она вызвана сбоем в подключении к сети оператора. Однако вы можете попробовать и полную перезагрузку устройства.
Конфликт программного обеспечения
После покупки нового телефона на “Андроиде” пользователь, разумеется, подстраивает его под себя и заполняет память полезными приложениями. После установки очередной программы могут внезапно перестать выполняться USSD запросы — появляются надписи “код USSD отменен”, “недействителен”. Телефон никак не реагирует на команду.
Техподдержка мобильных брендов даёт лишь один совет — выполнить общий сброс системы (hard reset). В разных моделях телефонов эта функция может называться “Сброс данных”, “Возврат к заводским установкам” и т. д.
Перед сбросом рекомендуется сохранить все личные данные на внешних источниках или в облачных хранилищах. При сбросе системы удаляются контакты, фото, сообщения, а также все сторонние приложения, одно из которых, возможно, и вызвало ошибки при выполнении USSD запросов.
Обновление прошивки
Производители мобильных телефонов устанавливают на смартфоны официальное программное обеспечение — прошивку, без которой гаджет был бы просто предметом из металла и пластика. Время от времени выпускаются обновления операционной системы, причем их установка часто происходит без ведома пользователя.
После обновления ОС многие владельцы “Андроидов” отмечают, что перестали работать USSD запросы. То же самое случается и когда пользователь в качестве эксперимента установил альтернативную прошивку от независимых разработчиков.
Серьезные программные изменения приводят к конфликтам ПО. Чтобы вернуть все “на круги своя”, нужно воспользоваться уже знакомым нам способом — выполнить полный сброс системы.
Установлено оповещение о смене SIM
Владельцы Android на форумах отмечают, что при проблемах с USSD запросами иногда помогает “необъяснимое”:
- зайти в меню “Настройки — GPS и безопасность”;
- снять галочку “Оповещение о смене SIM”;
- перезагрузить смартфон.
Мы не вдавались в технические подробности, но если пользователи так говорят, есть смысл прислушаться. Тем более, что этот способ никак не угрожает вашему телефону.
Запрос USSD выполняется при вызову
Распространенная проблема на некоторых аппаратах Android — при обычном звонке появляется надпись “выполняется USSD запрос”, после чего телефон зависает, невозможно отменить звонок и повесить трубку. Считается, что это один из “багов” прошивки, который лечится только полным сбросом системы.
USSD запросы перестали работать после установки антивируса
Особенно часто источником проблемы считают антивирус Касперского. Если вы недавно установили это приложение, после чего отключились USSD запросы, следует проверить два момента:
- Функция “Антивор” должна быть отключена.
- Не установлено ли ограничение на приём сообщений от контактов, содержащих буквенные символы, ведь ответы на USSD запросы часто приходят в отдельных сообщениях от Beeline, Megafon, MTS и т. п.
Альтернативные способы решения проблемы
Полный сброс системы, который советует техподдержка любого бренда, связан с определенными сложностями: исчезнут контакты, сообщения, приложения и все данные, имеющие ценность для хозяина смартфона. Поэтому перед радикальным методом стоит попробовать более щадящие, а именно:
- Очистить кэш-память;
- Установить программу USSD Cheker из Google Play (для Android);
- Удалить flash-плееры;
- Установить мобильный антивирус и проверить телефон на угрозы.
Итак, если вы столкнулись с тем, что USSD запросы не работают, и вы не можете узнать баланс, остатки трафика, отключить подписки и выполнить десятки других полезных действий, попробуйте один из тех вариантов, которые мы описали в этой статье.
Важно! Проблема с ошибками при отправке USSD-команд может возникнуть и из-за изношенности сим-карты. Если у вас старая сим-карта, то можно бесплатно заменить ее в офисе своего оператора — платная замена только у оператора Билайн.
Выполнение запроса
Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).
Запрос — это набор инструкций, которые можно использовать для работы с данными. Для выполнения этих инструкций нужно выполнить запрос. В дополнение к возврату результатов, которые могут быть отсортированы, сгруппированы или отфильтрованы, запрос также может создавать, копировать, удалять и изменять данные.
В этой статье объясняется, как выполнять запросы и обеспечивается краткий обзор различных типов запросов. В этой статье также рассматриваются сообщения об ошибках, которые могут возникнуть при выполнении различных типов запросов, и инструкции по ее устранению или исправлению.
В этой статье не представлены пошаговые инструкции по созданию запросов.
Важно: Нельзя выполнять запросы на изменение, если база данных работает в отключенном режиме — в режиме ограниченной функциональности, который Access использует для защиты данных в определенных обстоятельствах. Вы можете увидеть предупреждение в диалоговом окне или предупреждение на панели сообщений.
Дополнительные сведения об отключенном режиме и о том, как включить запросы на изменение, можно найти в разделе выполнение запроса на изменение.
В этой статье
Выполнение запроса на выборку или перекрестный запрос
Запросы на выборку и перекрестный запрос используются для получения и представления данных, а для предоставления форм и отчетов с данными. При выполнении запроса на выборку или перекрестный запрос Access отображает результаты в Режим таблицы.
Выполнение запроса
Найдите запрос в области навигации.
Выполните одно из следующих действий.
Дважды щелкните запрос, который вы хотите выполнить.
Выберите запрос, который требуется выполнить, а затем нажмите клавишу ВВОД.
Если запрос, который вы хотите выполнить, открыт в Конструктор, вы также можете запустить его, нажав кнопку выполнить в группе результаты на вкладке конструктор ленты, части Пользовательский интерфейс Microsoft Office Fluent.
Выполнение запроса на изменение
Существует четыре типа запросов на изменение: запросы на добавление, удаление, запросы на обновление и запросы на создание таблицы. За исключением запросов на создание таблиц (которые создают новые таблицы), запросы на изменение изменяют данные в таблицах, на которых они основаны. Эти изменения нельзя легко отменить, например, нажав клавиши CTRL + Z. Если вы вносите изменения с помощью запроса на изменение, который позже решит, что вы не хотите делать, обычно потребуется восстановить данные из резервной копии. По этой причине перед выполнением запроса на изменение вы должны убедиться, что у вас есть свежая резервная копия базовых данных.
Вы можете уменьшить риск выполнения запроса на изменение, предварительно просмотрев данные, для которых будет выполняться операция. Это можно сделать двумя способами.
Просмотрите запрос на изменение в режиме таблицы, прежде чем запускать его. Для этого откройте запрос в конструкторе, нажмите кнопку Просмотр на Строка состояния Access, а затем в контекстном меню выберите пункт режим таблицы . Чтобы вернуться в режим конструктора, снова нажмите кнопку Просмотреть , а затем в контекстном меню выберите пункт режим конструктора .
Измените запрос на запрос на выборку и запустите его.
Примечание: Обратите внимание на то, что вы запускаете запрос на изменение (Добавление, обновление, создание таблицы или удаление), поэтому вы можете изменить запрос обратно на этот тип после предварительного просмотра данных с помощью этого метода.
Выполнение запроса на изменение в качестве запроса на выборку
Откройте запрос на изменение в режиме конструктора.
На вкладке конструктор в группе тип запроса нажмите кнопку выбрать.
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Выполнение запроса
Когда вы будете готовы выполнить запрос на изменение, дважды щелкните его в области навигации или щелкните его, а затем нажмите клавишу ВВОД.
Важно: По умолчанию Access отключает все запросы на изменение в базе данных, если не указано, что вы доверяете базе данных. Вы можете указать, что вы доверяете базе данных с помощью панели сообщений, под лентой.
Доверие базе данных
На панели сообщений нажмите Параметры.
Откроется диалоговое окно Параметры безопасности Microsoft Office.
Выберите Включить это содержимое, а затем кнопку ОК.
Выполнение запроса с параметрами
запрос с параметрами предложит вам ввести значение при запуске. При указании значения запрос с параметрами применяет его в качестве критерия поля. Поле, к которому применяется критерий, заданный в конструкторе запросов. Если при появлении запроса не указывается значение, запрос с параметрами интерпретирует введенные данные как пустую строку.
Запрос С параметрами всегда также является другим типом запроса. Большинство запросов с параметрами — запросы на выборку или перекрестный запрос, но запросы на добавление, создание таблицы и обновление также могут быть запросами с параметрами.
Вы запускаете запрос с параметрами в соответствии с другим типом запроса, но в общем случае используйте описанную ниже процедуру.
Выполнение запроса
Найдите запрос в области навигации.
Выполните одно из следующих действий.
Дважды щелкните запрос, который вы хотите выполнить.
Выберите запрос, который нужно выполнить, и нажмите клавишу ВВОД.
Когда появится запрос с параметрами, введите значение, которое будет использоваться в качестве условия.
Выполнение запроса, зависящего от SQL
Существует три основных типа SQL-запрос: запросы на объединение, передаваемые запросы и управляющие запросы данных.
Запросы на объединение объединяют данные из двух или нескольких таблиц, но не так же, как и другие запросы. В то время как большинство запросов объединяют данные, объединяя строки, запросы на объединение объединяют данные путем добавления строк. Запросы на объединение отличаются от запросов на добавление в запросах на объединение, но не изменяют базовые таблицы. Запросы на объединение добавляют в набор записей строки, которые не сохраняются после закрытия запроса.
ПереДаваемые запросы не обрабатываются ядром СУБД, которая поставляется вместе с Access; Вместо этого они передаются непосредственно на удаленный сервер базы данных, который производит обработку, а затем передает результаты обратно в Access.
Запросы определения данных — это особый тип запроса, который не обрабатывает данные; Вместо этого запросы определения данных создают, удаляют или изменяют другие объекты базы данных.
Запросы SQL нельзя открывать в режиме конструктора. Они могут быть открыты только в режиме SQL или запущены. За исключением запросов определения данных, выполнение запроса SQL откроет ее в режиме таблицы.
Выполнение запроса
Найдите запрос в области навигации.
Выполните одно из следующих действий.
Дважды щелкните запрос, который вы хотите выполнить.
Выберите запрос, который требуется выполнить, а затем нажмите клавишу ВВОД.
Устранение неполадок с сообщением об ошибке
В приведенной ниже таблице показаны некоторые распространенные сообщения об ошибках, которые могут возникнуть. Эти ошибки могут выводиться как сообщение в ячейке (вместо ожидаемого значения) или как сообщение об ошибке. Разделы, которые следуют за списком, включают процедуры, которые можно использовать для устранения этих ошибок.
Примечание: Это содержимое этой таблицы не является исчерпывающим. Если сообщение об ошибке не отображается, вы можете отправить отзыв, воспользовавшись формой в конце этой статьи и указанными сведениями о сообщении об ошибке в появившемся поле примечания.
Сообщение об ошибке
Несоответствие типов в выражении
Запрос может объединять поля с разными типами данных.
Проверьте структуру запроса и убедитесь, что объединенные поля имеют один и тот же тип данных. Инструкции можно найти в разделе Проверка Объединенных полей запроса.
Это может произойти, если либо объект, либо база данных повреждены.
Сжатие и восстановление базы данных. Инструкции можно найти в разделе Сжатие и восстановление базы данных.
Циклическая ссылка, связанная с псевдонимом
Псевдоним, присвоенный полю, совпадает с компонентом выражения для этого поля.
Псевдоним — это имя, которое задается для любого выражения в строке поля бланка запроса, которое не является фактическим полем. Если вы не хотите, чтобы вы ни навводили себя, Access выдает ему псевдоним. Например, Выражение1. За псевдонимом следует сразу двоеточие ( :), а затем выражение. При выполнении запроса псевдоним становится именем столбца в таблице.
Измените псевдоним. Инструкции можно найти в разделе Изменение псевдонима поля.
Эта ошибка может возникать, если значение вычисляемого поля больше значения, разрешенного значением свойства FieldSize поля. Это также происходит, если знаменатель вычисляемого поля равен нулю (0).
Убедитесь, что знаменатель вычисляемого поля не равен нулю (0). При необходимости измените свойство FieldSize .
Запись, на которую вы ссылались, была удалена.
Если запись была удалена случайно, ее необходимо восстановить из резервной копии. Если удаление было сделано умышленно, вы можете закрыть это сообщение об ошибке, нажав клавиши SHIFT + F9, чтобы обновить запрос.
Проверка Объединенных полей запроса
Для проверки типов данных полей в запросе вы можете просмотреть исходные таблицы в режиме конструктора и проверить свойства проверяемых полей.
Откройте запрос в режиме конструктора. Соединения выводятся в виде линий, соединяющих поля в исходных таблицах. Обратите внимание на имена таблиц и полей для каждого соединения.
В области навигации щелкните правой кнопкой мыши все таблицы, которые содержат одно или несколько полей, Объединенных в запрос, и выберите пункт конструктор.
1. Объединенные поля с разными типами данных.
2. Щелкните таблицу правой кнопкой мыши и выберите команду Конструктор.
Для каждого соединения Сравните значения в столбце тип данных в сетке конструктора таблиц для полей, участвующих в этом соединении.
1. Проверьте тип данных Объединенных полей в режиме конструктора таблицы.
Чтобы перейти к таблице и просмотреть ее поля, щелкните вкладку с именем этой таблицы.
Сжатие и восстановление базы данных
Выполнение служебной программы сжатия и восстановления базы данных в Access может повысить производительность базы данных. Эта служебная программа создает копию файла базы данных и, если она фрагментирована, перемещает файл базы данных на диск. После завершения процесса сжатия и восстановления сжатая база данных освобождает неиспользуемое пространство и обычно меньше исходного. Регулярное сжатие базы данных позволяет обеспечить оптимальную производительность приложения базы данных, а также устранять ошибки, возникающие в результате проблем с оборудованием, сбоев питания или скачков и других причин.
После завершения операции сжатия скорость запроса улучшена, так как базовые данные переписаны в таблицы на смежных страницах. Поиск непрерывных страниц выполняется намного быстрее, чем сканирование фрагментированных страниц. Кроме того, запросы оптимизируются после каждого сжатия базы данных.
При выполнении операции сжатия вы можете использовать исходное имя сжатого файла базы данных или использовать другое имя для создания отдельного файла. Если вы используете одно и то же имя и база данных сжимается успешно, Access автоматически заменяет исходный файл компактной версией.
Установка параметра, который автоматизирует этот процесс
На вкладке Файл выберите пункт Параметры, чтобы открыть диалоговое окно Параметры Access.
Выберите пункт Текущая база данных , а затем в разделе Параметры приложенийустановите флажок Сжимать при закрытии .
Это приведет к тому, что Access автоматически сжимает и восстанавливает базу данных при каждом ее закрытии.
Сжатие и восстановление базы данных вручную
Выберите Работа с базами данных _гт_ Сжать и восстановить базу данных.
Изменение псевдонима поля
Откройте запрос в режиме конструктора.
В бланке запроса найдите поля с псевдонимами. В конце имени поля появятся двоеточие, например Имя:.
Убедитесь, что псевдоним не совпадает с именем поля, которое является частью выражения Alias. Если это так, измените псевдоним.