| 
    
            
         
         | 
    
  | 
Многопользовательская работа с 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 
 | 
||||
| 
    50
    
        Rounder    
     09.08.13 
            ✎
    12:51 
 | 
         
        (48) Все - окончательно разобрался. Тормозил я при проверке на лок/не лок. Ты прав. Не лочится.
 
        Бляха - столько времени потерял и у других отнял. Еще раз спасибо.  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |