Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.038 c
1-1101810588
aleksey
2004-11-30 13:29
2004.12.12
Как печатать текст в ячейках StringGrid заглавными буквами ?


4-1098878539
Jay
2004-10-27 16:02
2004.12.12
Закрыть окно


14-1100725032
GanibalLector
2004-11-17 23:57
2004.12.12
1C


1-1100789422
TankMan
2004-11-18 17:50
2004.12.12
Написание обработчика исключительных ситуаций...


3-1100013338
Sergeich
2004-11-09 18:15
2004.12.12
параметры в ADOQuery





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский