Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Есть ли альтернатива запросу с whrere in [D7, MSSQL]


DimonNew ©   (2004-11-15 14:03:00) 

Привет, помогите пож-та. Есть Query, в который вставляется строка примерного вида с where field1 in (123,...,544). То, что перечисляется в in, заполняется как стока в Delphi и может быть несколько сотен чисел в ней. Так вот, программа зависает на некоторое время во время выполнения запроса и потом выдает ошибку, что истек TimeOut. Увеличение его не помогает. Подскажите пож-та, как можно избавиться от этого, может альтернативный запрос?


msguns   (2004-11-15 14:34:00) [1]

А тупо создать врем. таблицу, проиндексировать ее по "искомому" полю, вогнать туда все значения, отмеченные узером, а потом запустить связанный запрос ?


DimonNew   (2004-11-15 14:28:00) [2]

Да это верно Layner ©сам пробовал, но эти числа выбирает пользователь, вернее какие-то строки в ListBox, с которыми связаны идентификаторы, их-то я и загоняю в in, если их мало, то проходит запрос нормально, если много, то беда.


Ega23   (2004-11-15 14:27:00) [3]

Непрерывности нет. Время увеличил у ADOQuery до 300, прошло без ошибки,но очень долго ждал, пока Open этот запрос сделает.

Сам запрос оптимизировать никак?


Ega23   (2004-11-15 14:26:00) [4]

123,...,544 - эти числа откуда берете? С др. таблицы? Тогда пожайлуста, пишите так: where field1 in (SELECT id FROM table WHERE ...) На стороне сервера это вычислится моментом.

Вопрос спорный. Я бы не стал так категорично утверждать.


Layner   (2004-11-15 14:22:00) [5]

123,...,544- эти числа откуда берете? С др. таблицы? Тогда пожайлуста, пишите так: where field1 in (SELECT id FROM table WHERE ...)На стороне сервера это вычислится моментом.


DimonNew   (2004-11-15 14:22:00) [6]

Непрерывности нет. Время увеличил у ADOQuery до 300, прошло без ошибки,но очень долго ждал, пока Open этот запрос сделает.


Ega23   (2004-11-15 14:20:00) [7]

Я думаю, не в in дело.


clickmaker   (2004-11-15 14:08:00) [8]

если есть непрерывность, то можно частично вместо in юзать between. На крайняк поднять св-во TimeOut у Query (если TADOQuery)


Наверх

Титульная страница Поиск, карта сайта Написать письмо