powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / есть ли глюки у select'а
19 сообщений из 19, страница 1 из 1
есть ли глюки у select'а
    #33013784
lesha_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
когда то где то слышал(понимаю что начало ужасное:)), что селект не всегда перетирает курсор указанный в 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("имя курсора"). Щас пришел новый проект, в нем этого нет, стоит ли заморачиваться и закрывать курсор перед селектом, или это пустые страхи?
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33014480
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может ты чего-нить спутал?! Помница в FPD20 SELECT-SQL натурально мог неправильно выполнить выборку. А про курсоры почитай сдесь http://www.foxclub.ru/kb/index.php?sid=24056&aktion=artikel&rubrik=001&id=6&lang=ru - ключевае слово в тексте NOFILTER
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33014717
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi lesha_spb!

Закрывай явно, как ты это и делал всегда - это:
1) не повредит.
2) не сильно замедлит работу.
3) ГЛАВНОЕ - позволит тебе спать спокойно!!!

P.S. Я не делаю так, но гарантировать что оно при любых условиях будет работать как надо не стану :)

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33016382
lesha_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Riser: ссылку читал когда то) но это немного не мой случай. меня инетерсовал вопрос перетирается ли курсор указанный в into, если select ничего не выбрал(т.е. _tally=0)
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33017927
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, lesha_spb !

Если тебе для статистики... :) - такого чуда я, к примеру - не наблюдал (и даже не слышал), вот только что еще раз из любопытства попробовал - все затирается и отлично перетирается!
Сам кстати не раз, чисто для прикола пробовал делать курсор с тем же именем, что и открытая DBF-ка - фокс их прекрасно различает, есть только некоторые тонкости, а так - мирно сосуществуют и закрываюся по отдельности.
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33018031
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi, lesha_spb !

Курсор удаляй - на всякий случай.
А вот если ты делаешь INTO ARRAY ArrayName то обязательно удаляй массив. Потому что INTO ARRAY если в запросе выбирается 0 записей, этот массив не создается и при этом остается старый массив.

У SQL есть другой глюк - если делать
select * from table into cursor c_1 то он не делает select а делает alias и все изменения в table отражаюся в с_1.
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33018759
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГенГрумУ SQL есть другой глюк - если делать
select * from table into cursor c_1 то он не делает select а делает alias и все изменения в table отражаюся в с_1.
Это не глюк. Это фича (особенность). Причем эта фича проявляется при вполне определенных условиях и для ее предотвращения следует всегда использовать опцию NOFILTER вместе с опицей INTO CURSOR.

Более того, специально для подобных "курсоров" была предусмотрена ошибка 1815. Возможно, эта ошибка появляется и в каких-либо еще обстоятельствах, но я сталкивался с ней именно в случае создания курсора как переоткрытого в другой рабочей области таблицы.
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33018794
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ Это не глюк. Это фича (особенность). Причем эта фича проявляется при вполне определенных условиях и для ее предотвращения следует всегда использовать опцию NOFILTER вместе с опицей INTO CURSOR.

Более того, специально для подобных "курсоров" была предусмотрена ошибка 1815. Возможно, эта ошибка появляется и в каких-либо еще обстоятельствах, но я сталкивался с ней именно в случае создания курсора как переоткрытого в другой рабочей области таблицы.


У меня ошибки небыло . На экран ничего не появилось. Error() не проверял. Я просто больше не пользуюсь этим синтаксом. Если нужно добавляю опцию where ... тогда все ок. Ну я просто обалдел когда первый раз наткнулся на эту "фичу".
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33018811
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nofilter нужен скорей для таких случаев:

когда селект простой вроде select * from categories where name like 'a%'
то если не указать nofilter то курсор на самом деле не создаётся а при обращении к этому курсору идёт обращение к курсору из которого была выборка на который накладывается фильтр name like 'a%'
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33018852
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переоткрытие таблицы в другой рабочей области с наложением фильтра вместо создания новой таблицы (курсора) происходит если:

В качестве источника данных используется только одна, ранее открытая таблица

Запрос полностью оптимизирован (Full Optimization)

Возможно, есть еще какие-то условия.

Кстати, условие name LIKE "a%" абсолютно идентично name = "a" при настройке SET ANSI OFF (это настройка по умолчанию). Т.е. если есть индекс по полю name, то будет полная оптимизация.

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

Однако такая таблица не может служить источником данных для других запросов (SELECT-SQL), о чем и сообщает ошибка 1815. Т.е. эта ошибка возникает вовсе не при переоткрытии таблицы, а при попытке ее дальнейшего использования в команде Select-SQL.
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33018864
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024nofilter нужен скорей для таких случаев:

когда селект простой вроде select * from categories where name like 'a%'
то если не указать nofilter то курсор на самом деле не создаётся а при обращении к этому курсору идёт обращение к курсору из которого была выборка на который накладывается фильтр name like 'a%'

Нет я использую where id > 0 при этом id всегда > 0
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33019405
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 некая таблица.
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33019704
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
create table test free (testID I)
index on testID tag testID
insert into test (testID) values ( 1 )
set deleted off && это нужно для FULL Rushmore Optimisation
select * from test into cursor curTmp where testID= 1 
?dbf("curTmp")
select * from curTmp

Т.е. в данном случае curTmp - это именно та же самая таблица test с наложенным фильтром. О чем и говорит функция DBF("curTmp") и ошибка 1815. Проблема снимется если добавить опцию NOFILTER или каким-либо образом нарушить FULL Rushmore Optimisation. Например, включив настройку set deleted on
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33022668
lesha_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понятно, т.е. если у меня стоит настройка set deleted on, то эта ситуация не возможна?
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33022757
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lesha_spbпонятно, т.е. если у меня стоит настройка set deleted on, то эта ситуация не возможна?
Возможна! Только в этом случае нужен будет дополнительный индекс по Deleted().

Если бы все решалось так просто, то никто не стал бы вводить дополнительную опцию NOFILTER.
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33022806
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМПереоткрытие таблицы в другой рабочей области с наложением фильтра вместо создания новой таблицы (курсора) происходит если:

В качестве источника данных используется только одна, ранее открытая таблица

Запрос полностью оптимизирован (Full Optimization)

Возможно, есть еще какие-то условия.

Кстати, условие name LIKE "a%" абсолютно идентично name = "a" при настройке SET ANSI OFF (это настройка по умолчанию). Т.е. если есть индекс по полю name, то будет полная оптимизация.

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

Однако такая таблица не может служить источником данных для других запросов (SELECT-SQL), о чем и сообщает ошибка 1815. Т.е. эта ошибка возникает вовсе не при переоткрытии таблицы, а при попытке ее дальнейшего использования в команде Select-SQL.


Скажите пожалуйста Владимир, а нет ли в VFP какой-нибудь опиции, которая для всех SELECT - SQL заставляла бы использовать NOFILTER.
У меня используется масса SELECT ... INTO.. CURSOR ...над курсорами. Я никогда не получал ошибку 1815, но вы меня насторожили.
С уважением, Алексей.
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33022875
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KСкажите пожалуйста Владимир, а нет ли в VFP какой-нибудь опиции, которая для всех SELECT - SQL заставляла бы использовать NOFILTER.
Нет.

Aleksey-KУ меня используется масса SELECT ... INTO.. CURSOR ...над курсорами. Я никогда не получал ошибку 1815, но вы меня насторожили
Если работает, то не надо ничего менять. Просто помните, в чем действительная причина подобной ошибки, поскольку из описания к ней можно сделать неправильные выводы.

Вообще-то, получить такую ошибку достаточно проблематично. Крайне редко запросы имеют Full Optimization, да еще после этого используются как источники для последующих запросов.
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33022933
lesha_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ Aleksey-KСкажите пожалуйста Владимир, а нет ли в VFP какой-нибудь опиции, которая для всех SELECT - SQL заставляла бы использовать NOFILTER.
Нет.

Aleksey-KУ меня используется масса SELECT ... INTO.. CURSOR ...над курсорами. Я никогда не получал ошибку 1815, но вы меня насторожили
Если работает, то не надо ничего менять. Просто помните, в чем действительная причина подобной ошибки, поскольку из описания к ней можно сделать неправильные выводы.

Вообще-то, получить такую ошибку достаточно проблематично. Крайне редко запросы имеют Full Optimization, да еще после этого используются как источники для последующих запросов.


но как я понял из этого топика, в дальнейшем лучше явно использовать параметр nofilter, хотя лезть в уже работающий код наверное все таки не нужно(имхо).
...
Рейтинг: 0 / 0
есть ли глюки у select'а
    #33023090
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо ВладимирМ!
С уважением, Алексей.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / есть ли глюки у select'а
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]