Форум: "Базы";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];
ВнизСтрока ключей и оператор SELECT Найти похожие ветки
← →
isasa © (2007-04-17 22:02) [0]Существует список ключей в виде строки "key1,key,2,key3...keyN". Необходимо сделать вяборку оператором SELECT,
в котором я должен в условие WHERE добавить выбор по списку(как видится, WHERE ... and Field in (mask) ).
Проблема в следующем:
я могу тупо написать строку запроса в D и модифицировать CommandText в самой программе
SQLcomm:= "SELECT ... WHERE ... and Field in (%s)"
TADODataSet.CommandText:=format(SQLcomm,[MaskStr]);
но, приданном подходе текст запроса попадает в компилированный код, это плохо.
Второй, не пройденный вариант, модифицировать строку запроса на сервере.
create procedure AAA
@Mask varchar(255)
...
begin
declare SQLbuf varchar(1024)
...
set @SQLbuf = "SELECT ... WHERE ... and Field in ("+@Mask+")";
...
execute (@SQLbuf)
end
Из D жанное чуде выбираем TADODataSet, где в CommandText:="execute AAA ..."
Второй вариант не работает, сообщение - нет набора данных.
Буду очень благодарен за соображения, избарляющие включенияе текста запроса в компилируемый код.
← →
Johnmen © (2007-04-18 09:14) [1]
> избарляющие включенияе текста запроса в компилируемый код.
Религия? :)
← →
Ega23 © (2007-04-18 09:33) [2]
create procedure AAA
@Mask varchar(255)
...
begin
declare SQLbuf varchar(1024)
...
set @SQLbuf = "SELECT ... WHERE ... and Field in ("+@Mask+")";
...
execute (@SQLbuf)
end
Должно работать.
В Query Analyzer процедура НД возвращает?
← →
stone © (2007-04-18 10:53) [3]
> isasa © (17.04.07 22:02)
Как вариант пишется довольно простая функция по разбору строки, возвращающая результат в виде рекордсета. А там уже хоть ин, хоть джойн.
← →
Jan1 (2007-04-18 10:58) [4]
> Второй вариант не работает, сообщение - нет набора данных.
только что проверил - работает. Мож ADO у тебя глюкавый или MDAC?
← →
isasa © (2007-04-18 12:53) [5]Jan1 (18.04.07 10:58) [4]
Да, хронически виноват. В рантайм все работает. В дизайн не удается получить список полей, ну и фиг с ним.
Johnmen © (18.04.07 09:14) [1]
> избарляющие включенияе текста запроса в компилируемый код.
Религия? :)
:)
Почти. Но к заказчику легче апдейтом гнать один *.sql файл, размером пару килобайт, чем *.dll размером в несколько мегабайт ...
← →
Jan1 (2007-04-18 13:08) [6]
> В дизайн не удается получить список полей, ну и фиг с ним.
не знаю. у меня грид все показал, как-то же он в рантайме получил список полей?
← →
Ega23 © (2007-04-18 13:14) [7]
> Да, хронически виноват. В рантайм все работает. В дизайн
> не удается получить список полей, ну и фиг с ним.
Так попробуй:create procedure AAA
@Mask varchar(255) =""
...
begin
declare SQLbuf varchar(1024)
...
set @SQLbuf = "SELECT ... WHERE ... "
if @Mask<>"" Set @SQLBuf=@SQLBuf + "and Field in ("+@Mask+")";
...
execute (@SQLbuf)
end
← →
Sergey13 © (2007-04-18 13:15) [8]> [0] isasa © (17.04.07 22:02)
Как вариант. Завести в БД для таких случаев отдельную табличку со структурой (идентификатор, значение). Привязать ее к запросу. Меняя наполнение таблицы получаем то, что хотим.
← →
isasa © (2007-04-18 13:41) [9]Jan1 (18.04.07 13:08) [6]
не знаю. у меня грид все показал, как-то же он в рантайме получил список полей?
Грид все показывает. Тут все нормально. Матерится при запуске редактора полей TADODataSet.
Ega23 © (18.04.07 13:14) [7]
:)
Ну я приблизительно так и делаю. Я не все написал в вопросе. Комбинаций запроса - штук 16. Просто фильтр по списку дабавляется потом, как ты написал ... :)
Sergey13 © (18.04.07 13:15) [8]
:)
Тоже вариант, но меня временные таблицы(как глобальные, так и локальные) уже задрали ...
← →
Ega23 © (2007-04-18 13:53) [10]
> Матерится при запуске редактора полей TADODataSet.
Либо коннект только в ран-тайме выставляется, либо мастер-детальная связь, а мастер не открыт, либо дефолтные значения параметров не заданы.
← →
Sergey13 © (2007-04-18 14:19) [11]> [9] isasa © (18.04.07 13:41)
> Тоже вариант, но меня временные таблицы(как глобальные,
> так и локальные) уже задрали ...
Я не про временные, я про "служебные". Вполне себе постоянная таблица, в которой хранится инфа, например настроечная, для работы программы.
← →
isasa © (2007-04-18 14:58) [12]Ega23 © (18.04.07 13:53) [10]
:)
Да ну его. Датасет используется в невизуальном отдельном потоке. Мне дизайн там до лампочки.
Sergey13 © (18.04.07 14:19) [11]
Тут и так забываешь основные таблицы заказчику пересылать. :)
А тут еше служебная. Не хочется.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.119 c