Форум программистов, компьютерный форум, киберфорум
1С: Администрирование и интеграция
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/140: Рейтинг темы: голосов - 140, средняя оценка - 4.89
6 / 6 / 0
Регистрация: 27.01.2012
Сообщений: 28
1
1C 8.x (тонкий)

ADODB перестало работать в 8.3

18.05.2015, 11:03. Показов 26447. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, всем.
Буду признателен за советы, мысли, как решить неожиданно возникшую проблему с 1С 8.3. Имеем 1С 8.3.5.15.17, через MSSQL2008, MSOffice 2007. Всё лицензионное.
Недавно перешли с 8.2 на 8.3 . До переход использовалась специальная процедура: записать в file MSAccess2007 некоторую информацию, выглядело это так:

1C
1
2
3
4
5
6
7
8
9
10
    СтрокаПодключения="Provider=Microsoft.Ace.OLEDB.12.0;Data Source=E:\MyDB\MyFile.accDB;Persist Security Info=False;";
    Connection=Новый ComObject("ADODB.Connection");
    // Подключение
    Попытка
        Connection.Open(СтрокаПодключения);
    Исключение
        Сообщить("Ошибка подключения к Access: " + ОписаниеОшибки());
        Вовзрат;
    КонецПопытки;
    // работаем с accDB
И всё работало на ура без всяких проблем.
После перехода на 8.3 столкнулся с проблемою, что Open не даёт соединения - просто упорно выдаёт ошибку.

Ошибка подключения к Access: {ОбщийМодуль.АС_ОСЧ.Модуль(212)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Access Database Engine): 'E:\MyDB\MyFile.accDB' is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.

Ошибки на создания ComObject нет. Появляется на любой машине с любыми правами.
Естественно (для тестов) диск Е взят локальный (не сетевой) к базе вообще (MyFile.accDB) вообще никто не подключен; запускается от имени администратора - т.е. все полные права. Если взять запустить через WIndows->RUN "E:\MyDB\MyFile.accDB", то всё открывается, всё видно. Для тестов вообщен сделал E:\MyDB\MyFile.accDB как простой file без каких-либо ограничений.
Пробовал совершенно разные варианты команды "СтрокаПодключения" в различных исполнениях - ничего, всё в одном и том же: не открвает accDB никак.
Пробовал установить с Microsoft'а "AccessDatabaseEngine" - не помогает.


Самое интересное... При этом код

1C
1
2
3
4
5
6
7
8
9
10
11
12
    СтрокаПодключения="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=e:\MyDB\book1.xlsx;Extended Properties=Excel 12.0;";
    // создание соединения
        Connection=Новый ComObject("ADODB.Connection");
    // Подключение
    Попытка
        Connection.Open(СтрокаПодключения);
    Исключение
        Возврат
        Сообщить("Ошибка подключения к EXCEL: " + ОписаниеОшибки());
        Возврат
    КонецПопытки;
    сообщить("УСПЕШНО EXCEL");
работает успешно.

Большое спасибо за комментарии.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2015, 11:03
Ответы с готовыми решениями:

Перестало работать охлаждение
Всем привет. Проблема такая: купил проц 3570k и к нему охлаждение GAMMAXX 300, все подключил и...

Перестало работать 5.1 по HDMI
Всем привет! Очень нужна ваша помощь, т.к. перепробовал все возможные варианты. В данный...

Вдруг Перестало Работать...
Есть форма с кнопкой, в кнопке формула @SetField... в один прекрасный день перестало работать на...

Поддменю перестало работать
Ребят, помогите, пожалуйста, разобраться с навигацией. Не появляются поддменю и сами стрелки....

15
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
18.05.2015, 16:35 2
Начнем с самого простого, функция обращения к файлу на сервере или на клиенте?
0
6 / 6 / 0
Регистрация: 27.01.2012
Сообщений: 28
18.05.2015, 17:05  [ТС] 3
на клиентской машине
Но если на server запускаю 1С и эту процедуру - всё равно та же самая ошибка.
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
18.05.2015, 17:21 4
Что то странное, а там в пути случаем кириллица не могла затесаться, например "Е" ?
Повисших процессов от аксеса нет?
0
6 / 6 / 0
Регистрация: 27.01.2012
Сообщений: 28
18.05.2015, 17:36  [ТС] 5
нет, конечно, всё в латинице. И процессов нет. Запускаю на любой машине, даже после перезагрузки, сразу такая ошибка.
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
18.05.2015, 17:42 6
Функция у тебя с директивой &Клиент?
Если нет то на сервере (где стоит сама база) у тебя E:\MyDB\MyFile.accDB точно есть?
0
6 / 6 / 0
Регистрация: 27.01.2012
Сообщений: 28
18.05.2015, 17:51  [ТС] 7
Что значит "Функция у тебя с директивой &Клиент?" ?

E:\MyDB\MyFile.accDB точно есть - интересно ещё то, что если например укажу E:\MyDB\no_file.accDB, - а такого file У меня не существует, - то ошибка точно такая же.
Однако если взять этот код и, чуть-чуть подделав для VBA, запустить как макрос, например в MSExcel, оно работает без проблем.
Т.е. получается ADODB в 1С вообще не видит MS Access, но при этом не выдаёт ошибку на Новый ComObject
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
18.05.2015, 18:00 8
Цитата Сообщение от CountMay Посмотреть сообщение
Что значит "Функция у тебя с директивой &Клиент?" ?
Ну признак места выполнения функции сервер/клиент.

Цитата Сообщение от CountMay Посмотреть сообщение
E:\MyDB\MyFile.accDB точно есть
Именно на сервере и на клиентских машинах, т.е. везде?

Путь в кавычках передать пробовал?
0
6 / 6 / 0
Регистрация: 27.01.2012
Сообщений: 28
19.05.2015, 11:34  [ТС] 9
Собственно никакой директивы &НаКлиенте / &НаСервере не стоит.
да, т.е. везде.
Кавычки тоже не помогают.
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
19.05.2015, 11:40 10
Странно это, а проверка на существование файла из 1с что говорит?

Кликните здесь для просмотра всего текста
1C
1
2
3
4
5
6
ВыбФайл= Новый Файл("E:\MyDB\no_file.accDB");
Если ВыбФайл.Существует() Тогда
    Сообщить("Все ок!");
Иначе
    Предупреждение("Файл не найден!");
КонецЕсли;
0
6 / 6 / 0
Регистрация: 27.01.2012
Сообщений: 28
19.05.2015, 14:38  [ТС] 11
Удивительная вещь
на C:\Windows\Regedit.exe говорит ВСЁ ОК
на C:\Tmp\Database1.accDB говорит, что не найден (хотя оно там есть). А если скопировать Database1.accDB в C:\Windows, то всё равно не видит.
Даже не видит такой file как c:\tmp\MyText.txt (который только что создал).

А далее делаю следующий эксперимент: машина у меня Windows7, где пытаюсь запустить 1С с этою процедурою, а SQL / 1C сервис - всё на WindowsServer 2008, соответственно, другая машина.
Если проверить на существование C:\Windows\ServerDatacenter.xml, который точно есть в WindowsServer2008, но не может быть в Windows7, то оказывается, что 1С на Win7 его видит и говорит всё ОК. Таким образом получается, что на клиентской машине я запускаю функцию, которая, оказывается, выполняется напрямую в/на WindowsServer2008.

И значит надо проверять, почему сервис 1С не видит точно такой же каталог на WindowsServer2008 как E:\MyDB или C:\Tmp, куда я также выкладывал подобные file'ы для тестов.
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
19.05.2015, 14:53 12
Функции у которых не проставлен признак выполнения в зависимости от типа клиента выполняются в разных местах.
Попробуй перед функцией поставь признак выполнения &НаСервере и убедись, что на сервере есть C:\Tmp\Database1.accDB
Кликните здесь для просмотра всего текста
1C
1
2
3
4
5
6
7
8
9
&НаСервере
Функция ПроверкаСуществованияФайла()
  ВыбФайл= Новый Файл("C:\Tmp\Database1.accDB");
  Если ВыбФайл.Существует() Тогда
    Сообщить("Все ок!");
  Иначе
    Предупреждение("Файл не найден!");
  КонецЕсли;
КонецФункции
1
6 / 6 / 0
Регистрация: 27.01.2012
Сообщений: 28
19.05.2015, 16:43  [ТС] 13
В общем получается, она видит всё, что лежит на диске С сервера, а всё остальное ей недоступно, потому в итоге, была первоначальная ошибка... Буду разбираться с правами и путями.
Спасибо большое!!
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
19.05.2015, 16:55 14
Пожалуйста.
Но дело не в правах и путях, дело в месте выполнения кода, почитайте про директивы &НаСервере &НаКлиенте и прочие, без их понимания на 8.3 путь закрыт.
0
Модератор
Эксперт 1С
3784 / 2964 / 589
Регистрация: 10.03.2011
Сообщений: 11,669
Записей в блоге: 1
20.05.2015, 01:00 15
Volexovich, на Обычных формах даже на платформе 8.3 не используются директивы компиляции (&наСервере\&НаКлиенте)

Такое разделение реализовано только при помощи общих модулей
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
20.05.2015, 09:30 16
Цитата Сообщение от Dethmontt Посмотреть сообщение
Такое разделение реализовано только при помощи общих модулей
Ну вообще то у ТС ошибка как раз в общих модулях и я его направил по пути понимания причин возникновения подобных ошибок, думаю перейдя на 8.3 ему эти знания пригодятся.
0
20.05.2015, 09:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2015, 09:30
Помогаю со студенческими работами здесь

Перестало работать восстановление системы
Здравствуйте! В моем PC после установки различных программ из сети появилась реклама в...

USB гнездо перестало работать.
На ноутбуке одно USB гнездо перестало работать. До этого все было ОК. Устройство устранения...

Перестало работать то, что работало
Привет, Всем! Подскажите кто знает, перестало работать, то что работало, и сообщения об ошибках...

Простое выражение перестало работать
Проверяется наличие кириллицы if (eregi("+",$s)) echo 'Attention, Russia!'; Всегда работало,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru