Вот в таком запросе при выполнении вываливается ошибка, что запрос слишком сложный попробуйте упростить.
ВЫБРАТЬ
ЗначенияСвойствОбъектов.Объект КАК Объект,
ЗначенияСвойствОбъектов.Свойство КАК Свойство,
ВЫБОР
КОГДА ЗначенияСвойствОбъектов.Значение.Код = 211
ИЛИ ЗначенияСвойствОбъектов.Значение.Код = 212
ТОГДА «Ликероводочные изделия в т.ч.:»
ИНАЧЕ ВЫБОР
КОГДА ЗначенияСвойствОбъектов.Значение.Код = 250
ИЛИ ЗначенияСвойствОбъектов.Значение.Код = 251
ТОГДА «Напитки винные в т.ч.:»
ИНАЧЕ ВЫБОР
КОГДА ЗначенияСвойствОбъектов.Значение.Код = 400
ИЛИ ЗначенияСвойствОбъектов.Значение.Код = 410
ТОГДА «Вина в т.ч.:»
ИНАЧЕ ЗначенияСвойствОбъектов.Значение
КОНЕЦ
КОНЕЦ
КОНЕЦ КАК Значение1,
ЗначенияСвойствОбъектов.Значение КАК Значение
ИЗ
РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
ЗначенияСвойствОбъектов.Свойство = &КОДПр
Причем если выкинуть хоть какое-нибудь условие (одно) то все работает.
Я использую Access для поиска в базе данных по нескольким (около 18) критериям. Все эти критерии необходимо объединить, чтобы получить правильные результаты. Поисковый запрос оценивается как слишком сложный.
В запросе я использую заполненные поля поиска (временные переменные), чтобы найти контакты, соответствующие всем полям поиска.
Этот запрос выглядит следующим образом:
SELECT
Contacts.ID,
Contacts.[Naam Contact],
Contacts.Adresgegevens,
Nz([Contacts]![Type Opleiding]) AS [Type opleiding],
Contacts.OplGetal,
Contacts.DataCV,
Nz([Contacts]![Datum Sollicitatie],
DateSerial(1901,1,1)) AS [Datum Sollicitatie],
Contacts.LaatstGewijzigd,
Contacts.Voornaam,
Contacts.Achternaam,
Contacts.Medewerker,
Contacts.Zoektermen,
Contacts.Woonplaats,
Contacts.Geboortejaar,
Contacts.[A],
Contacts.[B],
Contacts.[C],
Contacts.D,
Contacts.E,
Contacts.Overig,
Year(Now())-[Geboortejaar]-1 & "/" & Year(Now())-[Geboortejaar] AS Leeftijd,
Contacts.BinnengekomenBij,
Contacts.Categorie,
Contacts.BinnenBuiten
FROM
Contacts
WHERE
Contacts.[Naam Contact] Like "*" & TempVars!tmpNaam & "*"
And Contacts.Adresgegevens Like "*" & TempVars!tmpAdres & "*"
And Nz(Contacts![Type Opleiding]) Like "*" & TempVars!tmpOpleiding & "*"
And Contacts.OplGetal > TempVars!tmpHGO-1
And Nz(Contacts![Datum Sollicitatie],DateSerial(1901,1,1)) > DateValue(TempVars!tmpDatumSol)
And ( TempVars!tmpBiBu = Contacts.BinnenBuiten
Or TempVars!tmpBiBu = "Maakt niet uit" )
And (TempVars!tmpOP=No Or Contacts.[A]=Yes)
And (TempVars!tmpSP=No Or Contacts.[B]=Yes)
And (TempVars!tmpSS=No Or Contacts.[C]=Yes)
And (TempVars!tmpINS=No Or Contacts.D=Yes)
And (TempVars!tmpE=No Or Contacts.E=Yes)
And (TempVars!tmpOverig=No Or Contacts.Overig=Yes)
And (TempVars!tmpMed=No Or Contacts.Medewerker=Yes)
And (Nz(Contacts.BinnengekomenBij) Like "*" & TempVars!tmpBin & "*"
And (TempVars!tmpCat=Contacts.Categorie Or TempVars!tmpCat="Beide")
Как сделать этот запрос более умным и менее сложным?
Заранее спасибо!
2 ответа
Лучший ответ
Я исправил свою проблему! Сложность возникла из-за всех проверенных мной флажков, например:
(TempVars!tmpE=No Or Contacts.E=Yes)
Из-за комбинации всех этих флажков запрос, наконец, выглядел примерно так: http://www.blueclaw-db.com/accessquerysql/complex_query.gif
Решение заключалось в том, чтобы поместить все в VBA-код и динамически построить запрос. Теперь флажок включается в запрос (добавляется к запросу), только если он установлен. Фрагмент кода относительно флажка E:
If Me.checkboxE = True Then
strSQL = strSQL + "And Contacts.E=Yes "
End If
Это устранило сложность запроса, и теперь все работает гладко!
0
Asjen van den Berg
16 Дек 2014 в 13:40
Я использовал способ решения подобных ошибок: сначала помещал большинство выбранных полей в комментарии, в том числе внутри предложения WHERE, затем одно за другим я добавлял одно и выполнял запрос. В конце концов вы дойдете до того, что вызывает сложный результат. Если мне не изменяет память, думаю, это из-за функции Nz.
0
Ray
13 Дек 2014 в 19:10
Обновлено: 30.01.2023
У меня есть восемь таблиц, которые содержат информацию об изменениях, вносимых в приложения по всей компании. Я только хочу запросить и объединить строки для подмножества более 200 приложений. Для этого я запрашиваю каждую таблицу по коду приложения (AAA, BBB и т. Д.) И хочу объединить результаты. Когда я использую более 5 кодов приложения, я получаю ошибку «Запрос к комплексу».
Я знаю, что есть более эффективный способ сделать это, но нижеприведенное — лучшее, что я смог сделать с моими ограниченными знаниями.
Я хотел бы иметь возможность запрашивать все 200+ кодов приложений одновременно и более эффективно, чем вводить одну и ту же строку 8 раз для каждого кода.
3 ответа
Более простой подход мог бы заключаться в том, что union данные таблицы перед применяют критерии выбора, поэтому вам нужно указывать критерии только в одном месте, например:
Если вы не используете подстановочные операторы в рамках критериев для like , вы можете альтернативно использовать in и предоставить список кодов приложений:
Кроме того, вы можете создать таблицу, содержащую все коды приложений, которые вы хотите вернуть (в следующем примере я назвал такую таблицу ApplicationCodes , содержащую одно поле с именем Code ), а затем использовать простое объединение для неявного применения фильтрации, например:
Я бы порекомендовал вам создать таблицу, в которой есть все приложения, тогда вы могли бы сделать всего 8 запросов
Если вам это не нравится, вы можете попробовать предложение IN
Имена таблиц, которые содержат даты или порядковые номера и одни и те же поля, обычно должны сочетаться с именем таблицы в качестве дополнительного свойства.
Создайте таблицу (например, ApplicationChanges) с полями объединенных таблиц и добавьте дополнительное поле ChangedAt , которое будет содержать старое имя таблицы. Возможно, старые таблицы содержат поле даты, которое показывает дату ChangedAt, тогда вы можете опустить имя таблицы и запрос, какие даты принадлежат этой таблице.
Затем используйте запрос @LeeMacs для заполнения новой таблицы:
Если вам нужна старая структура данных, создайте запросы для каждой предыдущей таблицы с критерием ChangedAt. Например. Таблица [2019-07-A July 5 to 7]


Алексей Чужов
Возьмите др клиентов,вычтите из этих дат сутки.Затем можно например передать в переменные ДеньВчерРожд=день(ДатаРождМинусОдин);
МесяцВчерРожд=месяц(датаРождМинусОдин);
У вас получиться номер месяца вчерашнего дня рождения и дюномер дня вчерашнего др.А затем сравните их с номером дня и номером месяца текущей даты.Вообщем если не понятно или еще не сделали пишите,не мложно это.Единственный шаткий момент это високосные года.

Где именно хотите получить — в запросе, в СКД, в отчете?
Вообще, чем не устраивает задать дату рождения между:
конечная дата -конец дня текущей даты,
начальная дата — начало дня текущей даты — 24 часа.
В отбор попадут нужные клиенты.
Или у вас дата разбита — отдельно день, отдельно месяц, отдельно год?

Юрий, СКД. Дата разбита: отдельно День, Месяц. И когда задала Дату рождения Между (ДеньГода) — получила. что-то непонятное.

Вот как—то так: ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), ГОД, 1984 — 1), МЕСЯЦ, 12 — 1), ДЕНЬ, 31 — 1) КАК Поле1 . Только вместо цифр года, месяца и дня подставить свои данные из запроса. Суть, берем дату 01.01.0001 и прибавляем день месяц и год. Если год не нужен, его можно опустить. Ну, тем более, имея уже собранную дату, вроде бы не сложно придумать нужное сравнение.

Дмитрий Сметанин запись закреплена
Необходимо создать обработку позволяющую загрузить содержимое файла Excel (в ячейках примитивные типы: строка, число) с любым количеством колонок и строк в таблицу значений на форму обработки.
Таблицу значений на форме нужно создавать программно.
В первой строке файла будут содержатся названия колонок, названия колонок в таблице на форме должны им соответствовать.
Пустые ячейки в таблице на форме нужно выделить красным цветом.

Здарова. Я сам когда-то только начинал работать с 1С. И тоже начинал с экселя. Я бы помог, но времени совсем щас нет. У меня осталась обработка на которой я тренировался. Там и загрузка написана и выгрузка. Может поможет.
Читайте также:
- Как связаны объекты конфигурации и объекты базы данных 1с
- Программа в топе как работает
- Как прошить asus zc500tg
- Как выйти в интернет без браузера на андроид
- Как в фотошопе сделать 3д обложку