Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Множественный выбор в запросе / 25 сообщений из 44, страница 1 из 2
25.04.2020, 17:49
    #39951397
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественный выбор в запросе
Коллеги, подскажите есть запрос типа

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



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

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

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

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

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

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

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

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

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

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

Обрабатываю выбранное по одному, в цикле. Это не требует запросов к серверу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.04.2020, 19:32
    #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
25.04.2020, 19:33
    #39951435
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественный выбор в запросе
DarkMaster,

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

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


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

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

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

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

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


Да ну нафиг этот костыль. Мне лично эта прослойка совершенно не нужна.
...
Рейтинг: 0 / 0
25.04.2020, 21:12
    #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
25.04.2020, 21:14
    #39951488
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественный выбор в запросе
Путей несколько

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

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

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

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

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


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