Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1178808671
Ддеенниисс
2007-05-10 18:51
2007.07.15
Рисунок из буфера обмена


15-1182185504
Грициан
2007-06-18 20:51
2007.07.15
Как вам расширение такое Delphi?


15-1181641061
OOO @Delphi
2007-06-12 13:37
2007.07.15
Где достать (скачать т.е.) FrontPage 2003?


2-1182599910
Ламер 2.Х
2007-06-23 15:58
2007.07.15
Дата


8-1161605495
Ketrikken
2006-10-23 16:11
2007.07.15
Настройка звука в DirectShow





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский