:: Visual Foxpro, Foxpro for DOS
Set Filter и Copy Next ..
Равиль

Сообщений: 6547
Откуда: Уфа
Дата регистрации: 01.08.2003
Просто еще одна иллюстрация "ошибки" работы Set Filter без смещения указателя:

Set Safety Off
Close All
Create Cursor tTest (Id i)
For m.i=1 To 10
Insert Into tTest (Id) Values (m.i)
Endfor
Go Top
Set Filter To Id > 5
*!* Go Top && Если передернуть указатель после установки фильтра, то понятно проблемы нет
Copy Next 3 To tTest2 && ! попадает текущая запись (Id=1)
*!* Copy To tTest2 && Если без опции "Next" тоже проблемы нет, указатель смещается сам
Use tTest2
Browse Last

То есть, Copy Next пляшет от текущей записи и всегда включает ее в выгрузку независимо от условий фильтра
а Copy без Next перед выполнением перемещает в начало, происходит смещение указателя и все выгружается правильно.


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
Sawradym

Сообщений: 2244
Откуда: Винница
Дата регистрации: 15.05.2007
Это не ошибка, скорее это неправильное понимание работы фильтра.
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Дак вроде ж в документации по FPD даже было написано, что фильтр по команде SET FILTER TO <условие> становится активным после перемещения по таблице указателя записи (неважно куда переходить).
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
Равиль

Сообщений: 6547
Откуда: Уфа
Дата регистрации: 01.08.2003
Sawradym
Это не ошибка, скорее это неправильное понимание работы фильтра.

Не понимаю, где непонимание ?

Simple777
Дак вроде ж в документации по FPD даже было написано, что фильтр по команде SET FILTER TO <условие> становится активным после перемещения по таблице указателя записи (неважно куда переходить).

Я показал лишь особенность работы "Copy Next .." : в отличие от просто "Copy .." не смещает указатель с текущей записи и она попадает в выгрузку.

Хорошо, вот еще одно отличие работы "Copy Next", теперь уже без фильтра, но с "For .." условием :

Set Safety Off
Close All
Create Cursor tTest (Id i)
For m.i=1 To 10
Insert Into tTest (Id) Values (m.i)
Endfor
Go Top
Copy Next 3 To tTest2 For Id > 5 && ! Еще одна особенность работы Copy Next
Use tTest2
*!* ? _Tally
Browse Last

То есть "Copy Next .." в отличие от просто "Copy .." шагает последовательно, а не по "For .." условию, но при этом проверяет запись на соответствие.


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Может это про особенность NEXT ?
GO TOP
COPY NEXT 10 TO ... && копируются записи 1..10. Внимание! Указатель в файле остается на записи RECNO()=10, поэтому следующей итеррацией:
? RECNO() && 10
COPY NEXT 10 TO ... && копируются записи 10..19. А интуитивно ожидается, что копируются записи 11..20.
? RECNO() && 19
...
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
copy next утратило актуальность лет так 20 назад, а то и больше


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Когда уже SELECT-SQL утратит актуальность? В будущем запросы будут формироваться голосовыми командами. Там, типа: "Ну-ка, любезнейший, выбери что-нибудь эдакое".
Ну, понятное дело, в ответ последует: Запрос требует уточнения. Приступить к уточнению?
Если ответить "да", то тогда уже начнется уточнение:
- Откуда выбрать? Что выбрать? По какому условию? Куда сохранить выбранное? И т.п. [sm128]
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Никогда запросы не будут кодироваться голосом на нативном уровне. Всегда будут какие-то низовые маловразумительные процессорные операторы, типа ассемблерных. Ну, пока искуственные мозги не научатся клонировать, и то, их обучать надо... Рабов может проще разводить, они и голос понимают через пяток лет, и машину сумеют водить через 15, электричества не надо, обслуживания не надо, самообеспечиваются при желании, саморазмножаются. Удобно, вроде. Вроде никакого подвоха...
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> copy next утратило актуальность лет так 20 назад, а то и больше
Куда это оно делось? например, надо сделать файл для Экселя на 100 тыс записей. Но не лезет в эксель больше 65к записей, вот и пишу цикл:
DO WHILE !EOF()
COPY NEXT 50000 TO (файл_эксель)
SKIP
ENDDO
А по современному как надо?



Исправлено 1 раз(а). Последнее : of63, 14.01.17 12:47
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
of63
А по современному как надо?
В современный эксель (условно "современный" - хватит 2007-й версии) "лезет" мильён строк. В dbf (и в "курсор") при всём желании не запихнуть больше миллиона записей.
Так что претензия мимо кассы
Кстати, код не рабочий приведен... Тама скипать эти самые 50К и надоть.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> Кстати, код не рабочий приведен... Тама скипать эти самые 50К и надоть.
скипать50к точно не надо, пример рабочий. SKIP нужен только 1

да, невнятно сказал может на каждые 50к записей в сроку команды COPY TO включается уникальное имя, типа: myFile1.xls, myFile2.xls...


> В современный эксель (условно "современный" - хватит 2007-й версии) "лезет" мильён строк.
да лезет, (в старый эксель не лезет в принципе). В новый - не лезет при работе в невидимом режиме, я уже писал об этом трабле. Сделаю пример попозже. (надеюсь это так и есть )



Исправлено 1 раз(а). Последнее : of63, 14.01.17 16:56
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Igor Korolyov
В dbf (и в "курсор") при всём желании не запихнуть больше миллиона записей.

Как же так? :al:
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Да, чой-то не то посчитал. Биллион это ж миллиард


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Почему-то теперь все работает в экселе с >64к строк, и элементов в Range...

Добавил 2017.03: В тестовом примере работает, а в реальном приложении - так и нет
* Оказалось, что даже в новом Excel (ver>=12) нельзя адресовать строку >65535 !Хотя в видимом режиме, в Alt-F11, - адресуется... И тестовый пример фоксовый работает... m.l=65536, m.c=1
WITH m.parExcel.Cells(ABS(m.l),m.c) && ячейка (l,c) к заполнению - Error 1426 - Ошибка OLE, код 0x800a03ec: Неизвестный код состояния COM.



Исправлено 1 раз(а). Последнее : of63, 06.03.17 18:17
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
Qv_1

Сообщений: 201
Дата регистрации: 14.02.2007
Помогает экспорт в csv с последующим открытием Экселем.
Ratings: 0 negative/0 positive
Re: Set Filter и Copy Next ..
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Да, бывает и в CSV, но в XLS можно покрасить, форматировать, заголовки неперемещяемые...
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 34 (Гостей: 34)

© 2000-2024 Fox Club 
Яндекс.Метрика