Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2011, 06:04   #1
sdsfy
Пользователь
 
Регистрация: 18.03.2011
Сообщений: 27
По умолчанию Массив как параметр запроса

Приветствую коллеги!

Пытаюсь реализовать нечто вроде

SQL:
Код:
Select * from someTable where someField in [:array_of_params]
соответственно в компоненте
Код:
TIBQuery.ParamByName('array_of_params').<что сюда воткнуть?> := DynArray: array of integer (3,5,8);
Есть IBX компоненты Delphi 2007 и FB 2.0 сервер. Сменить этот инструментарий нет возможности.

Заранее спасибо за любую помощь.
sdsfy вне форума Ответить с цитированием
Старый 09.11.2011, 07:52   #2
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Ну обычно втыкается слово VALUE.
А вот тип параметра указан в другом месте.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 09.11.2011, 08:38   #3
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

Код:
// замена в строке
function str_replace(const sfrom,sto,s: String):String;
begin
  result:=StringReplace(s,sfrom,sto,[rfReplaceAll]);
end;

// список в строку (implode)
function num_implode(rz:string; const ar: array of integer): string;
var i:integer;
begin
  result:='';
  if length(ar)=0 then exit;
  for i := 0 to length(ar) - 2 do result:=result+inttostr(ar[i])+rz;
  result:=result+inttostr(ar[i]);
end;

<...>

TIBQuery.SQL.Text:=
    str_replace(':array_of_params',num_implode(',',DinArray),TIBQuery.SQL.Text);

Последний раз редактировалось Lesha; 09.11.2011 в 08:41.
Lesha вне форума Ответить с цитированием
Старый 09.11.2011, 09:19   #4
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Ну лучше наверно так
Код:
Select * from someTable where someField in (:array_of_params)
В итоге у вас 1 параметр array_of_params с типом ftWideString.
Соответственно и значение которое будет у вас туда передаваться это строка.
Ну а как вы эту строку получите это уже ваше дело.
Правда вот совсем не понятно а на фига здесь вообще использовать массив?Почему не построить просто строку?
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 09.11.2011, 15:42   #5
sdsfy
Пользователь
 
Регистрация: 18.03.2011
Сообщений: 27
По умолчанию

15:42
Спасибо коллеги, сейчас будем пробовать.
Цитата:
Сообщение от rdama Посмотреть сообщение
Почему не построить просто строку?
Это среди рассматриваемых вариантов.
Дело в том, что запрос там формируется динамически, из кусков, которые хранятся в таблице. Там есть некоторая стилистика, которую не хотелось бы нарушать.

16:45
В общем вполне себе интересный вариант отказа от ParamByName. Я так понимаю, из практики других программеров, что IBX не дает возможности передать массив как параметр. Хотя, говорят что FIBPlus такую возможность предоставляет.

Красные жирные циферки видны ?
Это время, когда вы отправляли свои сообщения друг за другом, подряд.
У нас есть кнопка "Правка".
Читаем правила раздела.
По правилам это приравнивается к флуду.

Последний раз редактировалось mihali4; 09.11.2011 в 17:07.
sdsfy вне форума Ответить с цитированием
Старый 11.11.2011, 04:46   #6
sdsfy
Пользователь
 
Регистрация: 18.03.2011
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Lesha Посмотреть сообщение
Код:
  for i := 0 to length(ar) - 2 do result:=result+inttostr(ar[i])+rz;
  result:=result+inttostr(ar[i]);
end;
Кстати, код неправильный. Ибо глюк обеспечен при длине массива 1. Это я скорей не автору адресую (за идею ему большое спасибо), а тем, кто стянет с треда код и удивится, почему он странно себя ведет.
sdsfy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив как параметр функции makc101 Помощь студентам 2 19.04.2011 22:47
Массив как параметр функции MovsesIV Общие вопросы C/C++ 2 02.12.2010 03:07
C++ - массив как параметр функции kefir Помощь студентам 8 12.04.2010 17:48
Значение из DateTimePicker как параметр запроса AnkaP БД в Delphi 4 06.02.2010 00:39
Динамически массив как параметр ф-ии SNUPY Помощь студентам 2 11.05.2008 01:16