-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


SQL-запрос для формы поиска и обработка логических операторов

Понедельник, 11 Февраля 2019 г. 08:15 + в цитатник
автор
Ганов Александр (перенесено отсюда)
как вариант использовать "+", который превратит отсутствующий параметр в "нулевую строку", в том случае если какой-то параметр запроса не был использован пользователем
разобрался с "+".


все ОК. можно хоть "стопицот" условий сделать. одного пока не пойму как сделать:

strSQL = "SELECT *" _
          & "FROM [Работы] " _
          & "WHERE " & "([Название] like '*" + [fldНазвание].Value + "*') AND " _
                              & "([ДатаЗапуска] >=" + IIf(IsNull([fldДатаЗапускаНачало].Value) = False, Format([fldДатаЗапускаНачало].Value, "General Number"), Null) & ") AND " _
                              & "([ДатаЗапуска] <=" + IIf(IsNull([fldДатаЗапускаКонец].Value) = False, Format([fldДатаЗапускаКонец].Value, "General Number"), Null) & ") AND " _
                              & "([ДатаСоздания] >=" + IIf(IsNull([fldДатаБазаНачало].Value) = False, Format([fldДатаБазаНачало].Value, "General Number"), Null) & ") AND " _
                              & "([ДатаСоздания] <=" + IIf(IsNull([fldДатаБазаКонец].Value) = False, Format([fldДатаБазаКонец].Value, "General Number"), Null) & ") AND"

Не могу понять одно как справиться с AND. если их внести под скобку в начале каждой строки начиная со второй строки Where, то если нет строки условия, то и AND не будет, но тогда если нет первого условия Where ([Название]), то строка Where начнется сразу с AND, что вызовет ошибку. В таком моем варианте все работает, но при отсутствии каждого условия остается AND, я их убрал после формирования строки циклом, но понимаю, что это корявое решение.
'обрезаем AND в конце строки
For i = 1 To 5
     If Right(strSQL, 4) = " AND" Then strSQL = Left(strSQL, Len(strSQL) - 4)
     If Right(strSQL, 5) = " AND " Then strSQL = Left(strSQL, Len(strSQL) - 5)
     If Right(strSQL, 6) = " AND )" Then strSQL = Left(strSQL, Len(strSQL) - 6)
Next i


Может быть у кого-то есть пример "правильной" реализации таких запросов. Заранее благодарствую

https://www.sql.ru/forum/1308920/sql-zapros-dlya-formy-poiska-i-obrabotka-logicheskih-operatorov


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку