powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Состояние таблицы
18 сообщений из 18, страница 1 из 1
Состояние таблицы
    #33486657
sea.s2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объясните в каком состоянии находится чистая таблица

EOF сразу = .T.
BOF сразу = .F.

{делаем
skip -1
EOF = .T.
BOF = T.}

IF EOF()
SKIP -1 &&< - В одном случае вызовет ошибку в другом нет
IF BOF()
thisform.AddNew()
ENDIF
ENDIF

Как спозиционироваться в это начальное состояние
EOF = .T.
BOF = .F.
...
Рейтинг: 0 / 0
Состояние таблицы
    #33486819
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй
Код: plaintext
Go Top
Хотя понять не могу зачем тебе это ...

Не проще было бы:
Код: plaintext
1.
2.
3.
4.
5.
6.
If Eof() && За последней строкой
  Go Bottom && Если надо встать на последнюю, Go Top  Если на первую
  If Eof()  && Файл пуст
    thisform.AddNew()
  EndIf
EndIf
...
Рейтинг: 0 / 0
Состояние таблицы
    #33486836
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в пустой табле позиционировать ничего не нужно
просто проверять нужно так

if !bof() and !eof()
значит стоим на записи
что-то делаем
endif
...
Рейтинг: 0 / 0
Состояние таблицы
    #33486991
sea.s2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В том то и дело что всякие go top, bottom не помогают ну сами попробуйте

Чистая table

Заходите сразу в command пишем

MessageBox(EOF()) && <- Выдаст .T.
MessageBox(BOF()) && <- Выдаст .F.

потом как вы советуете

if EOF()
*go top or bottom
приведет к состоянию && EOF() = .T. and BOF()= .T.

мне же нужно перейти в EOF() = .T. and BOF()= .F.
или EOF() = .F. and BOF()= .T.
...
Рейтинг: 0 / 0
Состояние таблицы
    #33487052
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>мне же нужно перейти в EOF() = .T. and BOF()= .F.
А нахрена это нужно?

Такой ситуаций наблюдается сразу после открытия таблицы или если открыть ее BROWSE-ом
...
Рейтинг: 0 / 0
Состояние таблицы
    #33487433
valeryka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажи для чего, скажу как
...
Рейтинг: 0 / 0
Состояние таблицы
    #33488188
sea.s2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну такая ситуация возможна когда есть грид с привязанной в buildere таблицей
у меня к нему привязан курсор и такая ситуация не наблюдается

Идет проверка в Active форме в 5 формах где norm grid с Alias она проходит при любых состояниях в этой проблема

IF EOF()
SKIP -1 &&<- На этой строчке и вылазит что достигнуто начало
IF BOF()
MESSAGEBOX("lala")
thisform.AddNew()
ENDIF
ENDIF
...
Рейтинг: 0 / 0
Состояние таблицы
    #33488207
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чего так не катит???
if !bof() and !eof()
.....
else
MESSAGEBOX("lala")
thisform.AddNew()
endif


и вообще вначале определить уж какой алиаз дергать
а не тот, что грид дернул
...
Рейтинг: 0 / 0
Состояние таблицы
    #33488221
sea.s2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тяжко с вами ну стоит эта проверка в activate в классе формы
с aliasami нет проблем дергает всегда то что надо не охота переписывать класс

повторюсь проблема только когда gridu даем cursor

ее решает

например постановка

seek "" &&<- тогда вернет на состояние EOF()=.T. BOF =.F.

IF EOF()
SKIP -1 &&<- Предупреждение не вылезет
IF BOF()
MESSAGEBOX("lala")
thisform.AddNew()
ENDIF
ENDIF

Но я нехочу делать seek
Можно ли как то с позиционирровать подругому?
...
Рейтинг: 0 / 0
Состояние таблицы
    #33488242
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, странно, что это за класс
такой

нафиг там чего дергать
нафиг скакать вообще куда-то
и чем отличается
таблица от курсора

накрути там эту проверку курсор это или табла
ну добавь там кусок
if file(dbf(имя источника))
это для таблицы
.....
else
это для курсора
....
endif

и напиши для курсора одно
а для таблы другое

какие проблемы???
...
Рейтинг: 0 / 0
Состояние таблицы
    #33488245
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, тебе уже намекнули. Используй GO TOP и GO BOTTOM

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
* Чтобы получить EOF()=.T.
GO BOTTOM	&& встаем на последнюю запись
IF EOF() = .F.	&& если это не конец файла, делаем еще шаг
	SKIP
ENDIF
* Здесь получим EOF()=.T.
?EOF()

SKIP -1 вызовет ошибку, если ты попытаешся перейти на запись до текущей в случае BOF() = .T.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
* Чтобы получить сообщение об ошибке
GO TOP	&& встаем на первую запись
IF BOF() = .F.	&& если это не начало файла, делаем еще шаг
	SKIP - 1 
ENDIF
* Здесь получим BOF()=.T.
?BOF()
* и следующая команда даст ошибку
SKIP - 1 
...
Рейтинг: 0 / 0
Состояние таблицы
    #33488254
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проверил на курсоре и на таблице

? !bof() and !eof()

работает нормально и одинаково
на пустых .f.
если есть хоть одна запись .t.

зачем прыгать-то

????
...
Рейтинг: 0 / 0
Состояние таблицы
    #33488255
sea.s2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lol
Я же сказал что go top и go bottom
переводят в состояние EOF()= .T. BOF()= .T.

и после итого skip
skip -1

вызывают ошибку
я же прошу переход в состояние EOF()= .T. BOF()= .F.
...
Рейтинг: 0 / 0
Состояние таблицы
    #33488259
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оооооооооооооооооооооооооо

ну не знаю
а зачем переводить та????

я и так вижу есть там запись или нет
я и объекту могу сказать чего делать
зачем мне источник дергать????

зачем его дергать то????

не проще код подправить???
...
Рейтинг: 0 / 0
Состояние таблицы
    #33488263
sea.s2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так скажите как туда переходит

seek ""

Нет этому аналогов?
...
Рейтинг: 0 / 0
Состояние таблицы
    #33488355
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sea.s2Так скажите как туда переходит

seek ""

Нет этому аналогов?
Если в таблице физически нет ни одной записи (Reccount()=0), то аналогов этому нет.

Если же есть хотя бы одна запись, пусть даже она не попадает под условие активного фильтра, то это эквивалентно команде GO TOP. Переход на ПЕРВУЮ запись, поскольку ЛЮБАЯ символьная строка при сравнинии с пустой строкой даст .T.

Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
?"=========== Reccount()=0"
CREATE CURSOR test (f1 C( 1 ))
INDEX ON f1 TAG f1

SEEK ""
?"SEEK"
?"eof()=",eof(),"bof()=",bof(),"recno()=",recno(),"reccount()=",reccount()

GO TOP
?"GO TOP"
?"eof()=",eof(),"bof()=",bof(),"recno()=",recno(),"reccount()=",reccount()

?"=========== Reccount()>0"
INSERT INTO test (f1) VALUES ('2')
INSERT INTO test (f1) VALUES ('1')

SEEK ""
?"SEEK"
?"eof()=",eof(),"bof()=",bof(),"recno()=",recno(),"reccount()=",reccount()

GO TOP
?"GO TOP"
?"eof()=",eof(),"bof()=",bof(),"recno()=",recno(),"reccount()=",reccount()

?"=========== Reccount()>0, Filter"
DELETE ALL
SET DELETED ON

SEEK ""
?"SEEK"
?"eof()=",eof(),"bof()=",bof(),"recno()=",recno(),"reccount()=",reccount()

GO TOP
?"GO TOP"
?"eof()=",eof(),"bof()=",bof(),"recno()=",recno(),"reccount()=",reccount()

Команда SKIP -1 вызовет ошибку если BOF()=.T. Соответственно, нужна дополнительная проверка. Собственно, как это сделать написал уже в самом первом ответе Maltsev Max . Повторю еще раз:

Код: plaintext
1.
2.
3.
4.
5.
6.
If Eof() && За последней строкой
	Go Bottom && Если надо встать на последнюю, Go Top  Если на первую
	If Eof()  && Файл пуст
		thisform.AddNew()
	EndIf
EndIf
...
Рейтинг: 0 / 0
Состояние таблицы
    #33488370
sea.s2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ясно придется полльзовать тогда такое

IF RECCOUNT() = 0
IF EOF() AND !BOF()
SKIP -1
ENDIF
MESSAGEBOX(FILEISEMPTY_LOC, MB_ICONINFORMATION, ;
REGISTER_LOC)
thisform.AddNew()
ENDIF

Big thx за мучения
...
Рейтинг: 0 / 0
Состояние таблицы
    #33493140
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi sea.s2!

Помимо EOF() и BOF() последи за RECNO() - это должно навести тебя на
понимание того ЧТО же такое на самом деле EOF() и чем он кардинально
отличается от BOF(). А вообще у тебя просто некорректный изначальный код -
перед выполнением SKIP -1 нужно проверять не EOF() а BOF()!!! Это перед SKIP
1 надо проверять на EOF() :)
Также я бы не надеялся на то что нужная таблица всегда является текущей, и
не поленился прописать явно алиас того курсора который "проверяется"

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Состояние таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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