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

Вниз

Длинная строка запроса   Найти похожие ветки 

 
e-mike ©   (2003-01-20 11:02) [0]

Имеется SQL запрос вида
select kodvv,sum(v) as sv from vib where kodpr in (1,3,4) group by kodvv

Если так записать, то выполняется нормально.
Проблема в том, что если в скобках после "where kodpr in " указывать не 3 а более 400 кодов (приблизительно), то выскакивает ошибка
Access violation at address 4c5fd41 in module "idsql32.dll". Write of address 03de1000.

Вызываю через TQuery. БД - dBase

Я думаю, это из=за слишком длинной строки запроса.
Попытка разбить его на несколько строк, т. е.
Query.sql.add(..);
Query.sql.add(..);
не к чему не привели.

Не подскажете, как с этим бороться?


 
filyandiya   (2003-01-20 11:13) [1]

дык запрос таким образом короче не станет:)))

а коды то откуда беруться?? их в отдельную таблицу скинуть нельзя?
фильтровать по признаку в join запросе?


 
e-mike ©   (2003-01-20 11:16) [2]


> а коды то откуда беруться?? их в отдельную таблицу скинуть
> нельзя?
> фильтровать по признаку в join запросе?


Коды выбираются пользователем из листбокса и заносятся в StringList.

Т.е. как я понял оптимальное решение - скинуть коды в отдельную таблицу?


 
Johnmen ©   (2003-01-20 11:20) [3]

За ради эксперимента :
1. разбить условие в where на два по 200 (на 4 по 100)
2. перенести логику условия в фильтр
3. пересмотреть концепцию построения запроса


 
e-mike ©   (2003-01-20 11:42) [4]


> За ради эксперимента :
> 1. разбить условие в where на два по 200 (на 4 по 100)

Не получится, т.к. есть sum(v) и group by.

> 2. перенести логику условия в фильтр

Вот это возможно. Но тут тоже проблема с group by
Я делаю

Query.Filter:="kodpr in "+prlist;
Query.filtered:=true;
Query.SQL.add("select kodvv,sum(v) as v from vib"+
" group by kodvv order by kodvv");

Пишет field kodpr not fount.
Добавляю в селект поле kodpr - пишет
when group by exists, every simple field in projectors must be in group by




 
mad0max   (2003-01-20 11:46) [5]

Да пиши лучше в отдельную табличку, может оно и выгадает, что вставка + join займет меньше времени чем select с in.... и мешьше проблем


 
Johnmen ©   (2003-01-20 11:57) [6]

1. имелось в виду where (kodpr in (1,2,3)) or (kodpr in (4,5,6)) or ...
2. да, не выйдет...

видимо, лучший вариант, как было сказано, в отд.табл.



Страницы: 1 вся ветка

Текущий архив: 2003.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
1-15619
Максимильян
2003-01-29 11:24
2003.02.06
как отучить


8-15768
vixic
2002-10-23 10:10
2003.02.06
Рисунок на канву Panel?


14-15903
Z@PODLO
2003-01-20 19:37
2003.02.06
Работа с текстом в Delphi 6


7-15975
Erlan
2002-11-27 09:20
2003.02.06
Проблема с vxd


7-15974
FoxM
2002-11-27 19:38
2003.02.06
Поместить экран в файл