powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Составление выражений WHERE для SQL запросов
17 сообщений из 17, страница 1 из 1
Составление выражений WHERE для SQL запросов
    #32915121
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо разработать некоторый API, который был бы удобен и интуитивно понятен программистам для составления выражений WHERE в SQL запросах.
Например есть какой-то объект (таблица в БД), которая отображается в гриде, хотелось бы ее фильтровать по каким-то условиям. Предположим, что форма для фильтрации содержит нужные контролы, подставляя значения в которые, мы добавляем в выражение WHERE ограничения.
В принципе, это частный случай разбора математических выражений, но прежде чем разобрать это математическое выражение, необходимо ее еще записать на этом API.
Например каким-то образом надо отфильтровать объект по выражению:
Код: plaintext
1.
(((expr1 and expr2) or expr3) and (expr4 or expr5 or expr6)). 
где exprN - это что то типа:
Код: plaintext
1.
 field = value 
Как записать выражения такого рода на API и сделать этот API интуитивно понятным.
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32920336
Eyeless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! В принципе, подобный API я писал, и еще писал GUI к нему. Если интересно, пишите сюда
-----------------------------------------------------------
Sorry for my terrible English, my native language is C++
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32920612
Фотография B0rG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем вам T-SQL то не нравится? Нормально там все выражается...

Варианта тут только два - либо хочется переписать SQL, либо хочется запретить программерам писать inline sql...


Cheers
Pete
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32923004
Eyeless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
T-SQL нравится всем и полностью. Но честно скажу, с таким API работать удобнее.
-----------------------------------------------------------
Sorry for my terrible English, my native language is C++
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32923870
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, согласен, с API работать удобнее...Особенно тем программерам которые плохо разбираются с SQL. Все что им нужно знать так это какие контролы на какие поля должны влиять (т.е фильтровать). Еще один важный момент так это если на форме которая предназначена для фильтра расположено куча контролов и каждый фильтрует какое-то поле, так вот если мы один контрол дизейблим, так надо же учитывать и оператор который перед ним стоял (OR, AND...) и что перед оператором...В общем лазить по бинарному дереву построенного выражения WHERE и убирать лишние скобки. А если разработать API то и задумываться над этим приходится меньше и ошибок в коде меньше тем более что если фильтры строятся динамически...
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32923924
Фотография B0rG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архитектурой попахивает...

Все попытки переложить формирование сиквела в API на функциональных языках программирования заканчивались плохо... Из тех, что я видел и сам когда-то писал, конечно :)

А с другой стороны не могу не согласиться с тем, что некоторым людям противопоказано писать сиквел...


Cheers
Pete
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32923952
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMO такой API оправдан в случае необходимости портирования или обеспечения работы системы с разными СУБД.
В иных случаях затраты на проектирование и написание не оправдывают результат.
Что же касается "универсального динамического фильтра", то тут ситуация такая же. Зачастую (я не хочу обобщать) гораздо проще узнать у пользователей что и по каким критериям они хотят фильтровать именно в этом режиме.
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32924312
Blackmore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри тут - может, то что надо?
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32924592
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писал я как-то CRM систему. И вот когда дошло дело до системы поиска, я загорелся желанием сделать универсальный построитель запросов. Промучился 2 месяца и сделал.
Вот в таком виде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
- Фирма
  - И
     -  Наименование = 'А%'
     -  Менеджер
         - ИЛИ
            - Наименование = 'Б%'
            - Наименование = 'Рога и копыта'
     -  Папка
        - И
           - Наименование = 'личная'

Для визуального построения использовался контрол - дерево. На основании метаданных каждый класс предоставлял список своих атрибутов. Все замечательно и красиво, можно построить какой угодно запрос. Но пользователям это не понравилось. Слишком сложно. Гораздо проще построить 2 десятка запросов с определенными параметрами. После чего я так и сделал. Все довольны. Когда пользователи хотят получить еще один отчет, я пишу хранимую процедуру и все. Во-первых на T-SQL я могу построить запрос намного изощреннее, а во-вторых такой изощренный запрос пользователи не смогут построить даже с помощью такого универсального построителя запросов.
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32924819
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне не для пользователей необходим постороитель запросов а для программистов и вопрос о том сложно или легко ложится на класс - построитель, а освоение предоставленного API - дело техники.
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32924978
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Old Nick...И вот когда дошло дело до системы поиска, я загорелся желанием сделать универсальный построитель запросов...насколько же одинаковые задачи приходится решать :) Для визуального построения использовался контрол - дерево. На основании метаданных каждый класс предоставлял список своих атрибутов. Все замечательно и красиво, можно построить какой угодно запрос. и решения. для хранения использовался XML ...Но пользователям это не понравилось. Слишком сложновот здесь начинаются вариации. у меня была "библиотека" для построенных таким образом запрсов, которая пополнялась наиболее "продвинутыми" пользователями (или нами - разработчиками), и которая была доступна для всех остальных пользователей. причем перед выполнением этих запросов нужно было заполнить значениями уже линейный список атрибутов (в запросе их значения помечались "?").

FedishenМне не для пользователей необходим постороитель запросов а для программистова вот это - нонсенс.
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32925708
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще разок повторюсь: необходим не визуальный построитель запросов а код - построитель запросов, т.е API с помощью которого можно будет разрулить WHERE - выражения.
Пример:

У меня есть на форме например 5 контролов, например EditBox. Каждый из контролов фильтрует свое поле в таблице.

Надо создать какую-то коллекцию, добавить туда все эти контролы таким образом что бы получилось что то вроде

(((editBox1 = поле1 AND editBox2 = поле2 and editBox3 = поле3) OR editBox4 = поле4) AND editBox5 = поле5)

Например с первой группой скобок проблем не возникает, можно тупо сделать:

Collection.Add(условие1);

Collection.Add(условие2);

Collection.Add(условие3), где условиеN – это (editBox = поле) и предполагая что если мы вызываем метод Add то условия объединяются по AND. А дальше ведь всю коллекцию надо объединить в скобки и добавить еще одно условие но уже по OR и т.п. А еще мы можем дизейблить контролы, тогда они не учавствуют в условии.
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32927019
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри в сторону компонент ODAC и SDAC, они позволяют делать такое.
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32927034
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя такое написать самому можно за пару часов.

Описываешь абстрактный класс, с абстрактным методом, который возвращает выражение. Затем описываешь наследники:
1. Класс - Сравнение возвращает выражение типа поле = значение.
2. Класс - коллекция выражений, имеет параметр AND или OR и принимает в качестве элемента коллекции абстракнтый класс.

В таком случае можно построить выражение иерархически неограниченной сложности.

--------------------
Не учи отца и баста!
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32927045
Один1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно как соотносится
Old NickХотя такое написать самому можно за пару часов.и
Old NickПромучился 2 месяца и сделал. :)

2 Fedishen
Не делайте того, что вы хотите сделать. Оно просто себя не оправдывает.
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32929215
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем то я сделал, так что кому интересно могу поделитьс идеей.
Никогда не надо говорить фразы типа "не далай", "не оправдывает" и т.п.
Для одних - это действительно не оправданно, потому как круг задач ими решаемый несколько отличается от круга задач, решаемых тем человеком для которого это как раз таки оправданно.
На самом деле что писал OldNick в последнем посте - похоже на то, что я в конце концов реализовал.
...
Рейтинг: 0 / 0
Составление выражений WHERE для SQL запросов
    #32929281
Один1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FedishenНикогда не надо говорить фразы типа "не далай", "не оправдывает" и т.п.
Для одних - это действительно не оправданно, потому как круг задач ими решаемый несколько отличается от круга задач, решаемых тем человеком для которого это как раз таки оправданно. Понимаете, я не просто так написал "не оправдывает". По моему мнению есть _крайне_ ограниченый круг приложений где создание такого инструментария необходимо.
А именно, очень крупные системы, которые могут работать с различными СУБД. Об этом в топике уже говорилось. Здесь важны обе составляющие:
а) система должна быть достаточно крупной и сложной, чтобы ручная адаптация запросов к разным СУБД была сильно затруднена.
б) вообще требуется поддержка разных СУБД.
В иных случаях универсальный построитель запросов для программистов (!) не нужен, плох. Несмотря на то, что идея поначалу кажется красивой. Я работал с такими API, сам принимал участие в их разработке. В итоге они превращаются в монструзный мало понятный код, т.к. постоянно появляются задачи, решение которых в рамках API невозможно и поэтому API требуют доработки.

Конечно такой API возможен в неких универсальных framework-ах - построителях всего и вся, но это уже совсем иной разговор.

Fedishen, если не сложно, расскажите чуть подробнее зачем вам нужен такой инструмент. Просто интересно. Но только аргументируя не так , а как-то серьезнее что-ли.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Составление выражений WHERE для SQL запросов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]