|
Ошибка открытия ДБФ | ☑ | ||
|---|---|---|---|---|
|
0
andiko
25.12.06
✎
17:38
|
При попытке открыть ДБФ-файл вываливается с ошибкой: "Перед выполнением операции нужно закрыть базу!". Файлы не открыты
ДБФ = СоздатьОбъект("XBASE"); ПутьФ = "D:\obmen\"; ФС.УстТекКаталог(ПутьФ); Файл = ФС.НайтиПервыйФайл("*.*"); Файл = ФС.НайтиСледующийФайл(); Пока ПустоеЗначение(Файл) = 0 Цикл // цикл по файлам в каталоге Файл = ФС.НайтиСледующийФайл(); ИмяФайла = ПутьФ+Файл; ДБФ.ОткрытьФайл(ИмяФайла); Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда Если ДБФ.Открыта()=0 Тогда //проверяем, удалось ли открыть файл Сообщить("Не удалось открыть файл!"); КонецЕсли; |
|||
|
1
ТелепатБот
гуру
25.12.06
✎
17:38
|
||||
|
2
andiko
25.12.06
✎
17:39
|
(1) типа умный...
|
|||
|
3
MAG
25.12.06
✎
17:40
|
Путь = "D:\1СBases\NOM.dbf";
Если ФС.СуществуетФайл(Путь) = 0 Тогда Сообщить("Файл базы не найден!","!"); Возврат; КонецЕсли; БД = СоздатьОбъект("XBase"); Попытка БД.ОткрытьФайл(Путь); Исключение БД.ЗакрытьФайл(); БД.ОткрытьФайл(Путь); КонецПопытки; Если БД.Открыта() = 0 Тогда Сообщить("Ошибка открытия базы !","!"); Возврат; КонецЕсли; |
|||
|
4
andiko
25.12.06
✎
17:43
|
(3) прикольно...
а из-за чего ругаться может? |
|||
|
5
andiko
25.12.06
✎
17:54
|
всеравно не работает
ДБФ = СоздатьОбъект("XBASE"); ПутьФ = "D:\БазыРеализации\Авиапро\obmen\"; ФС.УстТекКаталог(ПутьФ); Файл = ФС.НайтиПервыйФайл("*.*"); Файл = ФС.НайтиСледующийФайл(); Пока ПустоеЗначение(Файл) = 0 Цикл // цикл по файлам в каталоге Файл = ФС.НайтиСледующийФайл(); ИмяФайла = ПутьФ+Файл; Попытка ДБФ.ОткрытьФайл(ИмяФайла); Исключение ДБФ.ЗакрытьФайл(); ДБФ.ОткрытьФайл(ИмяФайла); КонецПопытки; Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда Если ДБФ.Открыта()=0 Тогда //проверяем, удалось ли открыть файл Сообщить("Не удалось открыть файл!"); КонецЕсли; |
|||
|
6
Каанкереде
25.12.06
✎
17:55
|
(4) ты этот D:\1СBases\NOM.dbf случаем никаким dbfViewer' ом не открыл параллельно?
|
|||
|
7
andiko
25.12.06
✎
17:58
|
(6) так в том-то и дело: перезагружался, удалял - ничего не помогает :(
|
|||
|
8
Каанкереде
25.12.06
✎
18:03
|
(7) а пробовал этот файл еще чем нибудь открыть? тем же dbfViewer или dbfNavigator
|
|||
|
9
andiko
25.12.06
✎
18:04
|
(8) нормально открывается
|
|||
|
10
Прохожий
25.12.06
✎
18:13
|
(9) Есть программа, unlocker, вроде...
|
|||
|
11
andiko
25.12.06
✎
18:14
|
(10) файл ничем/никем не заблокирован: нормально удаляется
|
|||
|
12
Прохожий
25.12.06
✎
18:14
|
А зачем ты его удаляешь? Не удаляй...
|
|||
|
13
Прохожий
25.12.06
✎
18:15
|
У тебя именно этот файл не открывается или вообще ни один?
|
|||
|
14
andiko
25.12.06
✎
18:20
|
(13) у меня их в папке два, не один не открывается. перезагружался - не помогло. из внешней обработки, такой же в ноль код работает, из глобальника - нет
|
|||
|
15
Tymoha
25.12.06
✎
18:25
|
(14)атрибуты файла проверь
|
|||
|
16
andiko
25.12.06
✎
18:52
|
(15) пучком все с атрибутами...
|
|||
|
17
andiko
25.12.06
✎
19:24
|
неужели ни у кого такого небыло ?
|
|||
|
18
DrShad
25.12.06
✎
19:28
|
имена файлов давай?
|
|||
|
19
andiko
25.12.06
✎
19:32
|
(18) не понял?
|
|||
|
20
DrShad
25.12.06
✎
19:35
|
у меня так было когда файлы имели кирилические символы или были больше 8 символов в названии
|
|||
|
21
andiko
25.12.06
✎
19:36
|
(20) у меня файлы называются 1.dbf, 2.dbf, 3.dbf и т.д.
причем обработкой открываются, а из глобальника нет |
|||
|
22
DrShad
25.12.06
✎
19:38
|
какой обработкой?
|
|||
|
23
andiko
25.12.06
✎
19:39
|
(22)точной копией процедуры из глобальника. написал чтобы удобнее было отладить
|
|||
|
24
DrShad
25.12.06
✎
19:42
|
та что в (0)
|
|||
|
25
DrShad
25.12.06
✎
19:42
|
а ты ее из глобальника убрал?
|
|||
|
26
DrShad
25.12.06
✎
19:44
|
+(25) т.е. они у тебя не пытаются дважды открыться? ты их после пользования закрываешь?
|
|||
|
27
andiko
25.12.06
✎
19:46
|
(26) написал во внешней обработке, отладил. все гуд
впихнул в глобальник - выдает ошибку. удалил файлы - пофиг. перегрузился - пофиг, атрибуты файлов - гуд |
|||
|
28
DrShad
25.12.06
✎
19:48
|
а отладчиком что показывает?
|
|||
|
29
andiko
25.12.06
✎
19:50
|
(28) а отладчик куда пихать?
|
|||
|
30
mun2
25.12.06
✎
19:50
|
У тебя переменные в глобальнике не пересекаются?
|
|||
|
31
DrShad
25.12.06
✎
19:55
|
а что ты вообще в них пишешь?
|
|||
|
32
andiko
26.12.06
✎
10:37
|
(30) переменные не пересекаются
(31) в файле содержится структура справочника другой базы |
|||
|
33
A_M-ko
26.12.06
✎
11:37
|
Был у меня такой прикол. Для открытия файла запустил цикл, так вот файл открылся с четвертой попытки. Платформа 1С рулит.
|
|||
|
34
andiko
26.12.06
✎
11:40
|
(33) а лечить как?
|
|||
|
35
A_M-ko
26.12.06
✎
11:42
|
Платформу лечить нужно. Не ожидает она момента открытия, спешит куда-то.
|
|||
|
36
andiko
26.12.06
✎
11:43
|
(35) а конкретные предложения? ведь из внешней обработки все работает
|
|||
|
37
A_M-ko
26.12.06
✎
11:43
|
Ха. А уменя как раз во внешней обработке не работало.
|
|||
|
38
andiko
26.12.06
✎
11:44
|
(37) а в глобальном все пучком?
|
|||
|
39
A_M-ko
26.12.06
✎
11:45
|
Не заморачивайся. Поставь цикл и все срастется. Секунда туда секунда сюда. Все остальное работает дольше.
|
|||
|
40
andiko
26.12.06
✎
11:47
|
цикл с 1 по 100 000 хватит?
|
|||
|
41
A_M-ko
26.12.06
✎
11:49
|
Да я же говорю с четвертой попытки. Цикл
ДБ.ОткрытьФайл(ИмяФайла); Пока ДБ.Открыта()=0 Цикл ДБ.ОткрытьФайл(ИмяФайла); КонецЦикла; |
|||
|
42
andiko
26.12.06
✎
11:51
|
(41) т.е. этот кусок в цикл на 4-5 раз?
|
|||
|
43
Один С
26.12.06
✎
11:56
|
(40) Поставь перед словом "Попытка" строчку Сообщить(Файл);
|
|||
|
44
A_M-ko
26.12.06
✎
11:57
|
Да нет, это все. Просто я там счетчик при отладке вставлял и его потом смотрел при выходе из цикла.
|
|||
|
45
andiko
26.12.06
✎
12:00
|
(43) поставил. сообщает имя файла который там есть
(44) понял, спасибо. буду пробывать (бредятина какая-то) |
|||
|
46
andiko
26.12.06
✎
12:15
|
прокрутилось чуть больше 10 раз, толку 0
|
|||
|
47
andiko
26.12.06
✎
12:42
|
уже минут 40 крутится и не читает
|
|||
|
48
A_M-ko
26.12.06
✎
12:44
|
Ну извини. Я описал как было у меня.
|
|||
|
49
A_M-ko
26.12.06
✎
12:48
|
У меня правда проблема была в том, что файл создавался в обработке. Перед открытием стоял цикл задержки по условию наличия файла в каталоге. Так вот слету файл не открывался, а с четвертой попытки все получалось. Может у тебя он действительно чем-то он блокируется?
|
|||
|
50
andiko
26.12.06
✎
12:49
|
(49) я так понимаю, что если файл блокируется, то с ним ничего нельзя сделать: не удалить, не переместить, но! у меня и удаляется и перемещается
|
|||
|
51
A_M-ko
26.12.06
✎
12:52
|
А нет ли ограничения на количество открытых файлов xBase? Я не знаю, просто предположение?
|
|||
|
52
andiko
26.12.06
✎
12:58
|
(51) это как?
|
|||
|
53
A_M-ko
26.12.06
✎
13:00
|
И еще. Когда я в глобальном модуле при начале работы запустил небольшую обработку справочника на 23000 элементов, то работа системы продолжилась, а справочник продолжал обрабатываться, и меню осталось недоступным. Как у тебя вызывается эта процедура?
|
|||
|
54
A_M-ko
26.12.06
✎
13:03
|
(52) Сколько одновременно можно создать объектов xBase?
|
|||
|
55
andiko
26.12.06
✎
13:12
|
(53) вызывается по таймеру
(54) как узнать? |
|||
|
56
Один С
26.12.06
✎
13:18
|
Че то я не понял. Зачем ты файлы открываешь, закрываешь?
А строчка "Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда" вообще непонятно для чего. |
|||
|
57
andiko
26.12.06
✎
13:21
|
(56) цикл по файлам в каталоге
|
|||
|
58
Иде я
26.12.06
✎
13:30
|
Нука отпость сюда путь к каталогу...
и код обработки |
|||
|
59
andiko
26.12.06
✎
13:33
|
ДБФ = СоздатьОбъект("XBASE");
ПутьФ = "D:\obmen\"; ФС.УстТекКаталог(ПутьФ); Файл = ФС.НайтиПервыйФайл("*.*"); Файл = ФС.НайтиСледующийФайл(); Пока ПустоеЗначение(Файл) = 0 Цикл // цикл по файлам в каталоге Файл = ФС.НайтиСледующийФайл(); ИмяФайла = ПутьФ+Файл; ДБФ.ОткрытьФайл(ИмяФайла); Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда Если ДБФ.Открыта()=0 Тогда //проверяем, удалось ли открыть файл Сообщить("Не удалось открыть файл!"); КонецЕсли; и так далее |
|||
|
60
A_M-ko
26.12.06
✎
13:34
|
Може все дело в вызове по таймеру? Может что-то с синхронизацией событий открытия-закрытия? Эх отладчик тупой.
|
|||
|
61
Иде я
26.12.06
✎
13:35
|
"*.*" Че эт за лажа ?
Ты все подряд пытаешься открывать ? может отфильтруешь по "*.dbf" ? |
|||
|
62
Иде я
26.12.06
✎
13:37
|
И блин, нафига ты вначале пытаешься открыть файл, а потом только проверяешь существование его ?
|
|||
|
63
Иде я
26.12.06
✎
13:37
|
Файл = ФС.НайтиСледующийФайл();
сообщить(Файл); ИмяФайла = ПутьФ+Файл; Сообщить(ИмяФайла); |
|||
|
64
andiko
26.12.06
✎
14:10
|
(61) у меня там только дбф
(62) исправил - пофиг |
|||
|
65
andiko
26.12.06
✎
15:14
|
спецы иссякли...
|
|||
|
66
Один С
26.12.06
✎
15:26
|
Выложи процедуру целиком.
|
|||
|
67
vpetrov
26.12.06
✎
15:32
|
Возможно, что у тебя неправильно отрабатывает путь... Попробуй полностью прописать путь, с учетом сетевого адреса, либо попробуй перекинуть этот каталог на диск С, и соответственно в коде поменять путь с Д на С.
|
|||
|
68
andiko
26.12.06
✎
15:33
|
ДБФ = СоздатьОбъект("XBASE");
ПутьФ = "D:\БазыРеализации\Авиапро\obmen\"; ФС.УстТекКаталог(ПутьФ); Файл = ФС.НайтиПервыйФайл("*.*"); Файл = ФС.НайтиСледующийФайл(); Пока ПустоеЗначение(Файл) = 0 Цикл // цикл по файлам в каталоге Файл = ФС.НайтиСледующийФайл(); ИмяФайла = ПутьФ+Файл; ДБФ.ОткрытьФайл(ИмяФайла); Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда Если ДБФ.Открыта()=0 Тогда //проверяем, удалось ли открыть файл Сообщить("Не удалось открыть файл!"); КонецЕсли; Состояние("Загружаем данные..."); тз = СоздатьОбъект("ТаблицаЗначений"); тз1 = СоздатьОбъект("ТаблицаЗначений"); ДБФ.Первая(); //позиционируемся на первой записи Пока ДБФ.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл тз.НоваяСтрока(); тз1.НоваяСтрока(); // шапка документа тз.NOMERDOC = ДБФ.NOMERDOC; // номер документа ... тз.KOLVO = ДБФ.KOLVO; // количество ДБФ.Следующая(); КонецЦикла; ДБФ.ЗакрытьФайл(); ФС.УдалитьФайл(ИмяФайла); КонецЕсли; // проверка на наличе файла КонецЦикла; // конец цикла по файлам в папке |
|||
|
69
andiko
26.12.06
✎
15:33
|
(67) с путем все ок
|
|||
|
70
Казанская Сирота
26.12.06
✎
15:37
|
Попробуй из пути убрать Кириллицу. C:\DBFfiles\obmen
|
|||
|
71
Казанская Сирота
26.12.06
✎
15:39
|
Кста у тя поиск пропускает первые два файла.
Файл = ФС.НайтиПервыйФайл("*.*"); //ты уже на файл спозиционировался Файл = ФС.НайтиСледующийФайл(); // гоп на второй Пока ПустоеЗначение(Файл) = 0 Цикл Файл = ФС.НайтиСледующийФайл(); // гоп на третий ;) ИмяФайла = ПутьФ+Файл; |
|||
|
72
Казанская Сирота
26.12.06
✎
15:41
|
Делай
Пока 1=1 Цикл ... Файл = ФС.НайтиСледующийФайл(); // гоп на третий ;) Если ПустоеЗначение(Файл)=1 Тогда Прервать; КонецЕсли; КонецЦикла; |
|||
|
73
Казанская Сирота
26.12.06
✎
15:41
|
// гоп на третий ;) не отсюда
|
|||
|
74
Shaman100M
26.12.06
✎
15:42
|
(21) Не начинай файл с цифры. Сделай хотя бы F1.dbf F2.dbf ...
|
|||
|
75
Shaman100M
26.12.06
✎
15:47
|
В фоксе такие файлы не открываются
|
|||
|
76
Один С
26.12.06
✎
16:20
|
ДБФ = СоздатьОбъект("XBASE");
ПутьФ = "D:\БазыРеализации\Авиапро\obmen\"; ФС.УстТекКаталог(ПутьФ); Файл = ФС.НайтиПервыйФайл("*.dbf"); Пока ПустоеЗначение(Файл) = 0 Цикл ИмяФайла = ПутьФ+Файл; ДБФ.ОткрытьФайл(ИмяФайла); Состояние("Загружаем данные..."); тз = СоздатьОбъект("ТаблицаЗначений"); тз1 = СоздатьОбъект("ТаблицаЗначений"); ДБФ.Первая(); //позиционируемся на первой записи Пока ДБФ.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл тз.НоваяСтрока(); тз1.НоваяСтрока(); тз.NOMERDOC = ДБФ.NOMERDOC; // номер документа тз.KOLVO = ДБФ.KOLVO; // количество ДБФ.Следующая(); КонецЦикла; ДБФ.ЗакрытьФайл(); ФС.УдалитьФайл(ИмяФайла); Файл = ФС.НайтиСледующийФайл(); КонецЦикла; |
|||
|
77
andiko
26.12.06
✎
16:29
|
(76) в таком варианте работает, только загружает один файл, а остальные удаляет
|
|||
|
78
A_M-ko
26.12.06
✎
16:33
|
А может dbf-файлы не одного типа (FoxPro, dBase), например файлы типа Fox2x открываются а выше версий нет.
|
|||
|
79
Shaman100M
26.12.06
✎
16:34
|
(77) Не нарушай выборку удалением, сделай так:
Спс1=СоздатьОбъект("СписокЗначений"); Файл=ФС.НайтиПервыйФайл("*.*"); Пока пустоеЗначение(Файл)=0 Цикл Спс1.ДобавитьЗначение(Файл); Файл=ФС.НайтиСледующийФайл(); КонцЦИкла; а потом обрабатывай список. |
|||
|
80
andiko
26.12.06
✎
16:39
|
(78) файлы созданы в 1С
(79) а не черезчур запутанно и сложно? |
|||
|
81
Один С
26.12.06
✎
16:41
|
Вот тебе окончательный вариант. Он работает.
ДБФ = СоздатьОбъект("XBASE"); ПутьФ = "D:\БазыРеализации\Авиапро\obmen\"; ФС.УстТекКаталог(ПутьФ); Файл = ФС.НайтиПервыйФайл("*.dbf"); Пока ПустоеЗначение(Файл) = 0 Цикл ИмяФайла = ПутьФ+Файл; ДБФ.ОткрытьФайл(ИмяФайла); Состояние("Загружаем данные..."); тз = СоздатьОбъект("ТаблицаЗначений"); тз1 = СоздатьОбъект("ТаблицаЗначений"); ДБФ.Первая(); //позиционируемся на первой записи Пока ДБФ.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл тз.НоваяСтрока(); тз1.НоваяСтрока(); тз.NOMERDOC = ДБФ.NOMERDOC; // номер документа тз.KOLVO = ДБФ.KOLVO; // количество ДБФ.Следующая(); КонецЦикла; ДБФ.ЗакрытьФайл(); Файл = ФС.НайтиСледующийФайл(); ФС.УдалитьФайл(ИмяФайла); КонецЦикла; |
|||
|
82
andiko
26.12.06
✎
16:59
|
(81) блин... не работает
|
|||
|
83
Один С
26.12.06
✎
17:06
|
(82) Где не работает?
|
|||
|
84
Иде я
26.12.06
✎
17:06
|
Первые два файла будут "." и ".."
|
|||
|
85
andiko
26.12.06
✎
17:08
|
(84) угу
|
|||
|
86
andiko
26.12.06
✎
17:12
|
(83) загружает один из двух файлов и все
|
|||
|
87
A_M-ko
27.12.06
✎
11:01
|
А может не удалять в цикле файлы, а удалить потом после загрузки?
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |