Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.05 c
6-1149973029
Wyper
2006-06-11 00:57
2006.11.05
Разработка сетевого приложения


4-1150724006
novill
2006-06-19 17:33
2006.11.05
Заняты ли "горячие клавиши"? Или получить список активных?


15-1160656122
Slava812
2006-10-12 16:28
2006.11.05
Вкладка безопасность


15-1161150741
Quester
2006-10-18 09:52
2006.11.05
Загадка


15-1160671958
Kolan
2006-10-12 20:52
2006.11.05
Хочу попробовать сделать базу в ER Win, поможете?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский