03.12.2012, 15:10 | #1 |
Участник
|
Прошу опять помощи разобраться с глюком.
Сначала приведу фрагмент кода: Код: File.SETRANGE(Path,Путь); File.SETRANGE("Is a file",TRUE); File.SETRANGE(Name,ИмяФайла); FileCount := 0; IF File.FINDSET THEN REPEAT Процедура обработки FileCount += 1; UNTIL File.NEXT = 0; IF FileCount = 0 THEN Когда я с помощью трех SETRANGE накладываю на нее фильтр, то FINDSET выдыет пустой набор, т.е. ни одной записи, типа не найдено (и, соответственно, никакая Порцедура обработки" не запускается). Когда же я те же самые фильтры накладываю на сию таблицу вручную (создав по F3 в формах новую форму для нее), тогда одна запись мне показывается. В чем тут фокус? Почему программа не "видит" запись?! Прим.: работаем на Nav 5.0 SP1, MS SQL Server 2008 R2 Еще одно замечание: до того, как перешли на SQL, проблем не было, всё работало нормально |
|
03.12.2012, 15:21 | #2 |
Участник
|
Если запускаете эту штуку в периодическом задании то нужно делать так.
File.SETRANGE(Path,ПутьКуданибудьвдругоеместо); File.FIND('-'); File.SETRANGE(Path,Путь); File.SETRANGE("Is a file",TRUE); File.SETRANGE(Name,ИмяФайла);
__________________
Want to believe... |
|
03.12.2012, 16:20 | #3 |
Участник
|
Цитата:
Я написала так: Код: File.RESET; File.SETRANGE(Path,ПутьКуданибудьвдругоеместо); File.FINDFIRST; File.SETRANGE(Path,Путь); File.SETRANGE("Is a file",TRUE); File.SETRANGE(Name,ИмяФайла); IF FINDSET THEN |
|
03.12.2012, 16:24 | #4 |
Участник
|
желательно еще reset добавить
File.RESET; и вместо SETRANGE попробуйте SETFILTER File.SETFILTER(Path,ПутьКуданибудьвдругоеместо);
__________________
Want to believe... |
|
03.12.2012, 16:26 | #5 |
Участник
|
RESET у меня есть (я поправила предыдущее сообщение)
|
|
03.12.2012, 17:17 | #6 |
Участник
|
Kadawrik, а вы когда накладываете фильтр на Path у вас в конце пути есть обратный слэш(\) ?
Просто первое что напрашивается, это либо неправильный фильтр на путь, либо на имя файла. Имя файла, на сколько я помню, должно быть без полного пути, но с расширением. |
|
03.12.2012, 17:23 | #7 |
Участник
|
Цитата:
Фильтр для Path и имени файла берутся из полей определенной таблицы. Так что тут все правильно. Когда те же самые значения я копирую в строку вильтря для формы, то всё фильтруется правильно. Заметтила еще одну особенность: когда я вручную, создав ворму для просмотра, накладываю первый фильтр на Path, то таблица фильтруется *на экране отображаются строки), но указатель стоит на пустой строке. Если я теперь пытаюсь наложить фильтр еще и на имя файла, тогда пустой результат. Если же я предварительно указатель смещу на какую-нить "нормальную " запись, и потом наложу фильтр на Имя файла, тогда показывает правильно |
|
03.12.2012, 20:27 | #8 |
Участник
|
Покопался у нас в базе, где используется фильтр по имени файла. Попробуйте назвать переменную другим именем и сделать так:
Код: recFile.RESET; recFile.SETRANGE(Path, Путь); recFile.SETRANGE("Is a file", TRUE); recFile.SETFILTER(Name, '@' + ИмяФайла); |
|
17.12.2012, 16:44 | #9 |
Участник
|
Цитата:
у меня работает без проблем код Files.SETRANGE(Path,pDirectory); Files.SETFILTER(Name,'*.xml'); Files.SETRANGE("Is a file",TRUE); IF Files.FINDSET THEN REPEAT ... UNTIL Files.NEXT=0; Автору - ключевая строка Files.SETFILTER(Name,'*.xml'); Руками накладываете setfilter, а кодом setrange. |
|
18.12.2012, 12:24 | #10 |
Участник
|
Цитата:
Надо будем попробовать и этот вариант. Я тогда на скорую руку просто прописала имя нужного файла. Но это был временный костыль, т.к. процедуру нужно было сделать срочно. Может, кто объяснит, почему такое разное поведение у натива и SQL? Ведь пока SQL не поставили, SETRANGE работал исправно. ;-/ |
|
19.12.2012, 09:00 | #11 |
Участник
|
Я думаю дело в необходимости добавления символа @, который на SQL позволяет накладывать фильтр без разницы имя написано маленькими или большими буквами. Ну а уж если используем маски, то нужно использовать оператор SETFILTER.
Я вот тоже столкнулся с проблемой, что процедура не хотела найти файл, наткнулся тоже на рекомендацию сначала установить фильтр на диск c: на мибусо. Вот мой код, который ищет файл в каталоге и инкрементирует его имя: Код: IF COPYSTR(ExportPath, STRLEN(ExportPath), 1) <> '\' THEN ExportPath += '\'; Folder.SETRANGE(Path,'c:\'); IF Folder.FINDFIRST THEN; Folder.SETRANGE(Path, ExportPath); Folder.SETRANGE("Is a file",TRUE); Folder.SETFILTER(Name, '@' + STRSUBSTNO(ExportFileMask,Company.Name,'*')); IF Folder.FINDLAST THEN ExportName := INCSTR(Folder.Name) ELSE ExportName := STRSUBSTNO(ExportFileMask,Company.Name,FORMAT(1, 0, '<Integer,4><Filler Character,0>')); в %1 подставляется имя компании, в %2 - маска по имени файла. |
|