![]() |
|
|
![]()
|
|
| kami |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 3 Всего: 72 |
Здравствуйте, дамы и господа!
В программе на Delphi есть следующее описание:
В MySQL (соединение через ADO компоненты) хранится табличка:
При добавлении записи в эту таблицу или чтении "построчно" всё просто:
А вот как быть, если нужно выбрать все записи по нескольким статусам, т.е (для Delphi) с использованием set of TStatus? Динамически запрос составить не могу - в силу ряда причин можно пользоваться только хранимыми процедурами... Как передать в хранимку и выполнить что-то типа
Пробовал использовать тип параметра хранимки SET, но через ADO его видно как строку. Кроме того, хоть и пишут, что внутреннее представление этого типа бинарное, аналогично Delphi, но в SQL операторах он тоже идет как строка... Собственно, вопрос - как передать (возможно, с преобразованием) в хранимую процедуру параметр типа set of и как им воспользоваться в SELECT-е? P.S. Прошу прощения за невнятное название темы и мешанину в самом вопросе - это всё от непонимания предметной области :( |
||||||||
|
|||||||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 3 Всего: 72 |
Небольшой upd:
в принципе, можно воспользоваться таким фокусом: в хранимую процедуру передавать Set Of как integer, тогда тело процедуры будет выглядеть так:
Но - таблица в перспективе будет очень большой, так что СУБД замучается сдвигать статус каждой строки влево. Не выход. Нужно как-то представить StatusSet в виде набора значений и использовать в WHERE оператор IN... Это сообщение отредактировал(а) kami - 2.11.2012, 12:24 |
|||
|
||||
| Vas |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Передавай как строку, а в хранимке уже готовь запрос
Ну и выборка
Результат +----+-------+--------+ | id | name | status | +----+-------+--------+ | 1 | 1111 | 1 | | 2 | 22222 | 1 | | 3 | 33333 | 1 | | 4 | 44444 | 2 | +----+-------+--------+ 4 rows in set (0.00 sec)
+----+-------+--------+ | id | name | status | +----+-------+--------+ | 1 | 1111 | 1 | | 2 | 22222 | 1 | | 3 | 33333 | 1 | | 4 | 44444 | 2 | | 5 | 55555 | 3 | | 6 | 66666 | 3 | +----+-------+--------+ 6 rows in set (0.00 sec) -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
||||||
|
|||||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 3 Всего: 72 |
Vas, здОрово!
Спасибо!!! |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |