![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Множество в качестве параметра для функции [D7, WinXP]
kyn66 © (2006-10-17 11:27:00)Возможно-ли применить САБЖ? В тексте программы у меня следующее:
...
Var
PerSet : set of 1..12;
Хочу написать функцию с SQL-запросом, чтобы в условиях присутствовало множество, типа во так:
...
SQL.Add('select sum(Field1) from Tab1 where Field2 In PerSet);
kyn66 (2006-10-17 16:29:00) [1]Множество сперва хотел использовать для удобной проверки наличия или нет некоторого числа без повторения, а все остальное нормально с CommaText получается. Как грицца, век живи - век учись. Тем не менее всем огромное спасибо за дебаты.
Сергей М. (2006-10-17 12:29:00) [2]
> конкретного ответа не поступило
Здрасть-приехали !
В [8] он, конкретней уж некуда)
А твое решение со StringList.CommaText - это фактически тоже самое, только вид сбоку.
> Palladin © (17.10.06 12:20) [11]
"Эт точно" (С) Ф.Сухов
ЮЮ (2006-10-17 12:27:00) [3]В SQL запрос можно вставить только динамически, как ты и делал:
' ... IN (' + <текстовое представление списка> +')'
CommaText типа TStringList - самое то, особенно когда лень написать несколько строк типа [8]
ЮЮ (2006-10-17 12:23:00) [4]Что-то сомнительно, что DM1.PeriodTblID.Value находится в диапазоне 1..12.
Скорее всего речь идет о массиве длиной от 1 до 12, а вовсе не множестве в терминах Delphi
Palladin (2006-10-17 12:20:00) [5]
> Сергей М. © (17.10.06 12:14) [9]
как видишь из [10] у него огромные проблеммы с поглощением разжеванного :)
kyn66 (2006-10-17 12:19:00) [6]Что разжевал, то да, но конкретного ответа не поступило 8-(. Я использовал вместо множества значение CommaTextпеременной типа TStringList. Все проходит нормально. Но хотелось понять, можно-ли также поступить с множеством. Просто не понятно к какому типу его прикрутить и как вставить в SQL-запрос. Вот
Сергей М. (2006-10-17 12:14:00) [7]
> Palladin © (17.10.06 12:11) [8]
Что называется - разжевал и в рот положил ?)
Разврат, батенька, разврат) ...
Palladin (2006-10-17 12:11:00) [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:09:00) [9]
> kyn66 © (17.10.06 12:03) [5]
> ему в качестве критерия отбора нужно будет подать это множество
> PerSet
Но вопрос-то твой изначальный звучал совершенноиначе) ...
Так что не обижайся, что в "Начинающие" ты угодил.
для каждого числа из диапазона 1..12
если число принадлежит переданному параметром-мн-ву то
добавить через запятую строковое представление этого числа в правую часть IN-выражения динамически формируемого тобой текста SQL-запроса
kyn66 (2006-10-17 12:06:00) [10]>> ЮЮ
Множество формируется ешшо до выполнения функции:
...
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);
...
kyn66 (2006-10-17 12:03:00) [11]>> Сергей М.
Множество у меня уже конкретно объявлено, см. вопрос. Я говорю, что SQL-запрос будет внутри функции и ему в качестве критерия отбора нужно будет подать это множество PerSet
ЮЮ (2006-10-17 11:40:00) [12]Хочу написать функцию с SQL-запросом
...
SQL.Add('select sum(Field1) from Tab1 where Field2 In :PerSet');
как вставить множество в качестве параметра.
Никак.
Откуда взялось эт множество? Если из другого запроса, то так и пиши
select sum(Field1) from Tab1 where Field2 In (SELECT Field2 FROM ...)
Сергей М. (2006-10-17 11:34:00) [13]
> kyn66 © (17.10.06 11:32) [2]
Не хами.
> проблема в том, как вставить множество в качестве параметра
Не вижу никакой проблемы.
type
TMySet = такое-то множество;
..
function MyFunc(MySet: TMySet): SomeType;
begin
...
end;
kyn66 (2006-10-17 11:32:00) [14]Мешают умники. А проблема в том, как вставить множество в качестве параметра.
Сергей М. (2006-10-17 11:30:00) [15]Возможно.
> Хочу написать
Напиши.
Что-то мешает ?