Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.03;
Скачать: CL | DM;

Вниз

Как лучше организовать структуру хранения 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
1-6982
demon ltd
2002-05-23 01:23
2002.06.03
полное имя даты


4-7264
Porton
2002-04-01 16:17
2002.06.03
Изменение размеров рабочего стола


3-6910
icu
2002-05-10 18:47
2002.06.03
D-SQL


1-7014
Zak
2002-05-23 13:01
2002.06.03
Путь к папке WINDOWS!


1-7072
RDA
2002-05-21 20:15
2002.06.03
Оператор выбора Case