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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

Нет я использую where id > 0 при этом id всегда > 0
...
Рейтинг: 0 / 0
16.04.2005, 12:00
    #33019405
lesha_spb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть ли глюки у select'а
"Однако такая таблица не может служить источником данных для других запросов (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
16.04.2005, 21:02
    #33019704
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть ли глюки у select'а
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
19.04.2005, 11:31
    #33022668
lesha_spb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть ли глюки у select'а
понятно, т.е. если у меня стоит настройка set deleted on, то эта ситуация не возможна?
...
Рейтинг: 0 / 0
19.04.2005, 12:26
    #33022757
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть ли глюки у select'а
lesha_spbпонятно, т.е. если у меня стоит настройка set deleted on, то эта ситуация не возможна?
Возможна! Только в этом случае нужен будет дополнительный индекс по Deleted().

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

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

Запрос полностью оптимизирован (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
19.04.2005, 12:55
    #33022875
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть ли глюки у select'а
Aleksey-KСкажите пожалуйста Владимир, а нет ли в VFP какой-нибудь опиции, которая для всех SELECT - SQL заставляла бы использовать NOFILTER.
Нет.

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

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

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

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


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


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