Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / False / 12 сообщений из 12, страница 1 из 1
06.02.2007, 14:55
    #34309572
DJ ++
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
False
Есть таблитца ф1.Как можно после 100(строк) ф1.а =F до конца таблицы.
...
Рейтинг: 0 / 0
06.02.2007, 14:59
    #34309592
False
DJ ++Есть таблитца ф1.Как можно после 100(строк) ф1.а =F до конца таблицы.
Например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select f1
goto  100 
do while !eof()
  select f1
  replace f1.a with .f.
  skip  1 
enddo
...
Рейтинг: 0 / 0
06.02.2007, 15:04
    #34309605
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
False
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE CURSOR test (f1 l)

INSERT INTO test (f1) VALUES (.t.)
INSERT INTO test (f1) VALUES (.t.)
INSERT INTO test (f1) VALUES (.t.)
INSERT INTO test (f1) VALUES (.t.)

replace f1 WITH .f. FOR RECNO() >  2 

BROWSE 
...
Рейтинг: 0 / 0
06.02.2007, 18:49
    #34310462
BMJ
BMJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
False
UPDATE test SET f1=.f. WHERE RECNO()>100
мне кажется так короче.
...
Рейтинг: 0 / 0
07.02.2007, 07:43
    #34311016
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
False
BMJUPDATE test SET f1=.f. WHERE RECNO()>100
мне кажется так короче.
А уверены, что SQL UPDATE правильно будет понимать RECNO() "классического" FoxPro?
С уважением, Алексей.
...
Рейтинг: 0 / 0
07.02.2007, 07:58
    #34311033
Maltsev Max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
False
Aleksey-K BMJUPDATE test SET f1=.f. WHERE RECNO()>100
мне кажется так короче.
А уверены, что SQL UPDATE правильно будет понимать RECNO() "классического" FoxPro?
С уважением, Алексей.

А почему бы и нет ?!?
RECNO() вполне нормально работает в SQL-командах, где используется одна таблица.
Главное параметры в RecNo() не передавать ...

Например в команде:

Код: plaintext
1.
2.
Select Test.*, RecNo() From Test;
 Join Test1 on Test.id=Test1.id
RecNo() Будет отображать номер строки из ф. Test

А Вот про команду
Код: plaintext
1.
2.
Select Test.*, RecNo() From Test, Test1;
Where Test.id=Test1.id
ничего сказать не могу ...
Здесь могут быть сомнения ...
...
Рейтинг: 0 / 0
07.02.2007, 08:01
    #34311034
Maltsev Max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
False
Добавлю:

Это касается только Фоксового SQL-диалекта ...
...
Рейтинг: 0 / 0
08.02.2007, 00:30
    #34314352
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
False
Пометьте несколько записей как удаленные, добавьте настройку SET DELETED ON и ЧТО Вы получите при анализе на Recno()?

Кроме того, что подразумевается под термином "первые 100 записей"? В порядке их физического следования? В порядке главного индекса? Фильтры учитывать?

Единственное, полностью корректное решение - это "тупой" перебор "первых 100 записей". Чтобы под этим ни подразумевалось. ПОТОМ можно сделать REPLACE. UPDATE-SQL, в общем случае, будет заведомо не корректен, поскольку для команд SQL такого понятия как "первая", "последующая" записи просто не сущесствует.

Примерный код, в общем случае , будет выглядеть так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select MyTab
GO TOP
LOCAL lnCount
lnCount =  0 
SCAN WHILE m.lnCount< 100 
	m.lnCount = m.lnCount +  1 
ENDDO
REPLACE REST f1 WITH .F.

Тут даже нельзя использовать SKIP 100, поскольку заранее неизвестно а есть ли 100 доступных записей.
...
Рейтинг: 0 / 0
08.02.2007, 01:52
    #34314405
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
False
ВладимирМПримерный код, в общем случае , будет выглядеть так

Я б пожалуй добавил
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select MyTab
GO TOP
LOCAL lnCount
lnCount =  0 
SCAN WHILE m.lnCount< 100 
	m.lnCount = m.lnCount +  1 
ENDDO
IF !m.lnCount< 100  AND !EOF()
	REPLACE REST f1 WITH .F.
ENDIF
...
Рейтинг: 0 / 0
08.02.2007, 02:51
    #34314426
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
False
Urri ВладимирМПримерный код, в общем случае , будет выглядеть так

Я б пожалуй добавил
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select MyTab
GO TOP
LOCAL lnCount
lnCount =  0 
SCAN WHILE m.lnCount< 100 
	m.lnCount = m.lnCount +  1 
ENDDO
IF !m.lnCount< 100  AND !EOF()
	REPLACE REST f1 WITH .F.
ENDIF

Это лишнее. Тут есть некоторые неявные вещи, которые Вы пропустили:

SCAN WHILE - выполняется до тех пор, пока не будет достугнут конец файла или условие не примет значение .F.

При этом, указатель записи в таблице по завершении цикла будет установлен либо в положение EOF()=.T. - если это стало причиной завершения цикла, либо на первую запись у которой указанное условие примет значение .F.

Т.е. по завершении SCAN WHILE указатель окажется либо на 100 записи, либо в положении EOF()=.T.

REPLACE REST - означает, что замену надо делать от текущей записи и до конца файла. При этом, если указатель записи установлен в положение EOF()=.T., то команда REPLCAE ошибки НЕ вызовет.

Т.е. REPLACE REST как раз и обновит все записи от текущей (т.е. 100, после SCAN WHILE) и до конца файла. Если указатель записи в положении EOF()=.T., то ничего не будет обновлено без сообщений об ошибках.
...
Рейтинг: 0 / 0
08.02.2007, 04:17
    #34314449
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
False
Наверное, это и правда лишнее.
Это просто мой стиль, делать лишнее "на всякий случай".
Неявные вещи я очень часто просто не помню. А быстродействие от такого добавления, пожалуй, нисколько не пострадает.
...
Рейтинг: 0 / 0
08.02.2007, 19:38
    #34317307
BMJ
BMJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
False
Все упрёки признаю!!
Но, я отвечал на конкретный вопрос про первые 100 записей без вариантов.
Спасибо за критику.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / False / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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