Вниз
Скачать: CL | DM;

Конструктор запросов   Найти похожие ветки 

 
msguns ©   (2004-11-11 17:37) [0]

Приходится частенько сталкиваться с необходимостью модификации уже готовых запросов в ран-тайме. Например при кодировании поисков, сортировок и т.д. в отображаемых датасетах. К сожалению, в используемых классах (потомки TDataSet) нет никаких средств для облегчения (типа коллекций ключей WHERE или ORDER BY) доступа к "телу" запроса и приходится его (запрос) тупо парсировать на предмет коррекции предикатов. А есть еще параметры, которые при модификации св-ва SQL сбрасываются и их надо по-новой выставлять из предварительно сохраненных и т.д.
В общем, идея, думаю, понятна.

Предлагаю поделиться опытом в этой области.


 
}|{yk ©   (2004-11-11 17:48) [1]

Ну я сам текст первичного запроса кидаю в блоб-поле, а потом по ситуации.


 
msguns ©   (2004-11-11 18:03) [2]

>}|{yk ©   (11.11.04 17:48) [1]

А зачем блоб-то ? У тебя что, запросы-небоскребы, в простой стринг (32К) не влазят ? Или парадокс/dbf ?


 
}|{yk ©   (2004-11-11 18:06) [3]

Ну бывает ми просто стринг.


 
Vlad ©   (2004-11-11 18:11) [4]


> msguns ©   (11.11.04 17:37)  

была недавно похожая задача, правда подразумевалось что запрос у меня простой, т.е. без вложенных select"ов
Не знаю лучший способ я выбрал или нет, но сделал класс, в котором были свойства:
SelectText, WhereText, OrderByText, GroupByText, а так же свойство типа TList - набор параметров (я использовал только параметризированные запросы). Каждый параметр - record, содержащий поля: имя, тип, значение, метод сравнения (<,>,=, <>, in,between, etc). Значение параметра задал как Variant, для того чтобы можно было использовать как одно значение, так и несколько (VarArray) на случай конструкций where field in (...)
Ну и соотв. методы AddParam, DelParam, CreateSql, вобщем в таком духе..
Может способ и не лучший, но во всяком случае избавляет от необходимости парсинга запроса.


 
Ega23 ©   (2004-11-11 18:14) [5]

Насколько я понял, проблема в фильтрации и сортировки набора данных? Или что?


 
by ©   (2004-11-11 18:22) [6]

Я делал подобное как Vlad, но только без класса.
Есть переменные типа sSelect, sFrom, sWhere, sOrderBy и перед открытием запроса срабатывает процедура makeSQL, которая и собирает текст запроса при каждом его открытии.


 
msguns ©   (2004-11-11 18:40) [7]

>Vlad ©   (11.11.04 18:11) [4]
>by ©   (11.11.04 18:22) [6]

Да-да, что-то типа этого и я делаю, НО...
Трабла в том, что при разработке хочется вставлять готовые работающие запросы (я их делаю в IBExpert`e, хоть кому-то и кажется это недостойным джидая) со всевозможными where и order by (и не только). Т.е. в момент опена формы у меня уже есть готовый сиквель. Для того, чтобы пользоваться упомянутой методикой, получается, надо все запросы изначально готовить в виде объектов классов, т.е. заполнять программно. Что, ИМХО, совсем не есть хорошо, т.к. пропадает всякая наглядность кода.
Пихать всю выборку на сервер в виде ХП и вьюнов тоже не желательно, т.к. мне же потом с этой базой дружить, а если там на 12 таблов будет 100 вьюшек и 120 хапуг, то как мне потом разруливать всем этим хозяйством случись быть апдэйте структурам.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.023 c
3-1100253492
Сергей Бастрыгин
2004-11-12 12:58
2004.12.12
Чтение неподтвержденных данных


14-1101305407
Klerk
2004-11-24 17:10
2004.12.12
Сертификаты


14-1101322505
Style
2004-11-24 21:55
2004.12.12
Пользователи БиЛайна, зацените идею.


1-1101447353
Рафик
2004-11-26 08:35
2004.12.12
Вопрос по TreeView


6-1087306299
Григорьев Антон
2004-06-15 17:31
2004.12.12
Прошу оценить статью про сокеты




   Наверх