Форум: "Основная";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];
ВнизКак лучше организовать структуру хранения WHERE? Найти похожие ветки
← →
Aleksandr (2002-05-21 15:15) [0]Стряпаю я компоненту, которая, будучи привязанной к TabSet, хранит набор запросов (динамически меняемых) к TQuery, начиная со списков полей, их названий, ширин, видимости и кончая условиями. Только вот никак не могу сообразить, как организаовать класс для хранения Where. Если бы условия были просты, типа ID=10 OR Name="AAA", тут все понятно, тут и строкой хватило бы, даже учитывая, что эту строку потом надо на диалоги разбивать... Но условия, сами понимаете, могут быть и вложенными, типа ID=10 AND Type=24 OR (ID=20 AND Name LIKE "AAA%"). Напрашивается вариант такого класса:
TFilterValue=class
FieldName : string;
FieldValues : TList; ...
end;
TFilter = class
Values : TFieldValuesList; //List of TFieldValue
CompareTypes : TCompareTypesList; //List of "OR", "AND"
Filters : TFilter; ...
end;
в смысле, список фильтров может содержать как единичное значение, так и список фильтров, но вот только выглядит как-то все это топорно... Может, можно чего попроще (то есть поумнее) организовать?
← →
Внук (2002-05-21 15:49) [1]Могу предложить такую идею (правда, в более широкой постановке): когда нам понадобилось динамически управлять запросами, писать собственный лексический анализатор было, мягко говоря, неразумно. Поэтому пошли более эффективным,как мне кажется, путем: на основе диаграммы Вирта SQL-запроса типа SELECT, специфической именно для данного типа БД, был создан компонент, а, проще говоря, список структур и коллекций, реализующий эту диаграмму. В Вашем случае достаточно использовать часть этой диаграммы от слова WHERE и дальше, учитывая специфику используемой СУБД.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c