powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / помогите исправить баги, при переходе по записям
8 сообщений из 8, страница 1 из 1
помогите исправить баги, при переходе по записям
    #36616075
Raddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уважаемые отцы фокспро, помогите новичку
при инициализации формы мы переходим к первой записи

к меня есть 2 кнопки, next и previous

кнопка next выглядит так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
IF !EOF()
   SKIP  1 

thisform.Text1.Value = mynewcur.naimen
thisform.oleboundcontrol1.ControlSource="mynewcur.pict"
thisform.oleboundcontrol1.Refresh
 
ELSE
 GO TOP
 
thisform.Text1.Value = mynewcur.naimen
thisform.oleboundcontrol1.ControlSource="mynewcur.pict"
thisform.oleboundcontrol1.Refresh
 
ENDIF

проблема в следующем: когда мы подходим к последней записи, мы попадаем в нулевую запись, и поле выглядит пустым, что логично. как пропустить эту нулевую запись?

кнопка previous выглядит так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
IF !BOF()
   SKIP - 1 

thisform.Text1.Value = mynewcur.naimen
thisform.oleboundcontrol1.ControlSource="mynewcur.pict"
thisform.oleboundcontrol1.Refresh


ELSE
 GO BOTTOM
 
thisform.Text1.Value = mynewcur.naimen
thisform.oleboundcontrol1.ControlSource="mynewcur.pict"
thisform.oleboundcontrol1.Refresh
 
ENDIF

проблема в следующем: по ней нужно кликнуть 2 раза, что бы перейти на последнюю запись.

поделитесь мыслями как это избежать
...
Рейтинг: 0 / 0
помогите исправить баги, при переходе по записям
    #36616107
GermanGM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Raddy, ошибка в том, что Вы не анализируете состояние BOF()/EOF() после SKIP
...
Рейтинг: 0 / 0
помогите исправить баги, при переходе по записям
    #36616173
Raddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
c next' ом разобрался

а вот с previous' ом все сложно
рассуждения таковы:
1) мы находимся на 1ой записи при инициализации формы
2) при клике проверяем: если мы не на первой записи (а мы именно на первой) то переходим к else, go bottom и заполняем текстовое поле данными из последней записи (но при первом клике данные остаются из 1ой записи)
...
Рейтинг: 0 / 0
помогите исправить баги, при переходе по записям
    #36616197
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анализ надо делать как ДО, так и ПОСЛЕ перемещения указателя записи. Вне зависимости от того, вверх или вниз движетесь

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
* Next

if ! EOF()
    skip  1 
endif

if ! EOF()
   ...
else
   go top
   ...
endif


* Prev

if ! BOF()
    skip - 1 
endif

if ! BOF()
   ...
else
   go bottom
   ...
endif
...
Рейтинг: 0 / 0
помогите исправить баги, при переходе по записям
    #36616228
Raddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ
Спасибо огромное

С EOF(), все логично
Но не могу понять логики BOF()

BOF( ) - Определяет, установлен ли указатель записи в начале таблицы.

идет же проверка: если мы не на 1ой записи(а мы ведь на первой при инициализации формы), почему сразу не переходит к else:

Код: plaintext
1.
2.
3.
...
ELSE
 GO BOTTOM
...

подскажите где я ошибаюсь
...
Рейтинг: 0 / 0
помогите исправить баги, при переходе по записям
    #36616237
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

top и bottom не надо местами поменять?
...
Рейтинг: 0 / 0
помогите исправить баги, при переходе по записям
    #36616781
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RaddyС EOF(), все логично
Но не могу понять логики BOF()

Проще сделать тестовые примеры

Код: plaintext
1.
2.
3.
4.
5.
6.
Create Cursor test (f1 i)
Append Blank
Go top
?Bof()   && вернет .F.
skip - 1 
?Bof()   && вернет .T.

Т.е. логика работы BOF() точно такая же, что и у EOF(). Эти функции возвращают .T. не тогда, когда указатель записи находится на первой/последней записях, а тогда, когда предпринимается попытка переместить указатель записи за пределы таблицы.

Просто при перемещении указателя записи за пределы таблицы "вниз" есть еще дополнительная фиктивная запись. А при перемещении за пределы таблицы "вверх" такой записи нет и указатель просто остается на первой записи.
...
Рейтинг: 0 / 0
помогите исправить баги, при переходе по записям
    #36616785
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirВладимирМ,

top и bottom не надо местами поменять?
Вопрос не ко мне, а к автору темы. Насколько я понимаю, он хочет организовать движение "по кругу". Достигая первой записи - переход к последней и продолжаем движение вверх. Достигая последней записи - перходим к первой и продолжаем движение вниз.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / помогите исправить баги, при переходе по записям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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