Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / посоветуйте, как найти невнесенные номера / 5 сообщений из 5, страница 1 из 1
16.03.2005, 12:10
    #32962883
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посоветуйте, как найти невнесенные номера
есть база, в которую вносятся накладные, их номера, №склада и тп

имея мин и макс номера (например от 1 до 1000) нужно в курсор выбрать номера, которых в базе нет

я раньше делал цикл от 1 до 1000 и которых номеров в базе не находил сразу выводил на печать, но это было под ФПД и неудобно, хочу в курсор, чтобы мона было посмотреть,и , при желании, наЧепятать.

можно создать курсор и занести в него такое колво записей, как надо (1000 в данном примере) и сканом пройти удаляя найденные.
можно создать пустой курсор и в цикле от 1 до 1000 если номер не найден добавлять запись в курсор.
это все 1000 поисков или в реалии больше поисков.
можно сортануть в один курсор и поехать по нему циклом, обойдясь без поиска, просто проверять соотв. переменной цикла с номером в курсоре, если не совпадалово, скип не делать, пока не совпадет, а в это время добавлять в др курсор значение переменной цикла

что еще посоветуете? мож какой SQL-Select?
...
Рейтинг: 0 / 0
16.03.2005, 12:23
    #32962950
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посоветуйте, как найти невнесенные номера
Ну, что-то подобное

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE CURSOR test (ID i, cID c ( 5 ))

FOR i =  1  TO  2 
	INSERT INTO test (ID, cID) VALUES (i, TRANSFORM(i))
ENDFOR

FOR i =  4  TO  4 
	INSERT INTO test (ID, cID) VALUES (i, TRANSFORM(i))
ENDFOR

FOR i =  7  TO  10 
	INSERT INTO test (ID, cID) VALUES (i, TRANSFORM(i))
ENDFOR

INDEX ON id TAG id

SELECT * FROM test t1 WHERE NOT INDEXSEEK(id +  1 ,.f.,'test')

в итоге получаем курсор в кот. перечислены все ID у кот. не найдены следующие за ними значения.
...
Рейтинг: 0 / 0
16.03.2005, 12:24
    #32962958
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посоветуйте, как найти невнесенные номера
Можно и с SQL. Создается курсор с номерами от 1 до 1000 и потом делается запрос на поиск номеров в этом курсоре которых нет в рабочей таблице. Обычный подзапрос что-то вроде

Код: plaintext
SELECT id FROM MyCursor WHERE id NOT IN (SELECT id FROM MyTab)

Правда, если это делается с целью использования ранее удаленных номеров, то следует отказаться от этой идеи, как заведомо неприемлимой по многим причинам.
...
Рейтинг: 0 / 0
18.03.2005, 13:56
    #32968207
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посоветуйте, как найти невнесенные номера
я так решил (напр. beg_number=1 и end_number=1000)
думаю, что по времени исполнения это будет самый быстрый способ, ведь нет поиска по всей базе или ее части вообще.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
   SELECT skladN, NomNakl FROM nakldanye INTO CURSOR curFreeNums; 
          WHERE recno()= 0  readwrite && для создания пустого курсора
   SELECT skladN, NomNakl FROM nakldanye INTO CURSOR curBusyNums; 
          WHERE NomNakl>=beg_number AND NomNakl<=end_number;
          ORDER BY NomNakl 
   GO TOP 
   FOR nNakl=beg_number TO End_Number
       IF  NOT EOF() AND NomNakl =nNakl
               SKIP 
          ELSE 
               INSERT INTO curFreeNums (sklN, NomNakl) VALUES (skladN, nNakl)
       ENDIF 
   ENDFOR
   SELECT curBusyNums 
   USE
...
Рейтинг: 0 / 0
18.03.2005, 14:31
    #32968319
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посоветуйте, как найти невнесенные номера
GO TOP
FOR nNakl=beg_number TO End_Number
IF NOT EOF() AND NomNakl =nNakl
SKIP
ELSE
INSERT INTO curFreeNums (sklN, NomNakl) VALUES (skladN, nNakl)
ENDIF
ENDFOR


nNakl=beg_number
scan
do while nNakl#NomNakl
INSERT INTO curFreeNums (sklN, NomNakl) VALUES (skladN, nNakl)
nNakl=nNakl+1
enddo
endscan

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


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