Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.15;
Скачать: CL | DM;

Вниз

Строка ключей и оператор 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
2-1182317706
sergeyst
2007-06-20 09:35
2007.07.15
Как работать с динамическими массивами в TurboPascal?


2-1182166843
DarekS
2007-06-18 15:40
2007.07.15
Сервис и ADO


6-1166441975
integerr
2006-12-18 14:39
2007.07.15
дание в POST запросе IdHTTP


2-1182176439
kyro
2007-06-18 18:20
2007.07.15
Заголовки mp3


3-1176564369
Grec
2007-04-14 19:26
2007.07.15
Столбец для ввода значений