Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Подключение из 1С к базе Firebird

Подключение из 1С к базе Firebird
Я
   Ychenik1c
 
06.07.21 - 13:16
Добрый день. Не получается подключиться к базе. Ошибка: {ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(17)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию

Форумы почитал. Вроде всё проверил. Скажу сразу подключаюсь первый раз.
Вот код
&НаКлиенте
Процедура ПодключениеКБазе(Команда)
      
    Соединение = Новый COMОбъект("ADODB.Connection");
    //DSN=FireBird;Driver={Firebird/InterBase(r) driver};Dbname=23-Video01:c:\Program Files\smdr-  2\db\smdrkey.fdb;CHARSET=NONE;PWD=000111;UID=ALEX;Client=gds32.dll
    Соединение.ConnectionString = "DSN=FireBird;Driver={Firebird/InterBase(r) driver};Dbname=" +
    СокрЛП("192.168.***.210") + ":" +
    СокрЛП("*****\DVIZ\DVIZ.FDB") + ";CHARSET=NONE;Uid=" +
    СокрЛП("SYSDBA") + ";Pwd=" +
    СокрЛП("masterkey") + ";Client=gds32.dll";
    Соединение.ConnectionTimeout = 60;
    Соединение.CursorLocation = 3;
    //Состояние("Попытка соединения с );
            
            Попытка
                Соединение.Open();
                //Состояние("Читаю данные ...");
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;
КонецПроцедуры
   vde69
 
1 - 06.07.21 - 13:20
1. код исполняется на сервере или на клиненте?
2. под какими правами?
3. драйве установлен с именем "Firebird/InterBase(r) driver" должно совпадать до буквы
   acht
 
2 - 06.07.21 - 13:25
4. Разрядность драйверов должна совпадать с разрядностью вызывающего процесса
   acht
 
3 - 06.07.21 - 13:27
(0) > СокрЛП("192.168.***.210") 
> СокрЛП("SYSDBA") + ";Pwd=" +
> СокрЛП("masterkey") + ";Client=gds32.dll"; 

Звездочками закрыто самое ценное, да
   Kassern
 
4 - 06.07.21 - 13:30
(3) не удивлюсь если там 0 или 1 вместо звездочек))
   ДенисЧ
 
5 - 06.07.21 - 13:31
(3) Тебе очень интересен пароль от 192,168*
Хочешь, публично назову пароль от 10,0,0,49 ?
   Kassern
 
6 - 06.07.21 - 13:34
(5) мне просто интересно, на кой ТС туда звездочки вписал))
   ДенисЧ
 
7 - 06.07.21 - 13:39
(6) Это специальный синтаксис. Чтобы по всей сетке искать доступную базу ))
   acht
 
8 - 06.07.21 - 14:38
13 лет кусок кода вылеживался, однако - https://forum.vingrad.ru/topic-197194.html
   Eiffil123
 
9 - 06.07.21 - 15:19
(8) некоторый код как вино
   Garykom
 
10 - 06.07.21 - 15:24
(9) вино со временем в плохих условиях портится
и ваш код тоже протух

например каким образом из линукс, макоси или андроида будем к firebird коннектиться?

лично я вот так https://github.com/nakagami/firebirdsql
   Garykom
 
11 - 06.07.21 - 15:27
(10)+ простейшая консольная утилитка, на вход ей строку подключения (но можно и раздельно сервер, логин, пароль и т.д.) и текст sql запроса
на выходе выдает в нужном виде (json, csv и т.д.)
когда на постоянку удобней поднять микросервис и через http из 1С его юзать
   Kassern
 
12 - 06.07.21 - 15:32
(10) а зачем человеку, у которого все это дело на винде пилить в мультиплатформенность?
   Мультук
 
13 - 06.07.21 - 15:42
(0)

1) А что-нибудь другое, например IB-EXPERT, к этой базе с данного компьютера подключается ?
2) Клиент от нужного firebird установлен? Т.е. gds32.dll физически на компьютере существует ?
3) https://firebirdsql.org/en/odbc-driver/
4) https://www.connectionstrings.com/firebird/
   МихаилМ
 
14 - 06.07.21 - 15:45
   kubik_live
 
15 - 06.07.21 - 15:56
У меня так (рабочий):

    мСтрокаСоединения="driver=Firebird/InterBase(r) driver; 
    |Dialect=3; 
    |CHARSET=NONE; 
    |Uid=SYSDBA;
    |Pwd=masterkey;
    |Dbname="+СокрЛП(Объект.ПутьКБД);
    
    DBConn=Новый COMОбъект("ADODB.Connection");
    DBConn.ConnectionString=мСтрокаСоединения;
    DBConn.ConnectionTimeOut=180;
    DBConn.CursorLocation=3;
    
    Попытка
        DBConn.Open(DBConn.ConnectionString);
        //ПоказатьОповещениеПользователя("ОК",,"Соединение к БД FireBird успешно установлено!");

    Исключение
        Сообщить("Ошибка при установке соединения: "+ОписаниеОшибки());
        Сообщить("Строка соединения: "+мСтрокаСоединения);
        DBConn=Неопределено;
    КонецПопытки;
   kubik_live
 
16 - 06.07.21 - 16:07
+(15)

&НаСервере
   Garykom
 
17 - 06.07.21 - 16:16
(12) 1. лучше взять изначально мультиплатформенный инструмент, чем потом страдать переписывая, особенно если это проще и надежней
2. права, что на серверах с админами бывает сложнорешаемо
3. ado|ole|com is deprecated (официальное мнение MS)
4. быстрее, лучше и надежней
   Kassern
 
18 - 06.07.21 - 16:43
(17) Ну вот смотрите. Человек к примеру работает на предприятии программистом 1с, в других языках он не очень. Все предприятие на винде, вопросы с доступом и правами решаемы и обычно проблем не возникает (Ставишь задачу, тебе ее делают). Либо этот человек делает работку на аутсорсе для какой нить конторы. И вы предлагаете ему вместо типового решения за базе платформы 1с скачать стороннюю утилиту, поставить го на сервере, что в итоге подтянется с гита и будет исполняться хз. Как это повлияет на работу системы так же хз. В общем имхо, если у тебя все на винде завязано, не надо лепить велосипедов и ставить сторонние проги, если в этом нет прямой необходимости.
   Garykom
 
19 - 06.07.21 - 16:58
(18) 1С уже давно не один язык а несколько
как минимум кроме ЯП 1С еще язык запросов
очень часто js скрипты снаружи через ole или внутри полеhtml

и на называть "Новый COMОбъект("ADODB.Connection")" типовым решением довольно сложно
типовое (которое юзают редко на практике ибо куча трабл) это Внешние Источники Данных
   Garykom
 
20 - 06.07.21 - 16:59
(19)+ в смысле не вижу проблемы выучить еще один язык и юзать его в своей работе
и никакое го на сервере и подтягивание с гита не требуетс
обычная .exe которую в макет засунул а когда надо сохранил и выполнил
   Garykom
 
21 - 06.07.21 - 17:00
(20)+ ВК же юзаем? вот тоже самое почти, только вместо DLL компилим EXE
   Kassern
 
22 - 06.07.21 - 17:08
(21) конечно юзаем, когда по другому не получается, либо очень медленно. В данном случае смысла особого нет. В свое время юзал стороннюю библиотеку, чтобы работать с sftp, так как 1ска до сих пор не умеет с ним работать. Так же через эту библиотеку в разы быстрее на обычный фтп гонять файлы, чем штатный 1совский Новый FTPсоединение. Но так же можно и с http работать через всякие внешние утилиты и библиотеки, а можно через штантый конструктор. И в большинстве задач, штатных интсрументов за глаза хватает. В общем использование внешних компонент должно быть целесообразным, а не вот смотрите я могу через питон поднять сервис и гонять файлики, я потратил на это 20часов, оплатите пожалуйста.
   Garykom
 
23 - 06.07.21 - 17:15
(22) 20 часов это вы с глюками адо и настройками odbc провозитесь с правами не левом серваке

а обычная консольная прога на go пишется за час и работает где угодно
   Ychenik1c
 
24 - 06.07.21 - 17:51
(13) 1. Ib expert на этом компьютере базу открывает.
   Ychenik1c
 
25 - 06.07.21 - 18:48
(15) Ошибка при установке соединения: {ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(164)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [ODBC Firebird Driver]Unable to connect to data source: library 'gds32.dll' failed to load
   Ychenik1c
 
26 - 06.07.21 - 19:13
   Ychenik1c
 
27 - 06.07.21 - 19:17
Ошибка при установке соединения: {ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(164)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Pr
   OldCondom
 
28 - 06.07.21 - 20:16
у тебя в каждом сообщении написано в чем именно ошибка. По английски.
   OldCondom
 
29 - 06.07.21 - 20:19
gds32.dll не загружает. Собственно, failed to load.
   ДедМорроз
 
30 - 06.07.21 - 20:27
Там нужно ODBC драйвер той же битности,что и 1с.
И внимательно указать имя драйвера и дополнительные параметры согласно его описанию.
 
 
   kubik_live
 
31 - 06.07.21 - 20:30
(25) А если убрать из строки инициализации?:

 ";Client=gds32.dll"

у меня без этого норм. грузится
   kubik_live
 
32 - 06.07.21 - 20:34
+(31) Сия библиотека в клиентской и серверной части БД FireBird присутствует
   ДедМорроз
 
33 - 06.07.21 - 20:35
А вообще firebird ожидает подключение из-вне и к данной базе?
   ДедМорроз
 
34 - 06.07.21 - 20:37
Еще нужно помнить,что пути до баз желательно писать как \\.\далееПуть,т.к.сервер firebird пути пользователя не видит.
На windows 10 у меня без точки не взлетело.
   kubik_live
 
35 - 06.07.21 - 20:39
(33) Я 3 года назад "высасывал" из FB в 1С УТ11.
Клиент переходил на 1С

ДОлго разбирался с данными, а так всё супер прогрузилось
   kubik_live
 
36 - 06.07.21 - 20:41
(34) У меня просто путь к файлу *.gdb
   kubik_live
 
37 - 06.07.21 - 20:42
&НаКлиенте
Процедура ПутьКБДНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка=Ложь;
    ОписаниеОповещения=Новый ОписаниеОповещения("ПутьКБДНачалоВыбораЗавершение",ЭтотОбъект);
    ДиалогВыбораФайла=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбораФайла.Заголовок="Укажите файл базы:";
    ДиалогВыбораФайла.ПредварительныйПросмотр=Ложь;
    ДиалогВыбораФайла.МножественныйВыбор=Истина;
    ДиалогВыбораФайла.Фильтр="gdb-файлы|*.gdb";
    ДиалогВыбораФайла.Показать(ОписаниеОповещения);
    
КонецПроцедуры
   kubik_live
 
38 - 06.07.21 - 20:48
(34) Верно
Каюсь:

&НаКлиенте
Процедура ПутьКБДНачалоВыбораЗавершение(мФайлов,рПараметры) Экспорт
    Если мФайлов=Неопределено Тогда
        Возврат
    КонецЕсли;
    //

    Объект.ПутьКБД="\\*****\"+СокрЛП(мФайлов[0]);
КонецПроцедуры
   Ychenik1c
 
39 - 07.07.21 - 15:13
Походу придётся через ексель данные грузить(( Уже по всякому пробую что есть в интернете. А там потом ещё запросы делать к базе. Хоть кажется что там возможно будет легче, но не факт)

Невозможно установить соединение с Firebird:
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(245)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию


        ФайлБазы = "D:\infobase\DVIZ\DVIZ.FDB";
        ФайлДЛЛ =    "fbclient.dll";
    Соединение = Новый COMОбъект("ADODB.Connection");
    
    Соединение.ConnectionString = "driver=Firebird/InterBase® driver; Dialect=3; CHARSET=WIN1251; Uid=SYSDBA;Pwd=masterkey;Dbname="+ФайлБазы + ";client="+ФайлДЛЛ;
    
    Соединение.ConnectionTimeOut = 1200;
    Соединение.CursorLocation = 3;
    Попытка
        Соединение.Open(Соединение.ConnectionString);
        Сообщить("Соединение успешно уставовлено !!!");
    Исключение
        Сообщить("Невозможно установить соединение с Firebird:
        | "+ОписаниеОшибки());
        Возврат;
    КонецПопытки;
   МихаилМ
 
40 - 07.07.21 - 15:19
(39)
што ето "..InterBase®..." ???
   Ychenik1c
 
41 - 07.07.21 - 15:33
(40) Точно.
Исправил на:

    Соединение.ConnectionString = "driver=Firebird; Dialect=3; CHARSET=WIN1251; Uid=SYSDBA;Pwd=masterkey;Dbname="+ФайлБазы + ";client="+ФайлДЛЛ;
Ошибка не поменялась
   Ychenik1c
 
42 - 07.07.21 - 15:40
   МихаилМ
 
43 - 07.07.21 - 16:00
(0)
мне помогает http://alekseyrybakov.narod.ru/ViewODBC.html

для получения  правильного ConnectionString .к тому же  это прога умеет разименовывать  дсн.
   Ychenik1c
 
44 - 07.07.21 - 16:22
(43) По данной строке ViewODBC открывает базу данных, а 1С нет
Driver=Firebird/InterBase(r) driver;Dbname=D:\infobase\DVIZ\DVIZ.FDB;PWD=masterkey;UID=SYSDBA;
   Kassern
 
45 - 07.07.21 - 16:32
(44) а служба 1ски на том же компе, где и ViewODBC?
   Ychenik1c
 
46 - 07.07.21 - 16:33
(45) Сервер один. База файловая.
   Kassern
 
47 - 07.07.21 - 16:54
(46) операционка какая? 1ска версия платформы какая и скольки разрядная?
   Ychenik1c
 
48 - 07.07.21 - 17:13
Windows 2016 x64
1c 32-битная 8.3.18.1383 x86
   Ychenik1c
 
49 - 08.07.21 - 04:07
Проблема походу с библиотекой. Её во все папки скопировал.
Невозможно установить соединение с Firebird:
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(241)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [ODBC Firebird Driver]Unable to connect to data source: library 'gds32.dll' failed to load
   OldCondom
 
50 - 08.07.21 - 04:31
(49) Серьезно? Проблема все таки с библиотекой? То есть надпись "library 'gds32.dll' failed to load" все таки не врет? Какая неожиданность.

1) читаешь в интернете, какой драйвер тебе нужен
2) идешь на офф сайт firebird и качаешь нужный дравйвер
3) читаешь в интернете как устанавливать odbc + устанавливаешь
4) открываешь справку в скачанном драйвере(да, не поверишь, она там есть), узнаешь пример строки подключения
5) подключаешься наконец из 1С
   Адинэснег
 
51 - 08.07.21 - 06:08
(4) не удивлюсь, если на месте звездочек - зведочки
   Kassern
 
52 - 08.07.21 - 09:06
(51) не ну это уже перебор))


Список тем форума
 
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.