Имя: Пароль:
1C
1С v8
Многопользовательская работа с DBF
,
0 Rounder
 
08.08.13
12:55
Поставлена задача: есть некий файл DBF в сетевой папке, с ним уже работает группа пользователей. Мне из 1С нужно откорректировать/добавить запись. Это возможно средствами 1С?
1 butterbean
 
08.08.13
12:57
у тебя проблема только с доступом??
2 Rounder
 
08.08.13
12:59
У меня пока нет проблемы - и нет возможности испробовать. Спрашиваю может кто решал подобную задачу.
3 butterbean
 
08.08.13
13:01
(2) непонятен твой вопрос — если файл занят то записать ты не сможешь, если свободен, то сможешь :-)
4 Aleksey
 
08.08.13
13:01
(2) эээ а они в чём работают в блокноте с этим файлом? А ты уверен что посе твоей правки программа с которой "уже работает группа пользователей" не вылетет по ошибки?
А ты уверен что та программа не использует хитрые индексы, и в результате она тоже не скажет ой
5 Rounder
 
08.08.13
13:02
(4) Они из ПО написанного на FoxPro 2.6 работают.
6 Rounder
 
08.08.13
13:02
(4) и я не в чем не уверен - я прошу поделиться опытом если он был.
7 Aleksey
 
08.08.13
13:03
(6) Сейчас кофе допью и погадаю на гуще
8 akronim
 
08.08.13
13:08
Вообще после открытия дбф "средствами 1С" ничем другим этот файл не откроешь даже на просмотр - будет ошибка доступа. Так что я отношусь скептически к этой затее.
(7) Вот она - наглядная польза кофе в офисах. Гадание на бараньих кишках или даже на внутренностях жертвенного голубя в условиях современного офиса несколько затруднительно, да и соседи не поймут.
9 MKZM
 
08.08.13
13:12
так можно получить доступ не только с помощью иксбазе
10 MKZM
 
08.08.13
13:12
с адо например, там можно и в многопользовательском режиме.
11 akronim
 
08.08.13
13:19
Да, не подумал. Пагубная практика XBase, да
Ну если можно - хорошо.
12 Rounder
 
08.08.13
13:21
(9) Спасибо за наводку.
Остальным спасибо за участие и гадание :)
13 kiruha
 
08.08.13
13:26
100 лет уже работают через драйвер FoxPro
Все пропустил
14 kiruha
 
08.08.13
13:36
Точнее где то в 2003 spock начал использовать драйвер фокса для многопольз доступа к dbf
15 Rounder
 
08.08.13
15:44
Что я делаю не так?

Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open("Provider=vfpoledb.1;Exclusive=No; Data Source=" + ПутьКБД + ";Collating Sequence=MACHINE;");
ДБФ = Соединение.Execute("Select * from " + ПутьКБД + " ");
ДБФ.Close();
Соединение.Close();

Если остановиться по точке останова после строки ДБФ = Соединение.Execute("Select * from " + ПутьКБД + " "); то при открытии dbf-ки другим приложением ругает на то, что нет доступа. Но ведь в инициализации объекта я указал Exclusive=No.
Что здесь не так?
16 Rounder
 
08.08.13
16:29
Актуально.
17 Infsams654
 
08.08.13
16:43
(16) надо попробовать через другой драйвер. И почему бы не подсоединиться не через COMОбъект("ADODB.Connection"), а прямо к внешнему источнику в 1С и работать через ВнешнийИсточникДанныхТаблицаМенеджер
18 Rounder
 
08.08.13
16:48
(17) про внешний источник данных не подумал. Нужно посмотреть.
19 Ёпрст
 
08.08.13
17:02
(15) пробуй через
Microsoft.ACE.OLEDB.12.0

он не лочит файло
20 kiruha
 
08.08.13
18:07
Или попробуй поставить
TABLEVALIDATE=0;
в строке подключения
21 ПесняПроЗайцев
 
08.08.13
19:40
clipper умел ставить блокировки, фокс тоже.
а хбасе по-моему нет.
22 Jump
 
08.08.13
19:59
(0)Возможно.
Т.е запись ты сможешь добавить если в этот момент файл не залочен. А будет ли другая программа корректно работать с базой после этого сказать невозможно, надо разбираться в принципах работы программы и что для нее эта запись которую ты откорректировал.

В общем файл *,dbf это просто формат хранения, и в данном случае мало отличается от файла *.txt
23 Infsams654
 
09.08.13
08:17
(22) не, в формате заголовка dbf точно есть поле для многопользовательского использования, однако, как с ним работает 1С - хз. При чем (21) + на уровне записей
24 kiruha
 
09.08.13
09:42
(23)
Причем здесь 1С , если подключение идет через сторонний драйвер. Фокс прекрасно работает в многопольз режиме, а если что залочено - надо смотреть в голове
25 Infsams654
 
09.08.13
09:54
(24) + , согласен. Неправильно выразился. Не 1С, а драйвер, см. (17)
26 Rounder
 
09.08.13
10:27
(20) TABLEVALIDATE=0 - не помогает
(19) Microsoft.ACE.OLEDB.12.0 - лочит
27 Rounder
 
09.08.13
11:23
Актуально
28 Ёпрст
 
09.08.13
11:54
(26) не лочит, проверено

Соединение = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+КаталогИБ+";Extended Properties=dBase IV;Persist Security Info=False";
29 Rounder
 
09.08.13
12:00
(28)
а как проверял что не лочит если не секрет?
можно код и последовательность действий?
30 Rounder
 
09.08.13
12:04
опа - вроде не лочит. У меня не было в строке параметра Persist Security Info
31 Rounder
 
09.08.13
12:04
Сча еще перепроверю.
32 Ёпрст
 
09.08.13
12:04
(29) открываешь файло в редакторе - делаешь чтение из 1с-ины..
всё считывается.
33 Ёпрст
 
09.08.13
12:05
в противном случая, адо уже сразу ошибку дает - что не может открыть файло.
34 Ёпрст
 
09.08.13
12:07
Ежели в редакторе, файло монопольно открыть, то запрос по адо тоже болт пишет.
35 Rounder
 
09.08.13
12:08
(33) Так у меня и работало когда фал открывал в VFP например не в монопольном режиме, то из 1С с любым провайдером я к нему подключался и модифицировал спокойно. Не работала обратная ситуация: когда я не мог открыть из 1С файл в немонопольном режиме, т.е. когда я его открывал первым и уже пробуя открыть файл в VFP получал аксесс денайд.
36 Rounder
 
09.08.13
12:12
Вчера по твоему совету попробовал Microsoft.ACE.OLEDB.12.0 и использовал стандартную строку подключения:

Соединение.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ПутьКБД + ";Extended Properties=dBASE IV;User ID=Admin;");

И с такой строкой файл лочило.
С той что ты сегодня подсказал - вроде работает как нужно.
Сейчас еще разберусь что это за параметр.

Спасибо за помощь.
37 Ёпрст
 
09.08.13
12:12
(35) всё открывается
38 Rounder
 
09.08.13
12:13
(37) Теперь да. Я в (36) об этом написал.
39 Ёпрст
 
09.08.13
12:13
можешь еще на всякий.. вот так:

Соединение = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+КаталогИБ+";Mode=Share Deny None;Extended Properties=dBase IV"

т.е указать ему Mode
40 Ёпрст
 
09.08.13
12:15
(36) тут видать, в фоксе(любой проге) нужно тоже подключаться с таким же User ID .. можно еще и пароля задать
41 Rounder
 
09.08.13
12:15
(39) я смотрел в параметрах соединения - Mode устанавливается по умолчанию в Share Deny None
42 Ёпрст
 
09.08.13
12:21
но лучше, всё же вот с такой строкой:

Соединение = "Provider=VFPOLEDB.1;Data Source="+КаталогИБ+";Collating Sequence=MACHINE;TABLEVALIDATE=0";

фокс всё же поприятнее с дбф дружит, да и индекс можно задействовать в запросе.
43 Ёпрст
 
09.08.13
12:22
тоже не лочит
44 Rounder
 
09.08.13
12:29
(42) У меня лочит.
45 Ёпрст
 
09.08.13
12:32
(44) не верю :)
46 Rounder
 
09.08.13
12:33
(45) К сожалению нет возможности доказать :)
Но это именно так. Лочит.
47 Rounder
 
09.08.13
12:34
Кстати - да. Вот и еще проблема нарисовалась.
Microsoft.ACE.OLEDB.12.0 не лочит, но и индексный файл не обновляет :(
48 Ёпрст
 
09.08.13
12:48
Соединение = "Provider=VFPOLEDB.1;Data Source="+КаталогИБ+";Mode=Share Deny None;Collating Sequence=MACHINE;TABLEVALIDATE=0";

вот так спецом проверил - ничего не лочится..
при Mode=Read тоже
49 Ёпрст
 
09.08.13
12:49
попробуй еще vfp переставить
отсюда
http://www.microsoft.com/en-us/download/details.aspx?id=14839
50 Rounder
 
09.08.13
12:51
(48) Все - окончательно разобрался. Тормозил я при проверке на лок/не лок. Ты прав. Не лочится.
Бляха - столько времени потерял и у других отнял.
Еще раз спасибо.