Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Есть файл aaa.dbf Делается: select * from aaa where name='M' into cursor zzz Результат курсор zzz Потом: select * from zzz where name='Mo' into cursor xxx Результат: "<cursor>" must be created with SELECT ... INTO TABLE. Вопрос: Почему так, если на других машинах работает. Установлен FoxPro6.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 13:09 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Потому, чо при определенных обстоятельствах, вместо создания курсора как временной таблицы иногда таблица источник просто переоткрывается в другой рабочей области с наложенным фильтром. По таким "отфильтрованным" таблицам недопустимо делать повторный запрос. Чтобы этого избежать надо давать опцию NOFILTER: select * from aaa where name='M' into cursor zzz NOFILTER select * from zzz where name='Mo' into cursor xxx Подробнее читай здесь http://]http://www.foxclub.ru/kb/index.php?sid=24056&aktion=artikel&rubrik=001&id=6&lang=ru Раздел "Курсор" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 13:18 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Ссылка не получилась http://www.foxclub.ru/kb/index.php?sid=24056&aktion=artikel&rubrik=001&id=6&lang=ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 13:18 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Извините, а можно настройками FoxPro установить по умолчанию NOFILTER? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 13:44 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Нет. Это одна из опций команды Select-SQL. Причем только в том случае, если запрос отправляется в курсор (INTO CURSOR) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 14:20 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 14:35 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Все равно не дает мне покоя, почему на других машинах не требуется NOFILTER? И что это за « …различные условия, от которых этот курсор может иметь разное физическое "воплощение" и разные свойства…» Можно их как-то обойти? :) Может поставить FoxPro 7 или там это тоже есть? :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 19:23 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
в VFP 7.0 это уже есть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2004, 20:52 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
А по ссылке сходить - религия не позволяет? Вот выдержка оттуда: ****************************************************************************** (...) В зависимости от различных условий этот курсор может иметь разное физическое "воплощение" и разные свойства Если SQL-запрос полностью оптимизируем, то вместо создания нового файла будет просто открыта та же самая таблица с наложенным на нее фильтром. Зачастую это очень неприятная неожиданность. Проверить, чем же физически является сформированный курсор, можно используя функцию DBF() Код: plaintext 1. Если будет возвращено имя файла с расширением DBF, то данный курсор является той же самой исходной таблицей с наложенным на нее фильтром. Если Вы хотите при любых запросах быть уверенными, что курсор - это именно временная таблица, а не исходная таблица с наложенным фильтром, то Вам следует добавить опцию NOFILTER Код: plaintext Эта опция появилась только в 5 версии Visual FoxPro, хотя там она еще не была документирована. В более ранних версиях необходимо добавлять фиктивные условия или признаки группировки, чтобы исключить возможность оптимизации. Однако если курсор - это временная таблица, то это еще не значит, что эта временная таблица будет непременно физически расположена на диске. Вполне возможно, что вся временная таблица целиком поместится в оперативную память. Т.е. функция DBF('TmpTable') будет исправно показывать некий временный файл, но попытка найти его физически на диске окончится неудачей и функция FILE(DBF('TmpTable')) вернет .F. Правда расположение временной таблицы целиком в памяти ни в коем случае не помешает работе с этой временной таблицей. Собственно, в подавляющем большинстве случаев Вас и не должно заботить где физически расположена та или иная таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 09:41 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Если говроить конкретно о запросе select * from aaa where name='M' into cursor zzz то будет наложен фильтр, если существует индекс по полю name и этот индекс используется в rushmore-оптимизации данного запроса. Переход на любую другую версию ничего не даст. Срособ работы один для всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 09:45 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Статью я читал, спасибо очень интересная и много что я узнал. Но меня интересует: почему на ОДНИХ машинах, где установлен FoxPro, после запроса ВСЕГДА формируется временная таблица, а на других НЕТ. И как на результат запроса может зависеть, на какой машине он выполняется. P.S. По полю name существует индекс. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 10:11 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Это зависит не от машины, а от уровня оптимизации запроса. Уровень оптимизации можно проверить, используя функцию SYS(3054). В частности, на него влияюте еще такие факторы: -) Текущая настройка SET DELETED -) Если используется SET DELETED ON, то факт наличия индекса по выражению deleted() -) Факт совпадения текущей настройки SET COLLATE и значение IDXCollate() индексов Но по большому счету, трудно сказать, когда именно в результате выполнения запроса будет именно открыта та же таблица с наложенным фильтром. Это нигде не описывается подробно. Просто такое может быть. Тот факт, что это обычно происходит при полной оптимизации было установлено опытным путем. Но это вовсе не значит, что это единственное условие. Поэтому, просто возьмите за правило, всегда, если Вы используете опцию INTO CURSOR, ставить дополнительную опцию NOFILTER. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 10:23 |
|
||
|
Запрос к курсору -> must be created with SELECT ... INTO TABLE
|
|||
|---|---|---|---|
|
#18+
Большое спасибо, посмотрю в данном направлении. Что надо ставить NOFILTER это я понимаю, но мне в наследство осталось много программ на FoxPro, где нет NOFILTER. Несколько уже отказались работать – пришлось срочно переписывать. Вот мне и хотелось решить данную проблему одним флажком. :) Еще раз огромное спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 10:33 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32544057&tid=1596465]: |
0ms |
get settings: |
13ms |
get forum list: |
18ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
155ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 266ms |
| total: | 548ms |

| 0 / 0 |
