Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
когда то где то слышал(понимаю что начало ужасное:)), что селект не всегда перетирает курсор указанный в into cursor Т.е. select * from table1 into cursor c_1 - выбирается n-ое количество данных затем делаем(м.б. в совершенно в другом месте, но где виден курсор с_1): select * from table1 into cursor c_1 where idob = 0 - пусть такого idob'a нет и _tally=0. Поидее курсор с_1 должен стать пустым. Всегда ли это так? в своих проектах всегда перед тем как делать селект в курсор делал с ним use in select("имя курсора"). Щас пришел новый проект, в нем этого нет, стоит ли заморачиваться и закрывать курсор перед селектом, или это пустые страхи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2005, 15:58 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
может ты чего-нить спутал?! Помница в FPD20 SELECT-SQL натурально мог неправильно выполнить выборку. А про курсоры почитай сдесь http://www.foxclub.ru/kb/index.php?sid=24056&aktion=artikel&rubrik=001&id=6&lang=ru - ключевае слово в тексте NOFILTER ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2005, 20:36 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
Hi lesha_spb! Закрывай явно, как ты это и делал всегда - это: 1) не повредит. 2) не сильно замедлит работу. 3) ГЛАВНОЕ - позволит тебе спать спокойно!!! P.S. Я не делаю так, но гарантировать что оно при любых условиях будет работать как надо не стану :) Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 03:45 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
2Riser: ссылку читал когда то) но это немного не мой случай. меня инетерсовал вопрос перетирается ли курсор указанный в into, если select ничего не выбрал(т.е. _tally=0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2005, 16:01 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
Hi, lesha_spb ! Если тебе для статистики... :) - такого чуда я, к примеру - не наблюдал (и даже не слышал), вот только что еще раз из любопытства попробовал - все затирается и отлично перетирается! Сам кстати не раз, чисто для прикола пробовал делать курсор с тем же именем, что и открытая DBF-ка - фокс их прекрасно различает, есть только некоторые тонкости, а так - мирно сосуществуют и закрываюся по отдельности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 12:45 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
Hi, lesha_spb ! Курсор удаляй - на всякий случай. А вот если ты делаешь INTO ARRAY ArrayName то обязательно удаляй массив. Потому что INTO ARRAY если в запросе выбирается 0 записей, этот массив не создается и при этом остается старый массив. У SQL есть другой глюк - если делать select * from table into cursor c_1 то он не делает select а делает alias и все изменения в table отражаюся в с_1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 13:18 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
ГенГрумУ SQL есть другой глюк - если делать select * from table into cursor c_1 то он не делает select а делает alias и все изменения в table отражаюся в с_1. Это не глюк. Это фича (особенность). Причем эта фича проявляется при вполне определенных условиях и для ее предотвращения следует всегда использовать опцию NOFILTER вместе с опицей INTO CURSOR. Более того, специально для подобных "курсоров" была предусмотрена ошибка 1815. Возможно, эта ошибка появляется и в каких-либо еще обстоятельствах, но я сталкивался с ней именно в случае создания курсора как переоткрытого в другой рабочей области таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 17:13 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Это не глюк. Это фича (особенность). Причем эта фича проявляется при вполне определенных условиях и для ее предотвращения следует всегда использовать опцию NOFILTER вместе с опицей INTO CURSOR. Более того, специально для подобных "курсоров" была предусмотрена ошибка 1815. Возможно, эта ошибка появляется и в каких-либо еще обстоятельствах, но я сталкивался с ней именно в случае создания курсора как переоткрытого в другой рабочей области таблицы. У меня ошибки небыло . На экран ничего не появилось. Error() не проверял. Я просто больше не пользуюсь этим синтаксом. Если нужно добавляю опцию where ... тогда все ок. Ну я просто обалдел когда первый раз наткнулся на эту "фичу". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 17:23 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
nofilter нужен скорей для таких случаев: когда селект простой вроде select * from categories where name like 'a%' то если не указать nofilter то курсор на самом деле не создаётся а при обращении к этому курсору идёт обращение к курсору из которого была выборка на который накладывается фильтр name like 'a%' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 17:29 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
Переоткрытие таблицы в другой рабочей области с наложением фильтра вместо создания новой таблицы (курсора) происходит если: В качестве источника данных используется только одна, ранее открытая таблица Запрос полностью оптимизирован (Full Optimization) Возможно, есть еще какие-то условия. Кстати, условие name LIKE "a%" абсолютно идентично name = "a" при настройке SET ANSI OFF (это настройка по умолчанию). Т.е. если есть индекс по полю name, то будет полная оптимизация. Такое "переоткрытие" вместо создания новой таблтцы позволяет значительно ускорить получение выборки. Однако такая таблица не может служить источником данных для других запросов (SELECT-SQL), о чем и сообщает ошибка 1815. Т.е. эта ошибка возникает вовсе не при переоткрытии таблицы, а при попытке ее дальнейшего использования в команде Select-SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 17:38 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
1024nofilter нужен скорей для таких случаев: когда селект простой вроде select * from categories where name like 'a%' то если не указать nofilter то курсор на самом деле не создаётся а при обращении к этому курсору идёт обращение к курсору из которого была выборка на который накладывается фильтр name like 'a%' Нет я использую where id > 0 при этом id всегда > 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 17:41 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
"Однако такая таблица не может служить источником данных для других запросов (SELECT-SQL), о чем и сообщает ошибка 1815. Т.е. эта ошибка возникает вовсе не при переоткрытии таблицы, а при попытке ее дальнейшего использования в команде Select-SQL." может я вас неправильно понял, но такой код никаких ошибок не вызывает: use depart in 0 SELECT * from depart INTO CURSOR c_aaa SELECT * from c_aaa INTO CURSOR c_1 WHERE VAL(c_aaa.idob)>0 SELECT c_1 browse Где depart некая таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2005, 12:00 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
lesha_spb"Однако такая таблица не может служить источником данных для других запросов (SELECT-SQL), о чем и сообщает ошибка 1815. Т.е. эта ошибка возникает вовсе не при переоткрытии таблицы, а при попытке ее дальнейшего использования в команде Select-SQL." может я вас неправильно понял, но такой код никаких ошибок не вызывает: use depart in 0 SELECT * from depart INTO CURSOR c_aaa SELECT * from c_aaa INTO CURSOR c_1 WHERE VAL(c_aaa.idob)>0 SELECT c_1 browse Где depart некая таблица. Запустите такой код Код: plaintext 1. 2. 3. 4. 5. 6. Т.е. в данном случае curTmp - это именно та же самая таблица test с наложенным фильтром. О чем и говорит функция DBF("curTmp") и ошибка 1815. Проблема снимется если добавить опцию NOFILTER или каким-либо образом нарушить FULL Rushmore Optimisation. Например, включив настройку set deleted on ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2005, 21:02 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
понятно, т.е. если у меня стоит настройка set deleted on, то эта ситуация не возможна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2005, 11:31 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
lesha_spbпонятно, т.е. если у меня стоит настройка set deleted on, то эта ситуация не возможна? Возможна! Только в этом случае нужен будет дополнительный индекс по Deleted(). Если бы все решалось так просто, то никто не стал бы вводить дополнительную опцию NOFILTER. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2005, 12:26 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
ВладимирМПереоткрытие таблицы в другой рабочей области с наложением фильтра вместо создания новой таблицы (курсора) происходит если: В качестве источника данных используется только одна, ранее открытая таблица Запрос полностью оптимизирован (Full Optimization) Возможно, есть еще какие-то условия. Кстати, условие name LIKE "a%" абсолютно идентично name = "a" при настройке SET ANSI OFF (это настройка по умолчанию). Т.е. если есть индекс по полю name, то будет полная оптимизация. Такое "переоткрытие" вместо создания новой таблтцы позволяет значительно ускорить получение выборки. Однако такая таблица не может служить источником данных для других запросов (SELECT-SQL), о чем и сообщает ошибка 1815. Т.е. эта ошибка возникает вовсе не при переоткрытии таблицы, а при попытке ее дальнейшего использования в команде Select-SQL. Скажите пожалуйста Владимир, а нет ли в VFP какой-нибудь опиции, которая для всех SELECT - SQL заставляла бы использовать NOFILTER. У меня используется масса SELECT ... INTO.. CURSOR ...над курсорами. Я никогда не получал ошибку 1815, но вы меня насторожили. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2005, 12:41 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
Aleksey-KСкажите пожалуйста Владимир, а нет ли в VFP какой-нибудь опиции, которая для всех SELECT - SQL заставляла бы использовать NOFILTER. Нет. Aleksey-KУ меня используется масса SELECT ... INTO.. CURSOR ...над курсорами. Я никогда не получал ошибку 1815, но вы меня насторожили Если работает, то не надо ничего менять. Просто помните, в чем действительная причина подобной ошибки, поскольку из описания к ней можно сделать неправильные выводы. Вообще-то, получить такую ошибку достаточно проблематично. Крайне редко запросы имеют Full Optimization, да еще после этого используются как источники для последующих запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2005, 12:55 |
|
||
|
есть ли глюки у select'а
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Aleksey-KСкажите пожалуйста Владимир, а нет ли в VFP какой-нибудь опиции, которая для всех SELECT - SQL заставляла бы использовать NOFILTER. Нет. Aleksey-KУ меня используется масса SELECT ... INTO.. CURSOR ...над курсорами. Я никогда не получал ошибку 1815, но вы меня насторожили Если работает, то не надо ничего менять. Просто помните, в чем действительная причина подобной ошибки, поскольку из описания к ней можно сделать неправильные выводы. Вообще-то, получить такую ошибку достаточно проблематично. Крайне редко запросы имеют Full Optimization, да еще после этого используются как источники для последующих запросов. но как я понял из этого топика, в дальнейшем лучше явно использовать параметр nofilter, хотя лезть в уже работающий код наверное все таки не нужно(имхо). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2005, 13:11 |
|
||
|
|

start [/forum/search_topic.php?author=PASHA99&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
get settings: |
10ms |
get forum list: |
23ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 676ms |
| total: | 873ms |

| 0 / 0 |
