Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 reccount() непонятки  [new]
CTAC-KO
Member

Откуда: Украина, г. Ивано-Франковск
Сообщений: 1012
использую эту функцию и нарвался на прикол - в одном случае она отдает положенное значение, а в другом, почему-то значение для другой базы. В этом конкретном глючном случае я подсчитывал кол-во записей в курсоре. там у меня форма такая есть, так я если из одного места ее вызову - все работает как надо, когда из другого - вот тут то и начинается. Я остановил прогу в том месте, посмотрел что в курсоре, - там все ок, 38 записей и count to мне тоже 38 дает, а reccount() дает 1227, такое кол-во записей в другой открытой базе. я уже и селектом, и в reccount() указывал в кавычках имя курсора и потом номер рабочей области - 1227 и все. причем по другим номерам рабочих областей все ок, а тут - фигу. И что интересно, в set я не увидел, в какой по номеру рабочей области открыт мой курсор, я просто сделал select curTelz, а затем ?select() и получил 7.
короче пришлось все на count to переделывать...

в чем, интересно, загвоздка?
18 апр 05, 15:40    [1476707]     Ответить | Цитировать Сообщить модератору
 Re: reccount() непонятки  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Reccount() дает физическое количество записей, включая записи помеченные как удаленные и не обращая внимания на какие-либо наложенные на таблицу фильтры.

А как именно ты подсчитывал COUNT() ты нигде не написал. В общем случае, COUNT возвращает количество записей удовлетворяющих некоторому условию. Условие может быть указано явно в самой команде подсчета записей, но могут существовать и неявные условия (SET FILTER, SET DELETED, INDEX ... FOR ... и т.п.)

Кроме того, курсоры создаются в пределах одной DataSession. Если твоя форма имеет Private DataSession, то несколько открытых форм создадут несколько DataSession в каждой из которых будет свой курсор со своим количеством записей.
18 апр 05, 16:08    [1476864]     Ответить | Цитировать Сообщить модератору
 Re: reccount() непонятки  [new]
ГенГрум
Member

Откуда: ухи соленый однако
Сообщений: 314
А ты не пробовал RECCOUNT([nWorkArea | cTableAlias]) вместо RECCOUNT() ? И еще может быть у тебя есть таймер который передергивает текущую область ?
18 апр 05, 19:42    [1477609]     Ответить | Цитировать Сообщить модератору
 Re: reccount() непонятки  [new]
CTAC-KO
Member

Откуда: Украина, г. Ивано-Франковск
Сообщений: 1012
2ВладимирМ давал Count ALL ТО, а перед тем давал селект по алиясу, где и был тот курсор. Сам курсор создается из базы на лоаде, и в курсоре те данные что надо, то есть все честно, 38 записей, если верить BROWSE. И никаких условий для каунта нет, никаких фильтров и удалений оно запускается практически с одними и теми же условиями - но результат то есть, то нет.

2ГенГрум я в своей мессаге писал что пробывал и по рабочей области и по алиясу (наверное Вы не поняли), что как раз сильно меня и удивляло!!! А таймеров нету вообще никаких и нигде...

я тут случаем (если представить себе, что случайность вообще существует!),
забрел в ветку где было про глюки SQL Select'а. и вот что я заподозрил - там описан случай, когда создается курсор без условия NOFILTER, а у меня именно такой случай, и сказано, что в таком случае курсор физически создан НЕ БУДЕТ!!! Дык вот, реккаунт наверное подсчитывает кол-во записей какбы родителя! курсора-то нету - я ж еще упомянул, что SET не показывает в какой области открыт курсор!!! что он открыт показывает, но в какоей - области - нет, а для других открытых баз все показывает. странно другое - получается что курсор этот то создается физически, то не создается, при ПОЧТИ одинаковых условиях. разница в том, что в другом, неработающем, случае, реляции не такие как в первом....
19 апр 05, 10:45    [1478396]     Ответить | Цитировать Сообщить модератору
 Re: reccount() непонятки  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Пока не приведешь код этого чуда, так и будем "переругиваться". Я тебе уже намекал, что на результат работы COUNT могут влиять неявные фильтры. Например, активный индекс с FOR-условием.

Кроме того, функция SELECT() не сможет вернуть значения (точнее, вернет 0), если указанного алиаса не существует.

Случай с NOFILTER в данном случае не при чем. Даже если результат запроса - это переоткрытая исходная таблица SELECT("newCursor") вернет номер рабочей области в которой она была переоткрыта

Определить, чем же является полученный курсор можно используя функцию

?DBF("newCursor")

Если получишь имя таблицы с расширением tmp - это "честная" временная таблица. Если же расширение DBF - это исходная таблица с наложенным фильтром.
19 апр 05, 11:17    [1478530]     Ответить | Цитировать Сообщить модератору
 Re: reccount() непонятки  [new]
CTAC-KO
Member

Откуда: Украина, г. Ивано-Франковск
Сообщений: 1012
ВладимирМ

Случай с NOFILTER в данном случае не при чем. Даже если результат запроса - это переоткрытая исходная таблица SELECT("newCursor") вернет номер рабочей области в которой она была переоткрыта

Определить, чем же является полученный курсор можно используя функцию

?DBF("newCursor")

Если получишь имя таблицы с расширением tmp - это "честная" временная таблица. Если же расширение DBF - это исходная таблица с наложенным фильтром.


а вот и при чем (Случай с NOFILTER)!!! я провел експеримент,- дык вот что выяснилось: когда форма запускалась так, что от базы, с которой строился потом курсор, были прописаны 2 рилейшна на 2 других базы, DBF("newCursor") возвращал честную темпорари DBF из виндового темпорари каталога, тогда-то и reccount() работал честно, а вот во втором случае к этой базе никаких рилейшнов не пришивалось и она тоже ни к кому, и в этом-то случае, DBF("newCursor") давал мне имя базы-родителя, а reccount() не работал, тоесть давал мне кол-во записей родителя.
ВЫЛЕЧИЛСЬ ВСЕ УКАЗАНИЕМ NOFILTER в SELECT INTO CURSOR!!!

ps пишу с домашнего компа, месаги проходят как положено... а на работе все те же грабли со 116 символами... вообще я так догадываюсь, что на самом деле ограничение=128 байт, просто 12 байт используются еще под что-то, ид_смайлика там, ид_мессаги и т.п., вопрос в том где ж искать это самое ограничение-то??? я-то думал что это глюк ИЕ, но поставил сгеодня оперу - та же хрень...
19 апр 05, 20:00    [1480796]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить