Форум: "Базы";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизКонструктор запросов Найти похожие ветки
← →
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 вся ветка
Форум: "Базы";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c