powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Множественный выбор в запросе
25 сообщений из 44, страница 1 из 2
Множественный выбор в запросе
    #39951397
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, подскажите есть запрос типа

Код: pascal
1.
select * from tab where tab.name in (:name_list)



Параметр name_list получаю из TStringList, вопрос правильно ли это и как сделать чтобы параметр принял значение типа:

'Вася','Петя', а не как 'Вася, Петя'.

Как делаете вы?
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951399
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetправильно ли это

Нет, неправильно.

wsnetКак делаете вы?

Мы так не делаем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951404
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
select * from tab where :name_list like '%'+tab.name +'%'
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951411
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, не очень ясно, как это использовать?
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951420
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

Не использовать TStringList.DelimitedText бездумно не предлагать?
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951421
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster, да, но все же как вы реализуете задачу множественного выбора значений ?
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951424
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Извиняюсь, а как вы делаете, может подскажите?
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951425
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

1) Тебе нужно точное совпадение? Именно "Вася и Петя и Ваня"?
2) Я бы тупо слеил IN кляузу обычным циклом и прилепил к запросу.

Код: pascal
1.
2.
  for ..... do MyParam:=MyParam+''''+StringList.Strings[i]+''''+',';
  MyParam:=TrimLastChar(MyParam,',');
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951427
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetа как вы делаете, может подскажите?

Обрабатываю выбранное по одному, в цикле. Это не требует запросов к серверу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951434
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

То есть прогоняете в цикле? Что-то типа этого?
Код: pascal
1.
2.
3.
4.
5.
While not Query.Eof do
Begin
If Query.FieldByName[name] := list[i]
...
End;
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951435
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Да точное, нет, от склейки отказались.
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951438
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster, а в Myparam что будет в конечном счете?
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951441
wsnet,

Ну что бы не использовать склейку, используйте setlength сразу определённой длины, и функцию move. Совершенно не будет тормозить.


Ну или получите строку целиком, добавьте N количество через setlength и с конца перенесите с лева на право. Добавив символы. Тоже с move
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951443
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
wsnet,
Ну что бы не использовать склейку, используйте setlength сразу определённой длины, и функцию move. Совершенно не будет тормозить.

TStringBuilder уже не модно?
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951444
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Извиняюсь, а как вы делаете, может подскажите?
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951445
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный, пример можно?
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951454
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet
DimaBr, не очень ясно, как это использовать?

Так и использовать. В :name_list передавать список через зяпятую
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951467
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, если использовать left join и далее в where указать ваше условие, то почему-то выбираются все записи,
на одной таблице проблем нет. Как так может быть?
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951472
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, нет отрабатывает как надо! Спасибо за идею!
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951476
alekcvp

TStringBuilder уже не модно?


Да ну нафиг этот костыль. Мне лично эта прослойка совершенно не нужна.
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951486
wsnet
ВсеРазумный, пример можно?


Не актуально Да и ладно


Сначала убираем коретки переноса, потом умножаем на все '',_(пробел) убираем с конца лишние, и добавляем по пунктам.

Для оптимизации можно убрать inc и вложить в скобки индексы, и в конце inc-нуть(Но как то пофиг).

Если в конце есть перенос, всегда добавляет запятую с пробелом "'ss1,', 's2', ". Если строка кончается, и нет переносов, то будет "'ss1,', 's2'"

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
procedure TForm1.Button1Click(Sender: TObject);
var
  list, line: string;
  LCount, lenStr, LenEnd, offset, LenLine: Integer;
begin
  offset := 1;

  with Memo1.Lines do
  begin
    LCount := Count;
    lenStr := Text.Length - ((LCount - 1) * LineBreak.Length);
    LenEnd := (lenStr + (4 * LCount)) - 2;
  end;

  SetLength(list, LenEnd);
  for line in Memo1.Lines do
  begin
    LenLine := line.Length;
    list[offset] := '''';
    inc(offset);
    move(line[1], list[offset], LenLine * sizeof(line[1]));
    inc(offset, LenLine);
    list[offset] := '''';

    if offset < LenEnd then
    begin
      inc(offset);
      list[offset] := ',';
      inc(offset);
      list[offset] := ' ';
      inc(offset);
    end;
  end;

  ShowMessage(list);
end;
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951488
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Путей несколько

Первый, создаете на сервере таблицу с типа session_id, value и сливаете туда нужные Вам значения. После чего можете спокойно использовать эту таблицу для джойна со своим идентификатором session_id.
Путь второй, как вам уже сказали, строка с разделителем которую разбираете на сервере. Некое подобие этого решения передавать в параметре xml который обычно на сервере можно использовать для запросов. Но тут уже от возможностей сервера.
Путь третий, у некоторых sql серверов есть табличные параметры, т.е в качестве параметра на сервер передается Ваш датасет ну и соответственно там Вы его уже можете полноценно использовать как таблицу. Тут зависит от вашего сервера и компонентов которые вы используете, далеко не все это умеют.
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951491
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet
DimaBr, нет отрабатывает как надо! Спасибо за идею!

Советую формировать строку не через Запятую, а например так "<123><456><789>" и тогда запрос будет такого вида
Код: sql
1.
select * from tab where :name_list like '%<'+tab.name +'>%'
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951499
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetа как вы делаете, может подскажите?

Вы не поверите, но разные вещи я делаю разными способами.

Может, уже скажете, что именно Вы пытаетесь сделать?
...
Рейтинг: 0 / 0
Множественный выбор в запросе
    #39951503
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так "без скобок"

И так "со скобками"
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Множественный выбор в запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]