![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Длинная строка запроса [D5, dBase, FoxPro]
e-mike © (2003-01-20 11:02:00)Имеется 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(..);
не к чему не привели.
Не подскажете, как с этим бороться?
Johnmen (2003-01-20 11:57:00) [1]1. имелось в виду where (kodpr in (1,2,3)) or (kodpr in (4,5,6)) or ...
2. да, не выйдет...
видимо, лучший вариант, как было сказано, в отд.табл.
mad0max (2003-01-20 11:46:00) [2]Да пиши лучше в отдельную табличку, может оно и выгадает, что вставка + join займет меньше времени чем select с in.... и мешьше проблем
e-mike (2003-01-20 11:42:00) [3]
> За ради эксперимента :
> 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
Johnmen (2003-01-20 11:20:00) [4]За ради эксперимента :
1. разбить условие в where на два по 200 (на 4 по 100)
2. перенести логику условия в фильтр
3. пересмотреть концепцию построения запроса
e-mike (2003-01-20 11:16:00) [5]
> а коды то откуда беруться?? их в отдельную таблицу скинуть
> нельзя?
> фильтровать по признаку в join запросе?
Коды выбираются пользователем из листбокса и заносятся в StringList.
Т.е. как я понял оптимальное решение - скинуть коды в отдельную таблицу?
filyandiya (2003-01-20 11:13:00) [6]дык запрос таким образом короче не станет:)))
а коды то откуда беруться?? их в отдельную таблицу скинуть нельзя?
фильтровать по признаку в join запросе?