Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
ВнизМножество в качестве параметра для функции Найти похожие ветки
← →
kyn66 © (2006-10-17 11:27) [0]Возможно-ли применить САБЖ? В тексте программы у меня следующее:
...
Var
PerSet : set of 1..12;
Хочу написать функцию с SQL-запросом, чтобы в условиях присутствовало множество, типа во так:
...
SQL.Add("select sum(Field1) from Tab1 where Field2 In PerSet);
← →
Сергей М. © (2006-10-17 11:30) [1]Возможно.
> Хочу написать
Напиши.
Что-то мешает ?
← →
kyn66 © (2006-10-17 11:32) [2]Мешают умники. А проблема в том, как вставить множество в качестве параметра.
← →
Сергей М. © (2006-10-17 11:34) [3]
> kyn66 © (17.10.06 11:32) [2]
Не хами.
> проблема в том, как вставить множество в качестве параметра
Не вижу никакой проблемы.
type
TMySet = такое-то множество;
..
function MyFunc(MySet: TMySet): SomeType;
begin
...
end;
← →
ЮЮ © (2006-10-17 11:40) [4]Хочу написать функцию с SQL-запросом
...
SQL.Add("select sum(Field1) from Tab1 where Field2 In :PerSet");
как вставить множество в качестве параметра.
Никак.
Откуда взялось эт множество? Если из другого запроса, то так и пиши
select sum(Field1) from Tab1 where Field2 In (SELECT Field2 FROM ...)
← →
kyn66 © (2006-10-17 12:03) [5]>> Сергей М.
Множество у меня уже конкретно объявлено, см. вопрос. Я говорю, что SQL-запрос будет внутри функции и ему в качестве критерия отбора нужно будет подать это множество PerSet
← →
kyn66 © (2006-10-17 12:06) [6]>> ЮЮ
Множество формируется ешшо до выполнения функции:
...
for i := 1 to E.MesE do
if DM1.PeriodTbl.Locate("R_ID;Mes;God", VarArrayOf([rid, i, E.GodE]), []) then
if not (DM1.PeriodTblID.Value in PerSet) then
Include(PerSet, DM1.PeriodTblID.Value);
...
← →
Сергей М. © (2006-10-17 12:09) [7]
> kyn66 © (17.10.06 12:03) [5]
> ему в качестве критерия отбора нужно будет подать это множество
> PerSet
Но вопрос-то твой изначальный звучал совершенно иначе) ...
Так что не обижайся, что в "Начинающие" ты угодил.
для каждого числа из диапазона 1..12
если число принадлежит переданному параметром-мн-ву то
добавить через запятую строковое представление этого числа в правую часть IN-выражения динамически формируемого тобой текста SQL-запроса
← →
Palladin © (2006-10-17 12:11) [8]var
s:String;
m:set of 1..12;
i:byte;
s:="(";
For i:=1 to 12 Do If i in m then s:=s+IntToStr(i)+",";
if s<>"(" then s[Length(s)]:=")";
SQL.Add("select sum(Field1) from Tab1 where Field2 In "+s);
← →
Сергей М. © (2006-10-17 12:14) [9]
> Palladin © (17.10.06 12:11) [8]
Что называется - разжевал и в рот положил ?)
Разврат, батенька, разврат) ...
← →
kyn66 © (2006-10-17 12:19) [10]Что разжевал, то да, но конкретного ответа не поступило 8-(. Я использовал вместо множества значение CommaText переменной типа TStringList. Все проходит нормально. Но хотелось понять, можно-ли также поступить с множеством. Просто не понятно к какому типу его прикрутить и как вставить в SQL-запрос. Вот
← →
Palladin © (2006-10-17 12:20) [11]
> Сергей М. © (17.10.06 12:14) [9]
как видишь из [10] у него огромные проблеммы с поглощением разжеванного :)
← →
ЮЮ © (2006-10-17 12:23) [12]Что-то сомнительно, что DM1.PeriodTblID.Value находится в диапазоне 1..12.
Скорее всего речь идет о массиве длиной от 1 до 12, а вовсе не множестве в терминах Delphi
← →
ЮЮ © (2006-10-17 12:27) [13]В SQL запрос можно вставить только динамически, как ты и делал:
" ... IN (" + <текстовое представление списка> +")"
CommaText типа TStringList - самое то, особенно когда лень написать несколько строк типа [8]
← →
Сергей М. © (2006-10-17 12:29) [14]
> конкретного ответа не поступило
Здрасть-приехали !
В [8] он, конкретней уж некуда)
А твое решение со StringList.CommaText - это фактически тоже самое, только вид сбоку.
> Palladin © (17.10.06 12:20) [11]
"Эт точно" (С) Ф.Сухов
← →
kyn66 © (2006-10-17 16:29) [15]Множество сперва хотел использовать для удобной проверки наличия или нет некоторого числа без повторения, а все остальное нормально с CommaText получается. Как грицца, век живи - век учись. Тем не менее всем огромное спасибо за дебаты.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c