Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Состояние таблицы / 18 сообщений из 18, страница 1 из 1
17.01.2006, 11:09
    #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
17.01.2006, 12:05
    #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
17.01.2006, 12:10
    #33486836
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние таблицы
в пустой табле позиционировать ничего не нужно
просто проверять нужно так

if !bof() and !eof()
значит стоим на записи
что-то делаем
endif
...
Рейтинг: 0 / 0
17.01.2006, 13:15
    #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
17.01.2006, 13:31
    #33487052
Burn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние таблицы
>мне же нужно перейти в EOF() = .T. and BOF()= .F.
А нахрена это нужно?

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

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

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


и вообще вначале определить уж какой алиаз дергать
а не тот, что грид дернул
...
Рейтинг: 0 / 0
17.01.2006, 20:04
    #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
17.01.2006, 20:28
    #33488242
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние таблицы
да, странно, что это за класс
такой

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

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

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

какие проблемы???
...
Рейтинг: 0 / 0
17.01.2006, 20:36
    #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
17.01.2006, 20:41
    #33488254
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние таблицы
проверил на курсоре и на таблице

? !bof() and !eof()

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

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

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

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

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

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

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

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

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

seek ""

Нет этому аналогов?
...
Рейтинг: 0 / 0
17.01.2006, 23:23
    #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
17.01.2006, 23:39
    #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
20.01.2006, 01:11
    #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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Состояние таблицы / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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