Имя: Пароль:
1C
1С v8
Подключение из 1С к базе Firebird
0 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();
                //Состояние("Читаю данные ...");
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;
КонецПроцедуры
1 vde69
 
06.07.21
13:20
1. код исполняется на сервере или на клиненте?
2. под какими правами?
3. драйве установлен с именем "Firebird/InterBase(r) driver" должно совпадать до буквы
2 acht
 
06.07.21
13:25
4. Разрядность драйверов должна совпадать с разрядностью вызывающего процесса
3 acht
 
06.07.21
13:27
(0) > СокрЛП("192.168.***.210")
> СокрЛП("SYSDBA") + ";Pwd=" +
> СокрЛП("masterkey") + ";Client=gds32.dll";

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

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

лично я вот так https://github.com/nakagami/firebirdsql
11 Garykom
 
гуру
06.07.21
15:27
(10)+ простейшая консольная утилитка, на вход ей строку подключения (но можно и раздельно сервер, логин, пароль и т.д.) и текст sql запроса
на выходе выдает в нужном виде (json, csv и т.д.)
когда на постоянку удобней поднять микросервис и через http из 1С его юзать
12 Kassern
 
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
15 kubik_live
 
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=Неопределено;
    КонецПопытки;
16 kubik_live
 
06.07.21
16:07
+(15)

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

как минимум кроме ЯП 1С еще язык запросов
очень часто js скрипты снаружи через ole или внутри полеhtml

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

а обычная консольная прога на go пишется за час и работает где угодно
24 Ychenik1c
 
06.07.21
17:51
(13) 1. Ib expert на этом компьютере базу открывает.
25 Ychenik1c
 
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
26 Ychenik1c
 
06.07.21
19:13
27 Ychenik1c
 
06.07.21
19:17
Ошибка при установке соединения: {ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(164)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Pr
28 OldCondom
 
06.07.21
20:16
у тебя в каждом сообщении написано в чем именно ошибка. По английски.
29 OldCondom
 
06.07.21
20:19
gds32.dll не загружает. Собственно, failed to load.
30 ДедМорроз
 
06.07.21
20:27
Там нужно ODBC драйвер той же битности,что и 1с.
И внимательно указать имя драйвера и дополнительные параметры согласно его описанию.
31 kubik_live
 
06.07.21
20:30
(25) А если убрать из строки инициализации?:

";Client=gds32.dll"

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

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

&НаКлиенте
Процедура ПутьКБДНачалоВыбораЗавершение(мФайлов,рПараметры) Экспорт
    Если мФайлов=Неопределено Тогда
        Возврат
    КонецЕсли;
    //
    Объект.ПутьКБД="\\*****\"+СокрЛП(мФайлов[0]);
КонецПроцедуры
39 Ychenik1c
 
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®..." ???
41 Ychenik1c
 
07.07.21
15:33
(40) Точно.
Исправил на:

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

для получения  правильного ConnectionString .к тому же  это прога умеет разименовывать  дсн.
44 Ychenik1c
 
07.07.21
16:22
(43) По данной строке ViewODBC открывает базу данных, а 1С нет

Driver=Firebird/InterBase(r) driver;Dbname=D:\infobase\DVIZ\DVIZ.FDB;PWD=masterkey;UID=SYSDBA;
45 Kassern
 
07.07.21
16:32
(44) а служба 1ски на том же компе, где и ViewODBC?
46 Ychenik1c
 
07.07.21
16:33
(45) Сервер один. База файловая.
47 Kassern
 
07.07.21
16:54
(46) операционка какая? 1ска версия платформы какая и скольки разрядная?
48 Ychenik1c
 
07.07.21
17:13
Windows 2016 x64
1c 32-битная 8.3.18.1383 x86
49 Ychenik1c
 
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
50 OldCondom
 
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) не удивлюсь, если на месте звездочек - зведочки
52 Kassern
 
08.07.21
09:06
(51) не ну это уже перебор))