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

Вниз

Множество в качестве параметра для функции   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
6-1150292201
Интересующийся
2006-06-14 17:36
2006.11.05
Список всех машин в диапозоне между двумя IP


15-1161072064
cyborg
2006-10-17 12:01
2006.11.05
Чего-то Яндекс совсем испортился


11-1137545458
-=Mike=-
2006-01-18 03:50
2006.11.05
Обработка исключений


15-1160483544
Nic
2006-10-10 16:32
2006.11.05
Олимпиада 1C


15-1160427547
Ученик чародея
2006-10-10 00:59
2006.11.05
Какая все таки гадость этот IE.