powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ошибка в работе операции seek
9 сообщений из 9, страница 1 из 1
Ошибка в работе операции seek
    #38904852
deepstyle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим есть простая таблица 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
Ошибка в работе операции seek
    #38904868
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ошибка в работе операции seek
    #38904874
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
Ошибка в работе операции seek
    #38904909
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.
...
Рейтинг: 0 / 0
Ошибка в работе операции seek
    #38904916
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deepstyleТакой вариант годный?
Годный для чего? Цель данного кода какая?

добавь перед seek
Код: sql
1.
set order to year
...
Рейтинг: 0 / 0
Ошибка в работе операции seek
    #38904956
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
Ошибка в работе операции seek
    #38905463
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, препод намекает ТСу на конструкцию вида
Код: sql
1.
2.
3.
4.
5.
6.
set order to индекс-по-полю
seek for поле=12345
do while поле=12345
 <...>
 skip
enndo

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


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


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



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

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


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