Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ошибка в работе операции seek / 9 сообщений из 9, страница 1 из 1
14.03.2015, 13:25
    #38904852
deepstyle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в работе операции seek
Допустим есть простая таблица FILM с полями ID, TITLE, YEAR, DIRECTOR.

Необходимо выбрать все записи инструкцией seek из таблицы FILM, где YEAR>=2013. Кол-во записей удовлетворяющих условию >= 5.

Моё решение:

Код: sql
1.
2.
3.
4.
5.
6.
use FILM again alias FILM  

&& Index on Year to Year.CDX
 
seek(Year>=2013)
    ? 'id_film', id_film, 'title', title, 'year', year



При первом запуске программы составляем индекс командой Index on Year to Year.CDX.

Далее при выполнении программы возникает ошибка "Data type mismatch". И foxpro указывает на строку с seek.
...
Рейтинг: 0 / 0
14.03.2015, 14:18
    #38904868
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в работе операции seek
seek() не выбирает, он ищет в индексе (в текущем если явно не задан) первую запись удавлетворяющую заданному выражению
Код: sql
1.
2.
3.
sele FILM
set order to Year
seek(2013)


или
Код: sql
1.
seek 2013 in FILM order Year


если 2013 нет, то в зависимости от настройки SET NEAR встанет на ближайшее большее или в конец.

чтобы выбрать несколько записей по условию используй SELECT или SCAN.
...
Рейтинг: 0 / 0
14.03.2015, 14:31
    #38904874
Ошибка в работе операции seek
deepstyleДопустим есть простая таблица FILM с полями ID, TITLE, YEAR, DIRECTOR.

Необходимо выбрать все записи инструкцией seekУже интересно. Особенно с учетом того, что есть команда seek и есть функция seek и обе они никогда не искали ВСЕ записи. из таблицы FILM, где YEAR>=2013. Кол-во записей удовлетворяющих условию >= 5.

Моё решение:

Код: sql
1.
2.
3.
4.
5.
6.
use FILM again alias FILM  

&& Index on Year to Year.CDX
 
seek(Year>=2013)
    ? 'id_film', id_film, 'title', title, 'year', year



При первом запуске программы составляем индекс командой Index on Year to Year.CDX.

Далее при выполнении программы возникает ошибка "Data type mismatch". И foxpro указывает на строку с seek.И на этом основании сделан вывод об ошибке в "операции seek"? Хотя сообщение говорит о неправильном типе передаваемого, в данном случае функции seek, параметра? Справку по этой функции читали? Примеры смотрели?
Теперь про последнюю строку вашего кода. Где вы видели, чтобы команда "?" выводила значения ВСЕХ записей? Может таки только текущей?
Короче, объясните что в конечном итоге надо получить? Вам нужна выборка записей по указанному условию для дальнейших действий? Если я угадал, то вот простейший вариант решения:
Код: sql
1.
2.
select ID, TITLE, YEAR from FILM where Year>=2013
browse && сия строка чисто для просмотра результата и в реальном рабочем коде должна быть закоментирована/удалена
...
Рейтинг: 0 / 0
14.03.2015, 17:07
    #38904909
deepstyle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в работе операции seek
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
use FILM  

&& Index on Year to Year.CDX
&& INDEX Year
Y = 2014
 
do while Y>=2013
	seek y
	SCAN WHILE YEAR=Y    
    	? 'id_film', id_film, 'title', title, 'year', year
	ENDSCAN
	Y = Y - 1
enddo 
 



Такой вариант годный? Понимаю, что проще и понятнее пропустить данные через SELECT.
...
Рейтинг: 0 / 0
14.03.2015, 17:19
    #38904916
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в работе операции seek
deepstyleТакой вариант годный?
Годный для чего? Цель данного кода какая?

добавь перед seek
Код: sql
1.
set order to year
...
Рейтинг: 0 / 0
14.03.2015, 19:45
    #38904956
Ошибка в работе операции seek
deepstyle
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
use FILM  

&& Index on Year to Year.CDX
&& INDEX Year
Y = 2014
 
do while Y>=2013
	seek y
	SCAN WHILE YEAR=Y    
    	? 'id_film', id_film, 'title', title, 'year', year
	ENDSCAN
	Y = Y - 1
enddo 
 



Такой вариант годный? Понимаю, что проще и понятнее пропустить данные через SELECT.Тоже интересует для чего этот код годный. Поражает количество бесполезных и бессмысленных действий. Совершенно непонятно зачем в этом коде seek, если все можно сделать и без него.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
use FILM  

&& Index on Year to Year.CDX
&& INDEX Year
 
SCAN for Year>=2013   
  	? 'id_film', id_film, 'title', title, 'year', year
ENDSCAN
...
Рейтинг: 0 / 0
16.03.2015, 04:54
    #38905463
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в работе операции seek
Может, препод намекает ТСу на конструкцию вида
Код: sql
1.
2.
3.
4.
5.
6.
set order to индекс-по-полю
seek for поле=12345
do while поле=12345
 <...>
 skip
enndo

А вы тут его сканами грузите :)
...
Рейтинг: 0 / 0
16.03.2015, 05:27
    #38905466
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в работе операции seek
Код: sql
1.
2.
3.
do while поле=12345
...
skip


это
Код: sql
1.
scan while ...
...
Рейтинг: 0 / 0
16.03.2015, 08:48
    #38905493
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в работе операции seek
Dima T
Код: sql
1.
2.
3.
do while поле=12345
...
skip


это
Код: sql
1.
scan while ...



ДимаТ в своих "открытиях" неистощим.

Из хелпа:
DO WHILE ... выполняет группу команд ...
SCAN ... для каждой записи ... выполняет блок команд ...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ошибка в работе операции seek / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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