|
|
|
|
#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, проблем не было, всё работало нормально |
|
|
|
|
#2 |
|
Участник
|
Если запускаете эту штуку в периодическом задании то нужно делать так.
File.SETRANGE(Path,ПутьКуданибудьвдругоеместо); File.FIND('-'); File.SETRANGE(Path,Путь); File.SETRANGE("Is a file",TRUE); File.SETRANGE(Name,ИмяФайла);
__________________
Want to believe... |
|
|
|
|
#3 |
|
Участник
|
Цитата:
Я написала так: Код: File.RESET;
File.SETRANGE(Path,ПутьКуданибудьвдругоеместо);
File.FINDFIRST;
File.SETRANGE(Path,Путь);
File.SETRANGE("Is a file",TRUE);
File.SETRANGE(Name,ИмяФайла);
IF FINDSET THEN />
|
|
|
|
|
#4 |
|
Участник
|
желательно еще reset добавить
File.RESET; и вместо SETRANGE попробуйте SETFILTER File.SETFILTER(Path,ПутьКуданибудьвдругоеместо);
__________________
Want to believe... |
|
|
|
|
#5 |
|
Участник
|
Цитата:
у меня работает без проблем код 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. |
|
|
|
|
#6 |
|
Участник
|
Цитата:
Надо будем попробовать и этот вариант. Я тогда на скорую руку просто прописала имя нужного файла. Но это был временный костыль, т.к. процедуру нужно было сделать срочно. Может, кто объяснит, почему такое разное поведение у натива и SQL? Ведь пока SQL не поставили, SETRANGE работал исправно. ;-/ |
|
|
|
|
#7 |
|
Участник
|
RESET у меня есть
(я поправила предыдущее сообщение)
|
|
|
|
|
#8 |
|
Участник
|
Kadawrik, а вы когда накладываете фильтр на Path у вас в конце пути есть обратный слэш(\) ?
Просто первое что напрашивается, это либо неправильный фильтр на путь, либо на имя файла. Имя файла, на сколько я помню, должно быть без полного пути, но с расширением. |
|
|
|
|
#9 |
|
Участник
|
Цитата:
Фильтр для Path и имени файла берутся из полей определенной таблицы. Так что тут все правильно. Когда те же самые значения я копирую в строку вильтря для формы, то всё фильтруется правильно. Заметтила еще одну особенность: когда я вручную, создав ворму для просмотра, накладываю первый фильтр на Path, то таблица фильтруется *на экране отображаются строки), но указатель стоит на пустой строке. Если я теперь пытаюсь наложить фильтр еще и на имя файла, тогда пустой результат. Если же я предварительно указатель смещу на какую-нить "нормальную " запись, и потом наложу фильтр на Имя файла, тогда показывает правильно |
|
|
|
|
#10 |
|
Участник
|
Покопался у нас в базе, где используется фильтр по имени файла. Попробуйте назвать переменную другим именем и сделать так:
Код: recFile.RESET;
recFile.SETRANGE(Path, Путь);
recFile.SETRANGE("Is a file", TRUE);
recFile.SETFILTER(Name, '@' + ИмяФайла); |
|
|
|
|
#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 - маска по имени файла. |
|
|