Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
reccount() непонятки
|
|||
|---|---|---|---|
|
#18+
использую эту функцию и нарвался на прикол - в одном случае она отдает положенное значение, а в другом, почему-то значение для другой базы. В этом конкретном глючном случае я подсчитывал кол-во записей в курсоре. там у меня форма такая есть, так я если из одного места ее вызову - все работает как надо, когда из другого - вот тут то и начинается. Я остановил прогу в том месте, посмотрел что в курсоре, - там все ок, 38 записей и count to мне тоже 38 дает, а reccount() дает 1227, такое кол-во записей в другой открытой базе. я уже и селектом, и в reccount() указывал в кавычках имя курсора и потом номер рабочей области - 1227 и все. причем по другим номерам рабочих областей все ок, а тут - фигу. И что интересно, в set я не увидел, в какой по номеру рабочей области открыт мой курсор, я просто сделал select curTelz, а затем ?select() и получил 7. короче пришлось все на count to переделывать... в чем, интересно, загвоздка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2005, 15:40 |
|
||
|
reccount() непонятки
|
|||
|---|---|---|---|
|
#18+
Reccount() дает физическое количество записей, включая записи помеченные как удаленные и не обращая внимания на какие-либо наложенные на таблицу фильтры. А как именно ты подсчитывал COUNT() ты нигде не написал. В общем случае, COUNT возвращает количество записей удовлетворяющих некоторому условию. Условие может быть указано явно в самой команде подсчета записей, но могут существовать и неявные условия (SET FILTER, SET DELETED, INDEX ... FOR ... и т.п.) Кроме того, курсоры создаются в пределах одной DataSession. Если твоя форма имеет Private DataSession, то несколько открытых форм создадут несколько DataSession в каждой из которых будет свой курсор со своим количеством записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2005, 16:08 |
|
||
|
reccount() непонятки
|
|||
|---|---|---|---|
|
#18+
А ты не пробовал RECCOUNT([nWorkArea | cTableAlias]) вместо RECCOUNT() ? И еще может быть у тебя есть таймер который передергивает текущую область ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2005, 19:42 |
|
||
|
reccount() непонятки
|
|||
|---|---|---|---|
|
#18+
2ВладимирМ давал Count ALL ТО, а перед тем давал селект по алиясу, где и был тот курсор. Сам курсор создается из базы на лоаде, и в курсоре те данные что надо, то есть все честно, 38 записей, если верить BROWSE. И никаких условий для каунта нет, никаких фильтров и удалений оно запускается практически с одними и теми же условиями - но результат то есть, то нет. 2ГенГрум я в своей мессаге писал что пробывал и по рабочей области и по алиясу (наверное Вы не поняли), что как раз сильно меня и удивляло!!! А таймеров нету вообще никаких и нигде... я тут случаем (если представить себе, что случайность вообще существует!), забрел в ветку где было про глюки SQL Select'а. и вот что я заподозрил - там описан случай, когда создается курсор без условия NOFILTER, а у меня именно такой случай, и сказано, что в таком случае курсор физически создан НЕ БУДЕТ!!! Дык вот, реккаунт наверное подсчитывает кол-во записей какбы родителя! курсора-то нету - я ж еще упомянул, что SET не показывает в какой области открыт курсор!!! что он открыт показывает, но в какоей - области - нет, а для других открытых баз все показывает. странно другое - получается что курсор этот то создается физически, то не создается, при ПОЧТИ одинаковых условиях. разница в том, что в другом, неработающем, случае, реляции не такие как в первом.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2005, 10:45 |
|
||
|
reccount() непонятки
|
|||
|---|---|---|---|
|
#18+
Пока не приведешь код этого чуда, так и будем "переругиваться". Я тебе уже намекал, что на результат работы COUNT могут влиять неявные фильтры. Например, активный индекс с FOR-условием. Кроме того, функция SELECT() не сможет вернуть значения (точнее, вернет 0), если указанного алиаса не существует. Случай с NOFILTER в данном случае не при чем. Даже если результат запроса - это переоткрытая исходная таблица SELECT("newCursor") вернет номер рабочей области в которой она была переоткрыта Определить, чем же является полученный курсор можно используя функцию ?DBF("newCursor") Если получишь имя таблицы с расширением tmp - это "честная" временная таблица. Если же расширение DBF - это исходная таблица с наложенным фильтром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2005, 11:17 |
|
||
|
reccount() непонятки
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Случай с 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.04.2005, 20:00 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33021515&tid=1594396]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 322ms |

| 0 / 0 |
