Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Составление выражений WHERE для SQL запросов / 17 сообщений из 17, страница 1 из 1
14.02.2005, 19:07
    #32915121
Fedishen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление выражений WHERE для SQL запросов
Необходимо разработать некоторый 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
17.02.2005, 11:18
    #32920336
Eyeless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление выражений WHERE для SQL запросов
Добрый день! В принципе, подобный API я писал, и еще писал GUI к нему. Если интересно, пишите сюда
-----------------------------------------------------------
Sorry for my terrible English, my native language is C++
...
Рейтинг: 0 / 0
17.02.2005, 12:39
    #32920612
B0rG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление выражений WHERE для SQL запросов
А чем вам T-SQL то не нравится? Нормально там все выражается...

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


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

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

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


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

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

FedishenМне не для пользователей необходим постороитель запросов а для программистова вот это - нонсенс.
...
Рейтинг: 0 / 0
21.02.2005, 11:45
    #32925708
Fedishen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление выражений WHERE для SQL запросов
Еще разок повторюсь: необходим не визуальный построитель запросов а код - построитель запросов, т.е 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
21.02.2005, 18:39
    #32927019
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление выражений WHERE для SQL запросов
Посмотри в сторону компонент ODAC и SDAC, они позволяют делать такое.
...
Рейтинг: 0 / 0
21.02.2005, 18:43
    #32927034
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление выражений WHERE для SQL запросов
Хотя такое написать самому можно за пару часов.

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

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

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

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

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

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


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