БД Firebird. Подключение, чтение, просмотр - сделать по-быстрому

28.12.16

Разработка - Инструментарий разработчика

Заметки и опыт по итогам решения одной задачи. Подключение к БД Firebird, чтение/просмотр структуры таблиц, чтение/просмотр данных БД.

Скачать файлы

Наименование Файл Версия Размер
Firebird Viewer
.epf 18,62Kb
131
.epf 18,62Kb 131 Скачать
Дистрибутив драйвера ODBC
.exe 994,07Kb
56
.exe 994,07Kb 56 Скачать
Дистрибутив сервера СУБД Firebird
.exe 4,33Mb
34
.exe 4,33Mb 34 Скачать

Понадобилось мне тут данные вытащить из одной программки, написанной на БД Firebird. И оказалось, что да, в интернете полно примеров, где маститые гуру, выпятив губу, демонстрируют новичкам, как подключаться к Огнептице, но всё обрывочно и скомканно. На ИС нашлось несколько публикаций, вроде //infostart.ru/public/85844/ - но и там полезного крайне мало. Поскольку иногда бывает надо быстро "взять и сделать", то предлагаю материалы, которые помогли мне выполнить задачу, а также решение, которое достаточно универсально, чтобы применяться в самых разных жизненных случаях. Всё это без привязки к конкретному софту вроде всяких автосервисов или запчастей. Рассказываю на прикладном уровне (т.е. подробного изложения, чем ODBC отличается от ADO DB или что такое MDAC, не ждите). Есть задача "прочитать данные", её решаем.

FB здесь и далее, понятно дело, не фейсбук)

Описывается случай FB 2.0 как наиболее общий, обычно справедливо и для более поздних версий.

Необходимое:

1. На компьютере (на сервере либо локальном ПК, откуда идёт подключение к FB) должен быть источник данных ODBC, позволяющий работать провайдеру. Его один раз надо установить, зарегистрировать и запустить. При установке FB некоторых дистрибутивов он ставится сразу, но, увы, не всегда. Мы из 1С подключаемся к этому провайдеру и командуем, что нам надо сделать с БД FB. Дальше - не наша забота.  Нас даже, в общем, не волнует граница ответственности между провайдером и собственно сервером FB. Провайдеров много, не все одинаково полезны) Дистрибутив того, который легко "взлетел" у меня, прилагаю.

2. На компьютере (на сервере либо локальном ПК, откуда идёт подключение к FB) желательно установить сервер FB. Запускать его после инсталляции как службу не обязательно.  Сам по себе тихо крутится, интерфейса обычно не имеет. Установка его полезна тем, что даёт нам некоторые примитивные консольные утилиты для управления БД. Есть действия, которые вообще без этих утилит не сделать. Ну и документация там тоже есть. Дистрибутив прилагаю.

3. Собственно читаемая база - один или несколько файлов, обычно формата FDB или GDB. Сама база может лежать любом месте - главное, правильно указать путь; но лучше всё же (во избежание лишних причин для сбоев) положить её локально.

Замечу, что можно спокойно ставить под 64-разрядную ОС обычный 32-разрядный провайдер. У меня как раз такой вариант и работает.

Порядок действий.

1. Устанавливаем провайдер (драйвер ODBC), устанавливаем сервер FB. Это всё довольно просто - запустили инсталлятор, ответили на пару вопросов. Подвохов там нет. Ставим/распаковываем базу куда-то туда, куда у нас и 1С в нашем аккаунте полный доступ. Единственно что, лучше не на примапленный диск.
2. Настраиваем авторизацию. Тут есть подводный камень: помимо всякой вторичной авторизации, которую обеспечивают софтины на FB, есть собственно авторизация к БД. По умолчанию бывает 3 варианта - либо будет логин SYSDBA и пароль "masterkey" (учтите, иногда его обрезает до "masterke", 8 символов); либо сгенерится некий пароль и запишется в подпапку /OPT того места, куда ставили сервер FB, в спецфайлик; либо просто что-то втихаря сделает. И вот если случится так, то используйте утилиту GSEC из подпапки /BIN установленного FB, см. скрин и пояснения на нём (подробности см. в OdbcFb.chm. Советую поменять пароль на какой-то ваш, чтобы уже не путаться потом.
2. В 1С создаём объект ADODB.Connection и работаем через него. Ему передаём текст запроса на языке FB, от него получаем выборку результата этого запроса, т.е. штатно работаем с FB из 1С.
Для успешного соединения с базой самое важное - правильно скомпоновать строку команды соединения. Эта строка включает указание провайдера, авторизацию, настройки соединения. Именно с ней обычно возникают проблемы. Подробное описание этого дела см. в файле OdbcFb.chm из папки Firebird_ODBC в разделах "Connection attributes" и "Connection examples". Свойство "CursorLocation" желательно ставить равным 3, свойство "ConnectionTimeOut" я ставлю равным 180.

Есть любители работать через DSN - по сути, это поименованное пакетное описание всех тонкостей подключения. В этом случае сначала в настройках ODBC создаётся системный/пользовательский DSN, где всё прописывается один раз, и уже на его имя ссылаются в строке подключения. Я этим не пользуюсь, поэтому подробно рассказывать не буду. Отмечу, что DSN полезен, когда соединение из 1С не срабатывает - можно попробовать сделать DSN с такими же настройками и пощёлкать "Проверить соединение" - если не взлетит и оно, тогда проблема с драйвером и СУБД, с доступом итд, а если сработает - то накосячено что-то в коде 1С.

Пример подключения и инициализации переменной модуля:

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


Запрос к БД FB представляет собой по сути диалект SQL, поэтому в нём можно разобраться, просто зная язык запросов 1С. Есть токность: алиасы регистрочувствительны.

Я сделал единую функцию для передачи запросов в неё:

&НаКлиенте
Функция ВыполнитьЗапрос(тз)
Попытка
	мрез=Новый Массив;
	Если мСоединение=Неопределено Тогда Возврат мрез КонецЕсли;
	рез=мСоединение.Execute(тз);
	Пока не рез.EOF() Цикл
		ОбработкаПрерыванияПользователя();
		соот=Новый Соответствие;
		Для й=0 По рез.Fields.Count-1 Цикл
			итем=рез.Fields(й);
			соот.Вставить(СокрЛП(итем.Name),итем.Value);
		КонецЦикла;
		мрез.Добавить(соот);
		рез.MoveNext();
	КонецЦикла;
	Возврат мрез;
Исключение
	Сообщить("Ошибка при выполнении запроса. Текст запроса:"+Символы.ПС+тз+Символы.ПС+"Описание ошибки: "+ОписаниеОшибки());	
	Возврат Новый Массив;
КонецПопытки;
КонецФункции

Разумеется, для написания запросов надо знать имена и свойства таблиц БД, имена и типы их полей, а также конкретику наполнения. Для этого есть множество вьюшек, отдельных утилит и приблуд, но я написал свою исключительно потому, что хотелось подробнее разобраться и сразу иметь возможность как-то обработать прочитанные данные. Поэтому прилагаю обработку под УФ, которая умеет читать данные о таблицах и их полях, читать содержимое таблиц, исполнять ваши запросы (эдакая мини-консоль запросов FB). Всё в ней изложенное спокойно заработает и на обычных формах.

Закончив работу, не забывайте сделать мСоединение.Close() или просто очистить переменную.

Пока не копал вопрос реляционных связей между таблицами, ключей и индексов. Будет время - постараюсь дополнить эту публикацию и приложенную обработку.

Типы полей имеют цифровую нотацию, которая в обработке представлена - как преобразование в более человекочитаемый вид.

Вот, собственно, и всё. Чтобы быстро изучить базу и вытащить из неё нужные данные, больше ничего и не требуется.

Поскольку ресурсы Интернета имеют свойство исчезать, а ссылки - биться, то основной софт вложен в публикацию.

Полезные ссылки:

http://www.ibase.ru/components/ - разные дистрибутивы софта; наиболее советую http://www.firebirdsql.org/en/odbc-driver/

http://www.firebirdsql.com/file/documentation/reference_manuals/user_manuals/Firebird-1.5-QuickStart-Russian.pdf  - быстрый обзор;

http://www.firebirdsql.org/file/documentation/reference_manuals/Firebird_Language_Reference_RUS.pdf - полное руководство;

http://firebirdsql.su/doku.php?id=sistemnye_tablicy - сведения о системных таблицах (метаданные базы FB), и вообще там много полезного.

НЕ советую связываться с IBProvider. Эта навороченная штуковина себе на уме, легко и просто - с ней может не выйти, возни с ней бывает неоправданно много.

Удачи в интеграции) Авось кому пригодится.

Firebird обмен чтение БД Firebird Огнептица

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    119932    656    389    

701

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    7011    20    6    

37

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    3250    10    1    

31

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177344    1070    0    

846

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99205    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    17914    6    8    

38

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    27945    3    10    

14

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23491    15    15    

31
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DrAku1a 1678 09.12.16 03:38 Сейчас в теме
Делал такое через самописную ВК (Native API, на Delphi, использует gdi32.dll), не требует дополнительных настроек на клиенте и установки. Если 1С и FB на разных серверах - не требует никаких танцев с бубном. Единственный минус - работает медленно.
2. Yashazz 4707 09.12.16 15:19 Сейчас в теме
(1) Так это ещё надо заморачиваться, ВК писать... И не на каждом компе гарантированно взлетит, ВК, они такие.
3. 1С_Мастер 61 29.12.16 10:29 Сейчас в теме
А внешние источники данных огнептицу не умеют?
4. Yashazz 4707 29.12.16 11:03 Сейчас в теме
(3) Теоретически должны бы, на практике, лично у меня, не взлетело. Провайдер, вишь, не тот.
5. fuel56 45 27.06.18 11:16 Сейчас в теме
Спасибо за информацию.
6. richchernov 04.03.20 15:10 Сейчас в теме
Сутки уже долблю, со всех сторон попробывал, в т.ч. и Ваш вариант - не работает. Пишет:
1.
Ошибка при установке соединения: {ВнешняяОбработка.ВнешняяОбработка3.Форма.Форма.Форма(39)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [ODBC Firebird Driver]Unable to connect to data source: library 'C:\Program Files (x86)\Firebird\Firebird_2_5\bin\fbclient.dll' failed to load
2.
Ошибка при установке соединения: {ВнешняяОбработка.ВнешняяОбработка3.Форма.Форма.Форма(39)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [ODBC Firebird Driver]Unable to connect to data source: library 'gds32.dll' failed to load
3.
Ошибка при установке соединения: {ВнешняяОбработка.ВнешняяОбработка3.Форма.Форма.Форма(39)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [ODBC Firebird Driver]Unable to connect to data source: library 'C:\Users\rich\Desktop\Обучение\IBExpert\IBEUDB\fbembed.dll' failed to load
4.
Ошибка при установке соединения: {ВнешняяОбработка.ВнешняяОбработка3.Форма.Форма.Форма(39)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Devart][ODBC][Firebird]Cannot load client library: C:\Program Files (x86)\Firebird\Firebird_2_5\bin\fbclient.dll

Ещё долго могу перечислять...
Платформа 8.3.16.1224
7. Yashazz 4707 04.03.20 22:25 Сейчас в теме
(6) Первое, что приходит в голову - у вас ADO-движок и 1С одинаковой разрядности?
8. richchernov 05.03.20 01:40 Сейчас в теме
(7) Большое спасибо за ответ...И, да, Вы правы. Я нашел это решение ещё через 3 часа после того, как написал этот комментарий, но сначала потрахался с *.udl, понял, что подключение происходит только в 32-х разрядном режиме, запуская принудительно через oledb32 с помощью rundll32 из папки syswow64. Потом ломал голову как всё это прописать в свойствах подключения, а потом просто установил 32-х разрядную версию 1С и заработало.
9. vat-74 166 21.10.20 10:25 Сейчас в теме
Очень интересная ситуация:
32 и 32 работает, но 1с считает себя ломаной и вылетает.

Поставил Огнептицу 64 и 1с 64 и выдает ошибку

Ошибка при установке соединения: {ВнешняяОбработка.ПросмотрДанныхFireBird.Форма.Форма.Форма(332)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
Строка соединения: driver=Firebird/InterBase® driver;
Dialect=3;
CHARSET=NONE;
Uid=SYSDBA;
Pwd=1;
Dbname=C:\1C\2012.GDB
10. Yashazz 4707 21.10.20 10:54 Сейчас в теме
(9) Навскидку - не знаю. Возможно, речь о доступе не вообще к движку, а конкретно к базе? Запароленная, может?
11. vat-74 166 21.10.20 11:00 Сейчас в теме
(10)
Проверил через утилиту. Подключение произошло.
Прикрепленные файлы:
13. Yashazz 4707 21.10.20 11:17 Сейчас в теме
(11) Кодировка передаваемых авторизационных данных не может шалить?
12. Yashazz 4707 21.10.20 11:16 Сейчас в теме
14. vat-74 166 21.10.20 12:03 Сейчас в теме
(12)
Новые данные:
Если пароль поменять на masterkey или masterke, то выходит другая ошибка

Ошибка при установке соединения: {ВнешняяОбработка.ПросмотрДанныхFireBird.Форма.Форма.Форма(334)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [ODBC Firebird Driver]file C:\1C\ISC4.GDB is not a valid database
15. vat-74 166 21.10.20 13:13 Сейчас в теме
Походу бубны не прокатят

Внутренний формат хранения данных в firebird специфичен для платформы. Файл базы, созданный на x86, не будет валидным на x64, и наоборот.

Для корректной конвертации вам придётся сделать backup на x86, и restore на x64. Просто скопированы файл базы заставить работать не получится.

Вот аналогичный вопрос на enSO: Statement failed, SQLSTATE = -922 my_database.gdb is not a valid database

16. dnikolaev 177 22.11.20 12:15 Сейчас в теме
17. nazirovramzil 18.09.21 09:17 Сейчас в теме
Здравствуйте, не подскажете, можно ли из 1с получить список соединений к серверу fb и удалить их?
Оставьте свое сообщение