Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233

SQL запрос, условие отбора массив

30.10.2015, 09:35. Показов 5383. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть БД Access с таблицами.
Нужно послать запрос где условие отбора будет массив.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  fish:array of string;
...
with  DataModule3.ADOQueryS do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM Int_Klyva WHERE (Vodoem_Nik =:D1)');
SQL.Add(' and (Fish_Nik =:D2)');
Parameters.ParamByName('D1').Value:=ComboBox1.Items[ComboBox1.ItemIndex];
Parameters.ParamByName('D2').Value:=fish;
Open;
end;
Ругается на строку Parameters.ParamByName('D2').Value:=fish ;
Подскажите как можно организовать такое условие?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.10.2015, 09:35
Ответы с готовыми решениями:

Sql запрос в условие if
Подскажите как правильно написать sql запрос в условие if ('select regformid from brsreportsref where regformid in...

Sql запрос и условие для даты
Доброго времени суток. Сложилась такая ситуация. В программе есть возможность записывать в БД информацию. Информация записывается в...

Запрос SQL и условие Delphi 2010
Всем доброе время суток, нужно было сделать кнопку, которая по зарегистрированному номеру из базы данных MySQL(через денвер) доставала его...

17
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,111
Записей в блоге: 3
30.10.2015, 11:02
glyk5, а ваш массив это что?
если перечень типа "один, два, три, четыре", то можно использовать SQL инструкцию IN

Pascal
1
WHERE Fish_Nik IN ('один','два','три','четыре')
строку можно сформировать перебрав элементы массива и склеив их
1
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
30.10.2015, 11:07
В SQL есть конструкция со словом IN

Delphi
1
2
3
4
5
6
7
var sArr : string;
begin
  ...
  //в sArr должно быть: 'рыба1,рыба2,рыба3'; сколько надо значений через запятую без пробелов. 
  SQL.Text := 'SELECT * FROM Int_Klyva WHERE Vodoem_Nik =:D1 and Fish_Nik in ('+sArr+')';
  Parameters[0].Value:=ComboBox1.Text;
  Open;
Параметр в конструкции IN может быть и поддерживается, но у меня не получилось и
пришлось строку со списком значений вставлять непосредственно в запрос.
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,111
Записей в блоге: 3
30.10.2015, 11:10
Скандербег, вы МАССИВ не можете запихнуть в параметр.
МАССИВ, потому что массив в delphi отличается от массива в SQL
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
30.10.2015, 11:20
Цитата Сообщение от qwertehok Посмотреть сообщение
вы МАССИВ не можете запихнуть в параметр.
Вообще-то, используемая переменная (sArr) - это не массив, а строка.
И потому ни о каком массиве в моем посте речи не идет.
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,111
Записей в блоге: 3
30.10.2015, 11:23
я вам пишу почему у вас с самого начала не работало.

в следующем вашем посте вопросов нет
вопрос решен?
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
30.10.2015, 12:31  [ТС]
Delphi
1
2
    SQL.Text:='SELECT * FROM Int_Klyva WHERE Vodoem_Nik =:D1 and Fish_Nik in ('+Fish+')';
    Parameters[0].Value:=ComboBox1.Text;
не работает
в Fish (Рыба1,Рыба2,Рыба3)

PS отсутствует параметр
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
30.10.2015, 12:35
Переменная Fish должна быть строкой.
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
30.10.2015, 12:37  [ТС]
так и есть
(я не настолько глупый)
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
30.10.2015, 12:38
Цитата Сообщение от glyk5 Посмотреть сообщение
в Fish (Рыба1,Рыба2,Рыба3)
Эти значения были приведены для примера.
В строке должны быть перечислены реальные значения (названия).
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
30.10.2015, 12:45  [ТС]
Они записываются из сводной таблицы
перед запросом проверил ShowMessage(fish);
Значения совпадают с теми что в таблице

Добавлено через 3 минуты
На всякий случай забил жестко, все равно пишет отсутствует значение для 1 или несколько параметров

PS даже на это ругается
Fish:string;
Fish:='Карась';
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
30.10.2015, 12:55
После изменения текста запроса попробуй обновить параметры. Refresh
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
30.10.2015, 12:56
Ага, понятно.
Здесь дело в том, что в запросе строковые значения должны заключаться в кавычки.
В Аксессе допускаются и двойные кавычки.
Отсюда вывод: при формировании строки значений нужно каждое из них обрамлять двойными кавычками, чтобы
в строковой переменной получилось что-то в этом роде:
Delphi
1
   '"Рыба1","Рыба2","Рыба3"'
Первая и последняя кавычки, как и положено одинарные, а внутри двойные.
2
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
30.10.2015, 13:00  [ТС]
Цитата Сообщение от Скандербег Посмотреть сообщение
'"Рыба1","Рыба2","Рыба3"'
Помогло СПАСИБО!
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,111
Записей в блоге: 3
30.10.2015, 13:02
glyk5, я вам во втором сообщении написал синтаксис SQL запроса
а продолжаете пихать массив Delphi в SQL
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
30.10.2015, 13:54  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
glyk5, я вам во втором сообщении написал синтаксис SQL запроса
а продолжаете пихать массив Delphi в SQL
Спасибо!
Не сразу понял
PS у вас кавычки одинарные.
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,111
Записей в блоге: 3
30.10.2015, 14:01
glyk5, одинарные тоже можно
0
5 / 5 / 0
Регистрация: 08.07.2010
Сообщений: 233
30.10.2015, 14:17  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
одинарные тоже можно
Понял, учту, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.10.2015, 14:17
Помогаю со студенческими работами здесь

SQL запрос между 2 датами + к нему дополнительное условие
Приветствую всех! У меня возникла одна проблема. Как добавить ещё условие для поиска по какому-нибудь полю в таблице. С датами по...

access запрос условие отбора
Создайте запрос с именем «Запрос на выборку 3» со следующими свойствами. Тип запроса: запрос на выборку. Перечень полей в запросе: ...

сложное условие отбора в запросе SQL
Пользователь в програме строит условие отбора для запроса. ТОесть выбирает поле потом условие потом вводит значение потом вибирает OR или...

Сложный запрос SQL (Деление одного столбца на два по параметрам отбора)
Помогите собрать сложный запрос. Есть таблица типа: |--idShet--|--Command--|--ActPl--| | 409 | 1 | ...

SQL-запрос в Access, ошибка: Run-time error 3464 Несоответствие типов данных в выражении условия отбора.
Добрый день! Помогите решить проблему. Есть поле regdate в Access-таблице типа Дата/время, где я в коротком формате храню даты. Данные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru