Ошибка подключения к базе данных firebird

The difference is that connecting directly to a database file doesn’t require a password, it will even ignore the password, and just use the provided user to know which privileges to apply.

Without a hostname, ISQL will by default use Firebird embedded mode, and not the server. To compare, try using isql employee.fdb (or isql employee), it will just login with your current OS username, while isql localhost:employee will fail with a ‘Your user name and password are not defined’.

It looks like you specified a different password than the default of masterkey, or somehow the sysdba account wasn’t initialized. I recall there was a problem with the installer of an earlier Firebird 3 version, but I don’t think 3.0.2 should be affected by this (or at least: it worked for me).

If the SYSDBA account wasn’t initialized, then follow the steps of the Firebird 3 release notes, section Initializing the Security Database:

Initialization Steps

Initialization is performed in embedded mode using the isql utility.
For an embedded connection, an authentication password is not required
and will be ignored if you provide one. An embedded connection will
work fine with no login credentials and “log you in” using your host
credentials if you omit a user name. However, even though the user
name is not subject to authentication, creating or modifying anything
in the existing security database requires that the user be SYSDBA;
otherwise, isql will throw a privilege error for the CREATE USER
request.

The SQL user management commands will work with any open database.
Because the sample database employee.fdb is present in your
installation and already aliased in databases.conf, it is convenient
to use it for the user management task.

  1. Stop the Firebird server. Firebird 3 caches connections to the security database aggressively. The presence of server connections may
    prevent isql from establishing an embedded connection.

  2. In a suitable shell, start an isql interactive session, opening the employee database via its alias:

    > isql -user sysdba employee
    
  3. Create the SYSDBA user:

    SQL> create user SYSDBA password 'SomethingCryptic';
    SQL> commit;
    SQL> quit;
    
  4. To complete the initialization, start the Firebird server again. Now you will be able to perform a network login to databases,
    including the security database, using the password you assigned to
    SYSDBA.

Where ‘SomethingCryptic’, should be your password.

If a SYSDBA user was created, you will need to change its password if you no longer remember what you set. Follow the same steps, but in step 3 do:

SQL> alter user SYSDBA set password '<new password>';
SQL> commit;
SQL> quit;

If this gives an error «record not found for user: SYSDBA», make sure you are really connected as SYSDBA, otherwise retry the original step 3. Not having admin access will behave as if the user doesn’t exist, so the error is the same if the user really doesn’t exist, or if you are connected with an unprivileged user.

Опишу свой случай, схожий на ваш, может вам поможет или тому кто зайдет через поиск.
По рабочей необходимости перешел с windows 7 на windows 10, и вот решил возобновить проектную деятельность под Firebird+IBExpert+Delphi.
Установил Firebird (Firebird-4.0.2.2816-0-x64.exe), затем IBExpert (2022.3.4.1) и финалочкой Delphi 11.2 (lite 17.2). Пути установки по-умолчанию. Ничего не предвещало беды. Через эксперта попробовал создать новую БД — ошибка! По тексту догадался, что защита файлов субд от записи.
Установил Firebird в другой каталог. Пробую снова — ошибка, только уже другая. Пробую через isql создать базу — создается, прописываю ее в алиас (databases.conf) и подключаюсь снова через isql — норм. Странно, но едем дальше. Зарегистрировал в эксперте созданную базу, пробую подключиться к ней по темже реквизитам и ловлю следующие сигналы:

Attempting to connect to:

Unsuccessful execution caused by an unavailable resource.
unavailable database.
SQLCODE: -904
GDSCODE: 335544375

Unsuccessful execution caused by an unavailable resource.
Cannot attach to services manager.
SQLCODE: -904
GDSCODE: 335544792

Матюки и запросы к гуглу не дали ожидаемых результатов.
Отчаившись чтото вразумительное найти, я решил поискать либу gds32.dll и понять, может она затерялась или еще чего. И нашел их аж 4 шт.!

c:WindowsSystem32GDS32.DLL
c:WindowsSysWOW64gds32.dll
c:UsersPublicDocumentsEmbarcaderoInterbaseredistInterBase2020win32gds32.dll
c:Program Files (x86)EmbarcaderoStudio22.0InterBase2020bin

Вот те на, какой еще InterBase2020, который я даже не устанавливал. И потом дошло, что он установился вместе с Delphi 11.2.
Я переустановил делфи (снес все доп. пакеты), удалил все gds32.dll, и заново переустановил Firebird. Все, теперь все работает отлично в эксперте: и создает, и регистрирует и подключается.

Вывод: небрежная установка новой незнакомой версии делфи (полная установка) сломала отлаженную годами схему :) и подарила мне 2 вечера отличного времяпровождения, вместо плодотворного труда.

I’ve got a seemingly unique issue on just one computer in the company (had to be my boss’s). I’ve got a program from Borland C++ that uses a TSQLConnection. It connects to a local Firebird server 2.1.1.17910 running as an application. The other computers work fine.

It will absolutely not connect on this one lappy (local server) for anything. I remember he always had trouble with InterBase when it was installed as well. I think he installed up to 7.5 possibly. It’s gone now and I went through and wiped out any old GDS32.dll files and updated them with the FireBird ones, and the connection is using fbclient.dll anyways…

I tried uninstalling and reinstalling FB and running it as a service. Didn’t work.

I went into etc/services and added in this line:

gds_db           3050/tcp                           #Firebird

No dice.

Sticking «localhost:» in front of the database location gets this error

Unable to complete network request to host «localhost».
Failed to establish a connection.

I checked netstat, it’s listening on 127.0.0.1 port 3050…

Tried sticking «127.0.0.1:» before the database location, I get:

connection rejected by remote interface

Tried taking 127.0.0.1 or localhost out entirely and just using the database location, which is the right location, I get

Unavailable Database.

The exact same CD works fine on other machines. I tried sticking «localhost», «127.0.0.1», and nothing at all in front of the database location and all connect fine on other machines.

I’ve made him turn his firewall off, still no dice… This problem has been going on for a long time and I’m at the end of my rope. I’ve tried everything I can possibly think of. It works fine on my computer, blank test computers, for the beta testers… everybody except my boss. Any help would be vastly appreciated.

  

ЧессМастер

03.03.21 — 18:30

Всем доброе время суток !

Ситуация следующая.

Есть база Firebird на компе в сети (пропускная система).

Надо к ней подключиться  из 1С.

Через консоль с компа все отлично подключается — то есть по идее все нормально с правами, драйверами и т.п.

Но через 1С хоть ты тресни никак не хочет.

Текст кода

    Conn = Новый COMОбъект(«ADODB.Connection»);

    

    Conn.ConnectionString = «DRIVER=Firebird/InterBase(r) driver;» +

     «DBNAME=KD-SKUD-01:C:Program Files (x86)ENTServerDBCBASE.FDB;» +  // Исправьте на свой IP, порт и путь к базе данных !

     «UID=SYSDBA;» +                                     // Исправьте на свое имя пользователя !

     «PWD=masterkey;» +                                  // Исправьте на правильный пароль !

     «CHARSET=WIN1251;» +                                // Исправьте на свою кодировку подключения !!!

     «C:Program Files (x86)FirebirdFirebird_2_1binfbclient.dll»;

    

     Conn.ConnectionTimeout = 180;

     Conn.CursorLocation = 3;

     // Подключаемся к базе данных

      

     Попытка

        Conn.Open(Conn.ConnectionString);

        
        Сообщить(«успешно подключились к базе проходной»);

        

     Исключение

        Сообщить(«Не удалось выполнить подключение » + ОписаниеОшибки());

     КонецПопытки;    

Выдает ошибку

«Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию»

При этом через консоль Fireboird  с этого же компа под этим же пользователем с таким расположением DB все подключается.

В чем может быть дело ?

  

Вафель

1 — 03.03.21 — 18:50

не установлен драйвера одбу

  

ЧессМастер

2 — 03.03.21 — 20:16

(1) Установлен.

1. Панель управленияВсе элементы панели управленияАдминистрирование

Firebird/InterBase(r) driver

Версия 2.00.01.152

2. Консолью Firebird подключение к базе идет. Если бы драйвера не было то подключение консолью бы не проходило.

  

ДенисЧ

3 — 03.03.21 — 20:31

Сейчас выяснится, что этот код &НаСервере…

  

acht

4 — 03.03.21 — 20:47

64×32

  

Кирпич

5 — 03.03.21 — 20:48

мож «CLIENT=C:Program Files (x86)FirebirdFirebird_2_1binfbclient.dll»;

  

vovastar

6 — 03.03.21 — 21:02

(0) старый добрый Firebird…аж вздрагиваю при его упоминании…

  

Вафель

7 — 03.03.21 — 21:15

консоль fb не юзает одбц, а нативно подкючается

  

ЧессМастер

8 — 04.03.21 — 11:54

(3) Да в этом дело оказалось.

Пробовал это сделать в модуле объекта отчета на СКД. Сделал для проверки на клиенте — все работает.

Еще один момент можешь подсказать ?

При подключении внешнего источника данных с этой же строкой подключения выдает сообщение

Ошибка ODBC. SQLSTATE: IM002

Номер ошибки: 0

Описание: [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию

Я правильно понимаю что для того чтобы подключить внешний источник данных надо

1. Драйвер ставить на сервере 1С

2. Драйвер ставить той же разрядности как и сервер 1С.

  

ЧессМастер

9 — 04.03.21 — 11:54

(6) Что делать — БД пропускной системы на нем крутится.

  

Gimalaj

10 — 04.03.21 — 12:29

(8) >> Я правильно понимаю что для того чтобы подключить внешний источник данных надо…

Да, все верно.

  

Gimalaj

11 — 04.03.21 — 12:32

А вообще, никогда не понимал людей, пишущих: ConnectionString = «DRIVER=такой-то, DBNAME=такая-то, UID=такой-то и т.д.».

Намного проще создать в системе DSN, а в коде написать «dsn=такой-то».

  

ДенисЧ

12 — 04.03.21 — 12:35

(11) Хорошо, что мне не приходилось править твой такой код…

  

Gimalaj

13 — 04.03.21 — 12:36

(12) ОК, аргументируй. Что не так?

  

ДенисЧ

14 — 04.03.21 — 12:38

(13) Лишние движения телом.

  

ДенисЧ

15 — 04.03.21 — 12:39

И переносимость. Забудешь ты притащить в прод свой дсн и ага.

  

Gimalaj

16 — 04.03.21 — 12:41

(15) Ну это не аргумент. Точно так же на продуктовом сервере можно забыть установить драйвер, забыть изменить имя/логин/пароль для базы и т.д.

  

ЧессМастер

17 — 04.03.21 — 20:58

(11) >Намного проще создать в системе DSN, а в коде написать «dsn=такой-то».

Если тебе не нравится писать в коде «DBNAME=такая-то» то никто не мешает хранить значение «DBNAME=такая-то» где угодно — в табличной части, в регистре сведений и т.п.

  

ЧессМастер

18 — 04.03.21 — 21:02

(10) При работе на сервере появился новый прикол

Ошибка при вызове метода контекста (УстановитьСоединение): Ошибка ODBC. SQLSTATE: 08004

Номер ошибки: -902

Описание: [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

При этом подключение идет под теми же данными как и с локальной машины. То есть при подключение с локальной машины подключение проходит, на сервере под этими же данными нет.

Что бросается в глаза — версия драйвера на сервере другая. Может при изменении версии драйвера поменялся синтаксис подключения ?

  

Fram

19 — 05.03.21 — 00:33

(18) может все таки в разные базы ломишься?.. если что диск С на клиенте не всегда равно диск С на сервере

  

ЧессМастер

20 — 05.03.21 — 11:37

(19) >может все таки в разные базы ломишься

Да нет в одну и ту же.

DBNAME=KD-SKUD-01:C:Program Files (x86)ENTServerDBCBASE.FDB

Это расположение БД пропускной системы на другом компе в сети. Если я со своего компа присоединяюсь с клиента то все нормально. Если с сервера с такой же строкой подключения выдает

Ошибка при вызове метода контекста (УстановитьСоединение): Ошибка ODBC. SQLSTATE: 08004

Номер ошибки: -902

Описание: [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

Как может быть что под однги ми и теми же учетными данными

с клиента пускает а с сервера нет ? Это бред какой то реальный.

  

ЧессМастер

21 — 05.03.21 — 11:41

Вот это прикол

«Оказывается файл базы данных созданный в Firebird 32 bit, не открывается в Firebird 64 bit.»

Возникает вопрос — как же подключаться к Firebird на сервере если там 64 разрядная 1С ? И 32 разрядный драйвер Firebird не сработает.

  

Пузан

22 — 05.03.21 — 11:43

(21) Ставить 64 разряда драйвер. Нет?

  

ЧессМастер

23 — 05.03.21 — 11:59

(22) Смотри что получается

Сейчас стоит 64 разрядный драйвер.

При попытке подключения «на сервере» выдает

Ошибка при вызове метода контекста (УстановитьСоединение): Ошибка ODBC. SQLSTATE: 08004

Номер ошибки: -902

Описание: [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

Это происходит по причине того что 64 разрядный драйвер с сервера пытается подключиться в базу Firebird которая создана в 32 разрядном приложении.

И при этом возникает вот этот нюанс

«Оказывается файл базы данных созданный в Firebird 32 bit, не открывается в Firebird 64 bit.»

При этом 64 разрядный сервер не ставит 32 разрядный драйвер Firebird. Который нужен для обхода ограничения

>»Оказывается файл базы данных созданный в Firebird 32 bit, не открывается в Firebird 64 bit.»

  

Пузан

24 — 05.03.21 — 12:04

Ну значит капец. С твоей базой можно работать только через 32 разрядную 1С.

  

Вафель

25 — 05.03.21 — 12:04

  

ЧессМастер

26 — 05.03.21 — 18:21

(25) Так там конкретики нет

> я наткнулся на веб-сайт, который предложил изменить реестр для решения другой проблемы.

На какой сайт ?

>Я закончил создание соединения ODBC непосредственно под HKLMSoftwareODBC

Что он конкретно менял ?

  

ЧессМастер

27 — 05.03.21 — 18:38

У кого то работает подключение к Firebird через внешние источники данных на сервере 64 разрядном ?

  

ДедМорроз

28 — 06.03.21 — 13:15

Прекрасно можно подключаться к 32 из 64 и наоборот,только разрядность установленного odbc драйвера должна совпадать с разрядностью приложения.

Ставим на сервер odbc64 и в путь.

  

ДедМорроз

29 — 06.03.21 — 13:17

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

  

ЧессМастер

30 — 09.03.21 — 13:23

(28) >Прекрасно можно подключаться к 32 из 64 и наоборот,только разрядность установленного odbc драйвера должна совпадать с разрядностью приложения.

Ничего подобного

В (23) это подробно описано

Сейчас стоит 64 разрядный драйвер.

При попытке подключения «на сервере» выдает

Ошибка при вызове метода контекста (УстановитьСоединение): Ошибка ODBC. SQLSTATE: 08004

Номер ошибки: -902

Описание: [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

Это происходит по причине того что 64 разрядный драйвер с сервера пытается подключиться в базу Firebird которая создана в 32 разрядном приложении.

И при этом возникает вот этот нюанс

«Оказывается файл базы данных созданный в Firebird 32 bit, не открывается в Firebird 64 bit.»

Не откроет базу данных созданную в Firebird 32 bit с сервере где установлен драйвер Firebird 64 bit.

А 32 разрядный драйвер Firebird на сервер 64 bit не ставится.

  

ЧессМастер

31 — 09.03.21 — 13:26

(28) >Прекрасно можно подключаться к 32 из 64 и наоборот,

Нет нельзя.

При попытке подключения из 64 в 32 выдает

Ошибка при вызове метода контекста (УстановитьСоединение): Ошибка ODBC. SQLSTATE: 08004

Номер ошибки: -902

Описание: [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

Причина в том что

«Оказывается файл базы данных созданный в Firebird 32 bit, не открывается в Firebird 64 bit.»

  

Вафель

32 — 09.03.21 — 13:59

(31) фб должен быть 32 бит, а одбц — 64

  

Вафель

33 — 09.03.21 — 14:01

ты напрямую к файлу обращаешься, а не к серверу чтоли?

  

Кирпич

34 — 09.03.21 — 15:16

В сообщении об ошибке явно намекают про юзера и пароль. При чем тут 64 и 32. Фигня какая то. С правами надо разбираться.

  

Кирпич

35 — 09.03.21 — 15:20

Можно же явно указать клиента в параметрах подключения. Поставить ODBC 64 и клиента 64 и всё будет работать.

  

Gimalaj

36 — 09.03.21 — 15:45

(31) Значит, что-то у тебя не так. У меня точно такая же ситуация: база изначально работала с х32-приложением, потом понадобился доступ к ней из 1С. В настоящее время мы работаем с этой базой данных как из 32-разрядного дельфёвого приложения, так и из 64-разрядного сервера 1С.

  

Gimalaj

37 — 09.03.21 — 15:47

Создай на сервере, где развернут сервер 1С источник DSN и протестируй оттуда.

  

Кирпич

38 — 09.03.21 — 15:49

(37) Да автор уже, наверное, доложил начальству о фатальной ошибке в Fierbird и успокоился :)

  

Кирпич

39 — 09.03.21 — 15:50

уж неделя прошла

  

Gimalaj

40 — 09.03.21 — 15:53

(39) Ну, последнее сообщение он два часа назад написал.

  

ЧессМастер

41 — 09.03.21 — 16:06

(32) >фб должен быть 32 бит, а одбц — 64

Так и есть.

  

ЧессМастер

42 — 09.03.21 — 16:08

(33)

>ты напрямую к файлу обращаешься, а не к серверу чтоли?

К какому серверу ? Я подключаюсь к файлу

DBNAME=KD-SKUD-01:C:Program Files (x86)ENTServerDBCBASE.FDB

Этот файл лежит на компе с пропускной системой. И там база 32 bit.

При подключении с локальной машины при использовании драйвера Firebird 32 bit все проходит отлично.

Но как только подключение к этому же файлу идет с использованием 64 разрядного драйвера Firebird (через сервер 1С) валится ошибка

При попытке подключения из 64 в 32 выдает

Ошибка при вызове метода контекста (УстановитьСоединение): Ошибка ODBC. SQLSTATE: 08004

Номер ошибки: -902

Описание: [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

  

ЧессМастер

43 — 09.03.21 — 16:09

(34) > При чем тут 64 и 32

При том что

«Оказывается файл базы данных созданный в Firebird 32 bit, не открывается в Firebird 64 bit.»

А именно этот фокус пытается провернуть 64 разрядный драйвер когда лезет в 32 разрядную базу Firebird.

  

ЧессМастер

44 — 09.03.21 — 16:12

(35) >Поставить ODBC 64 и клиента 64 и всё будет работать.

Нет не будет.

Еще раз

Как только клиент (драйвер) меняется с 32 разрядного на 64 разрядный и идет попытка подключения к 32 разрядной базе Firebird валится ошибка

Ошибка при вызове метода контекста (УстановитьСоединение): Ошибка ODBC. SQLSTATE: 08004

Номер ошибки: -902

Описание: [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

Обход этот ошибки только

1. Конвертация базы Firebird в 64 разрядную

2. Работа с 32 разрядной базой Firebird с клиента с использованием драйвера 32 bit

3. Работа с 32 разрядной базой Firebird из файловой базу с клиента с использованием драйвера 32 bit.

  

ЧессМастер

45 — 09.03.21 — 16:14

(35) >Можно же явно указать клиента в параметрах подключения.

Что ты укажешь явно ?

На сервере 1С который 64 bit

1. Драйвер 32 разрядный не ставится.

2. При попытке подключения из 64 сервера 1С в 32 базу Firebird выдает

Ошибка при вызове метода контекста (УстановитьСоединение): Ошибка ODBC. SQLSTATE: 08004

Номер ошибки: -902

Описание: [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

  

ЧессМастер

46 — 09.03.21 — 16:16

Я перечитал кучу статей на Инфостарте на эту тему.

Народ только такие способы нашел

1. Конвертация базы Firebird в 64 разрядную

2. Работа с 32 разрядной базой Firebird с клиента с использованием драйвера 32 bit

3. Работа с 32 разрядной базой Firebird из файловой базу с клиента с использованием драйвера 32 bit.

Напрямую с сервера 64 bit в базу Firebird 32 bit никто не победил.

  

ЧессМастер

47 — 09.03.21 — 16:22

(37) >Создай на сервере, где развернут сервер 1С источник DSN и протестируй оттуда.

Если речь идет про ВнешниеИсточникиДанных то при подключении из 1С в базу Firebird используется как раз драйвер 64 bit с сервера 1С.

С такой же ошибкой как это происходит при попытке подключиться обработкой на сервере.

Те же грабли только в профиль.

Ошибка при вызове метода контекста (УстановитьСоединение): Ошибка ODBC. SQLSTATE: 08004

Номер ошибки: -902

Описание: [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

  

ЧессМастер

48 — 09.03.21 — 16:27

(36) >В настоящее время мы работаем с этой базой данных как из 32-разрядного дельфёвого приложения, так и из 64-разрядного сервера 1С.

Возможно в вашем приложении нет такого жесткого ограничения какое есть у Firebird

>»Оказывается файл базы данных созданный в Firebird 32 bit, не открывается в Firebird 64 bit.»

  

Кирпич

49 — 09.03.21 — 16:43

С какого перепугу «Оказывается файл базы данных созданный в Firebird 32 bit, не открывается в Firebird 64 bit.»

Сервер же на другом компе. Ему пофиг разрядность клиента. Он же через сеть общается. У меня вот работает сервер на 32 и подключаюсь я 64 битным клиентом.

  

Кирпич

50 — 09.03.21 — 16:49

С правами там что то. Написано же черным по белому.

  

Gimalaj

51 — 09.03.21 — 17:04

(47) Речь в (37) идет НЕ про внешние источники данных.Речь там идет вообще не про 1С.

Открой в Виндоус «Панель управления» — «Администрирование» — «Источники данных ODBC (64-разрядная версия)». Создай DSN и в созданном DSN ты сможешь протестировать соединение с Firebird.

  

Gimalaj

52 — 09.03.21 — 17:05

(50) Черным по белому там написано не про права, а про логин/пароль.

  

Gimalaj

53 — 09.03.21 — 17:20

(48) «Упрямство — первый признак тупости» (с) Глеб Жеглов, «Место встречи изменить нельзя», по-моему 3-я серия.

  

Кирпич

54 — 09.03.21 — 17:32

(52) Ну как бы нет имени и пароля — нет прав

  

Garykom

55 — 09.03.21 — 17:37

(0) Лично я использую прокладку на Golang для работы с внешними БД из 1С

Ибо внешние источники данных слегка задолбали, на сервере часто прав нету — злобные админы

  

Garykom

56 — 09.03.21 — 17:38

(55)+ Если надо то могу сваять и выложить для Firebird

  

Garykom

57 — 09.03.21 — 17:39

(56)+ https://github.com/nakagami/firebirdsql

суть обычный exe (или бинарник под линукс) который запускаешь с параметрами, передав ему параметры подключения, текст запроса sql и имя файла куда писать результат

и все в файле результат или в csv или в json

  

Черепахыч

58 — 09.03.21 — 17:47

я тоже недавно парился с этой проблемой

Смотри. у меня тоже сервер 64 бит.

на клиенте ставлю 32 бит.

Драйвер да.. 32 битный. Firebird_ODBC_2.0.5.156_Win32.exe или gds32.dll

В моем случае работает только на клиенте.

Процедуру подключения, использование драйвера пишу на #клиенте

на всякий случай кидаю тебе свой 100% рабочий код

СКУД система у меня  «Тайм контрол»

&НаКлиенте

Процедура Рефф_ЗаполнитьTimeControl(Команда)

    Если объект.Табель.Количество()>=0 тогда

        Если Вопрос(«Очистить табличную часть?»,РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Да тогда

            объект.Табель.Очистить();

        Конецесли;

    Конецесли;    

                  FBDBAddr  = «192.168.2.5/3053:C:Program Files (x86)TimeControlBASEOKO.FDB»;    

    

    //где 192.168.2.5/3053 — адрес удаленного сервера с софтиной time Control

    //C:Program Files (x86)TimeControlBASEOKO.FDB» — путь базе на удаленном сервере (это не обязательно локальный путь!)

    

         //FBDBAddr  = «192.168.2.5/3053″;//:C:Program Files (x86)TimeControlBASEOKO.FDB»;

    FBUserName = «MEGA»;

    FBUserPass= «STMEGA21»;

    
    ConnectionБД =Новый COMОбъект(«ADODB.Connection»);

    

    ConnectionБД.ConnectionString=»driver=Firebird/InterBase(r) driver;

    //|Dialect=3;

    |CHARSET=NONE;

    |Uid=MEGA;

    |Pwd=STMEGA21;

    |Dbname=»+СокрЛП(FBDBAddr);

    ConnectionБД.ConnectionTimeOut=15; // и хватит

    ConnectionБД.CursorLocation=3;

    

    Попытка

        ConnectionБД.Open(ConnectionБД.ConnectionString);

        //Сообщить(«Соединение успешно установлено!»);

    Исключение

        Сообщить(«Ошибка при установке соединения: «+ОписаниеОшибки());

        мСоединение=Неопределено;

        возврат;

    КонецПопытки;

    //

         //SELECT U.FULLNAME, U.TABNUM, U.DEVICE_UID, G.WORKDATE, G.FACT_MIN_WORK FROM GLOBAL_WORK_BY_DAY(:BDATE, :FDATE,-1,-1,»,»,0,’0:00′,’0:00′,0,1,0) G LEFT JOIN USERS U ON (G.UID=U.UID) ORDER BY U.FULLNAME, G.WORKDATE

    //Входные параметры:

    //BDATE — начало периода

    //FDATE — окончание периода

    //

    //Выходные поля:

    //DEVICE_UID — код сотрудника на устройстве

    //TABNUM — табельный номер

    //FULLNAME- ФИО

    //WORKDATE — дата

    //FACT_MIN_WORK — отработанное время в минутах    

    //BDATE =»‘01.11.2020′»;

    //FDATE =»‘30.11.2020′»;

    BDATE = «‘» + Формат( НачалоМесяца(объект.НачалоПериода) , «ДФ=dd.MM.yyyy» )+ «‘»;

    FDATE = «‘» + Формат( КонецМесяца(объект.НачалоПериода ) , «ДФ=dd.MM.yyyy» )+ «‘»;

    

    RS = Новый COMОбъект(«ADODB.Recordset»);

    RS.ActiveConnection = ConnectionБД;

      RS.CursorType = 1;

      RS.LockType = 3;

    //Str = «SELECT U.FULLNAME, U.TABNUM, U.DEVICE_UID, G.WORKDATE, G.FACT_MIN_WORK FROM GLOBAL_WORK_BY_DAY(:BDATE, :FDATE,-1,-1,»,»,0,’0:00′,’0:00′,0,1,0) G LEFT JOIN USERS U ON (G.UID=U.UID) ORDER BY U.FULLNAME, G.WORKDATE»;

    Str = «SELECT U.FULLNAME, U.TABNUM, U.DEVICE_UID, G.WORKDATE, G.FACT_MIN_WORK FROM GLOBAL_WORK_BY_DAY(«+BDATE+», «+FDATE+»,-1,-1,»,»,0,’0:00′,’0:00′,0,1,0) G LEFT JOIN USERS U ON (G.UID=U.UID) ORDER BY U.FULLNAME, G.WORKDATE»;

    //Str = «SELECT U.FULLNAME, U.TABNUM, U.DEVICE_UID, G.WORKDATE, G.FACT_MIN_WORK FROM GLOBAL_WORK_BY_DAY(‘01.11.2020′,’30.11.2020′ ,-1,-1,»,»,0,’0:00′,’0:00’,0,1,0) G LEFT JOIN USERS U ON (G.UID=U.UID) ORDER BY U.FULLNAME, G.WORKDATE»;

    попытка

        RS.Open(Str, ConnectionБД);

        //Сообщить («Запрос — ОК»);

    исключение

        Сообщить («Проблемы с выполнением запроса к FireBird»);

        возврат;

    КонецПопытки;

         ТаблицаТаймКонтрол.Очистить();

     Пока RS.EOF() = 0 Цикл

        

        НовСтрТК = ТаблицаТаймКонтрол.Добавить();

        НовСтрТК.ФИО  =RS.Fields(«FULLNAME»).Value;

        НовСтрТК.Дата = RS.Fields(«WORKDATE»).Value;

        НовСтрТК.КоличествоМинут = RS.Fields(«FACT_MIN_WORK»).Value;

        НовСтрТК.КоличествоЧасов = НовСтрТК.КоличествоМинут / 60;

        НовСтрТК.НомерДня =  День( НовСтрТК.дата);

        RS.MoveNext();

     КонецЦикла;

  

ЧессМастер

59 — 10.03.21 — 18:47

(49) >У меня вот работает сервер на 32 и подключаюсь я 64 битным клиентом.

Тогда объясни как может быть такое — если через COMОбъект(«ADODB.Connection») через клиента все работает, а при использовании ПараметрыСоединенияВнешнегоИсточникаДанных через сервер с той же строкой подключения выдает

Ошибка при вызове метода контекста (УстановитьСоединение): Ошибка ODBC. SQLSTATE: 08004

Номер ошибки: -902

Описание: [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

я подчеркиваю — С ТОЙ ЖЕ СТРОКОЙ ПОДКЛЮЧЕНИЯ.

  

ЧессМастер

60 — 10.03.21 — 18:48

(50) >С правами там что то. Написано же черным по белому.

Строка подключения через клиент и через сервер ОДИНАКОВАЯ.

Но через клиент работает а через сервер нет.

Открываем гугл по поводу ошибки [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

и читаем

https://qna.habr.com/q/449495

«Надо было удалить Firebird для 64 bit и установить Firebird для 32 bit. Оказывается файл базы данных созданный в Firebird 32 bit, не открывается в Firebird 64 bit.»

  

  

ЧессМастер

61 — 10.03.21 — 18:51

(52) >Черным по белому там написано не про права, а про логин/пароль.

Я тебе  еще раз говорю

Через клиент работает а через сервер нет. С ТОЙ ЖЕ СТРОКОЙ ПОДКЛЮЧЕНИЯ.

Я бы понял если бы в строке подключения через клиент было

а через сервер что то другое. Но строка ОДИНАКОВАЯ.

  

Кирпич

62 — 12.03.21 — 10:44

(60) «Надо было удалить Firebird для 64 bit и установить Firebird для 32 bit. Оказывается файл базы данных созданный в Firebird 32 bit, не открывается в Firebird 64 bit.»

Так это написал такой же специалист как и ты. На самом деле, переустановив Firebird, он просто снес настройки и поставил новые, по умолчанию.

  

ЧессМастер

63 — 09.04.21 — 23:39

(58) Спасибо за помощь.

Я сделал на мой взгляд намного удобной и проще. Подключил базу через Внешние источники данных, прописал таблицы. Далее с помощью 1С-ных запросов получаю данные, заполняю ТЗ и подаю на вход СКД.

  

ЧессМастер

64 — 09.04.21 — 23:42

(62) «Так это написал такой же специалист как и ты»

А ты что телепат что можешь определять квалификацию другого специалиста не видя и не зная что он делал ? Только не надо мне заливать что ты сам всегда со всем разбираешься и никогда не спрашиваешь ни у кого как это сделать. Так не бывает.

  

Кирпич

65 — 10.04.21 — 07:35

(64) «никогда не спрашиваешь»

Так ты спрашиваешь и не слушаешь, что тебе говорят. Нафиг спрашивать тогда.

Специалист ты конечно же хороший, только любой программист усомнится в утверждении, что «файл базы данных созданный в Firebird 32 bit, не открывается в Firebird 64 bit». А ты сходу веришь какому то школьнику, который написал это где то на заборе.

  

ДедМорроз

66 — 10.04.21 — 17:54

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

Ну и потом,для firebird есть ODBC-драйвер как 32 бита,так и 64 и вот битность драйвера должна совпадать с битностью приложения,а совпадение с битностью сервера не требуется.

При написании программы на заказ нередко возникают самые неожиданные сложности и проблемы. Причем возникают там, где их совсем не ждешь. И иногда с решением таких проблем можно провозиться довольно долго. Если не знаешь, что где исправлять. Эта статья будет посвящена решению одной такой проблемы. В ней мы научимся решать ошибку подключения к базе Firebird, пользоваться telnet, а также открывать порты в ESET Smart Security 9.

Итак, для создания одной программы для тестов на заказ мне потребовалось установить соединение с файлом базы данных Firebird из Visual Studio C#. Не получилось, вылезает вот эта ошибка: Unable to complete network request to host «localhost».

В чем может быть дело? Необходимо проверить правильность адреса к файлу базы данных, корректность логина и пароля. Далее, надо проверить работает ли процесс fbserver.exe. Проблема также может заключаться в том, что файл поврежден, или его открывали в другой версии Firebird – так что лучше попробовать прописать путь к примеру – файлу EMPLOYEE.FDB, который располагается в каталоге Firebird. Также проверьте – какой указан тип сервера: classic, super server или embedded.

Если же все это в порядке, то стоит узнать, открыт ли порт 3050 – именно такой порт слушает сервер Firebird. Проверить его можно с помощью telnet. Для семерки telnet включается так: Пуск – Панель управления – Программы и компоненты – Включение или отключение компонентов Windows – ставим галочки в нужных местах и перезагружаем компьютер.

как включить telnet на семерке

После перезагрузки запускаем командную строку (cmd.exe) и вводим в неё команду:

telnet localhost 3050

Если порт 3050 открыт, то у вас на экране просто останется мигающий курсор – приглашение. А вот в случае проблем с подключением может выйти примерно следующая ошибка:

Подключение к localhost…Не удалось открыть подключение к этому узлу на порт 3050: Сбой подключения

Это значит, что порт у нас закрыт. Значит, необходимо прописать правило в вашем брадмаузере и файерволе антивируса, чтобы открыть его. Обращаю ваше внимание, что просто отключение файервола может не помочь – в некоторых случаях необходимо явно прописать разрешение для порта на входящие и исходящие соединения. Проделаем эту операцию на примере ESET Smart Security 9.

В главном окне антивируса последовательно выбираем: Настройка – Защита сети – Персональный файервол – Конфигурировать – Правила – Изменить – Добавить. Вкладку «Общие» заполняем так:

как открыть порт в ESET Smart Security 9

А во вкладке «Локальные» просто прописываем порт 3050 – остальные настройки и поля не трогаем. Вот и все: теперь у нас должно заработать подключение к базе на нашем компьютере.

Если у вас возникли проблемы с подключением Firebird или требуется написать программу на си шарп, которая использует подключение к данной БД, то вы можете написать мне на почту up777up@yandex.ru – за небольшую плату вам будет оказана квалифицированная помощь программиста. У меня большой опыт работы с самыми разными задачами по программированию, в том числе для дипломов, курсовых и лабораторных работ.


Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, си шарп, базы данных, Firebird, нод 32

Я только что установил Firebird для Win64 и пытался подключиться к базе данных сотрудников, которая поставляется с предустановленным ISQL.
Следуя инструкциям официального QuickStart от Firebird Документация Я открыл утилиту ISQL и ввел:

connect localhost:employee user sysdba password masterkey;

В результате я получил:

Statement failed, SQLSTATE = 28000
Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

screenshot of IQSL utility

Самое странное, что если я перейду к самому образцу базы данных сотрудников и введу оттуда команду isql, я смогу успешно подключиться. снимок экрана командной строки Windows

2 ответа

Лучший ответ

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

Без имени хоста ISQL по умолчанию будет использовать встроенный режим Firebird, а не сервер. Для сравнения попробуйте использовать isql employee.fdb (или isql employee), он просто войдет в систему с вашим текущим именем пользователя ОС, а isql localhost:employee завершится ошибкой с сообщением «Ваше имя пользователя и пароль не определены».

Похоже, вы указали пароль, отличный от основного ключа по умолчанию, или учетная запись sysdba не была инициализирована. Я помню, что была проблема с установщиком более ранней версии Firebird 3, но я не думаю, что это должно повлиять на 3.0.2 (или, по крайней мере: у меня это сработало).

Если учетная запись SYSDBA не была инициализирована, следуйте инструкциям примечания к выпуску Firebird 3, раздел Инициализация базы данных безопасности:

Шаги инициализации

Инициализация выполняется во встроенном режиме с помощью утилиты isql . Для встроенного соединения пароль аутентификации не требуется и будет проигнорирован, если вы его предоставите. Встроенное соединение будет работать нормально без учетных данных и «войти в систему», используя свой хост учетные данные, если вы опустите имя пользователя. Однако даже если пользователь имя не подлежит аутентификации, созданию или изменению чего-либо в существующей базе данных безопасности требует, чтобы пользователь был SYSDBA; в противном случае isql выдаст ошибку привилегий для CREATE USER запрос.

Команды управления пользователями SQL будут работать с любой открытой базой данных. Поскольку образец базы данных employee.fdb присутствует в вашем установка и уже псевдоним в databases.conf, это удобно использовать его для задачи управления пользователями.

  1. Остановите сервер Firebird. Firebird 3 агрессивно кэширует подключения к базе данных безопасности. Наличие серверных подключений может запретить isql устанавливать встроенное соединение.

  2. В подходящей оболочке запустите интерактивный сеанс isql , открыв базу данных сотрудников через ее псевдоним:

    > isql -user sysdba employee
    
  3. Создайте пользователя SYSDBA:

    SQL> create user SYSDBA password 'SomethingCryptic';
    SQL> commit;
    SQL> quit;
    
  4. Для завершения инициализации снова запустите сервер Firebird. Теперь вы сможете выполнить сетевой вход в базы данных, включая базу данных безопасности, используя пароль, который вы назначили SYSDBA.

Где «SomethingCryptic», должен быть ваш пароль.

Если был создан пользователь SYSDBA, вам нужно будет изменить его пароль, если вы больше не помните, что вы установили. Выполните те же действия, но на шаге 3 выполните:

SQL> alter user SYSDBA set password '<new password>';
SQL> commit;
SQL> quit;

Если это приводит к ошибке «запись не найдена для пользователя: SYSDBA» , убедитесь, что вы действительно подключены как SYSDBA, в противном случае повторите исходный шаг 3. Отсутствие прав администратора будет вести себя так, как если бы пользователь этого не сделал. t существует, поэтому ошибка будет такой же, если пользователь действительно не существует или если вы подключены к непривилегированному пользователю.


3

Mark Rotteveel
31 Дек 2017 в 09:37

ПОДКЛЮЧИТЕ «сотрудник» пользователь «SYSDBA» пароль «мастер-ключ»;

Убедитесь, что в вашем alias.conf есть что-то вроде этого: employee = C: /examplepath/employee.fdb убедитесь, что службы firebird включены


1

Ulises Sánchez
1 Янв 2018 в 17:26

1.  С момента создания базы новой, могут быть сложности создания в ID триггеров и генератора, будет вылетать ошибки с этим CREATE SEQUENCE GEN_….

Решение: Просто создать всю работу с подключением в IB Expert не по пути к файлу а по localhost как удаленно соединяемся

2. Копируем что надо gds32.dll, qtintf70.dll….

3. Вылетает такая ошибка в программе  unsuccessful execution caused by an unavailable resource . Решение в FIB соединение прописать примерно так localhost:c:dirdata.gdb  добавив localhost , так как в Delphi показывает ОК, а при запуске описанная ошибка.

4. Может ошибка типа отклонения соединения с хостом(базой ). где вообще не ставился никогда драйвера сервера firebird как раз на localhost ошибка с fbembed.dll.

Иной вариант для компов где вообще нет ничего firebird, в Delphi вместо gds32 прописываем fbembed.dll (в pFIBDatabase1), качаем

http://www.ibase.ru/firebird.htm#drv (Firebird 2.0.5 —  embedded) Который я скачал (скачать Firebird-2.0.5.13206-2_embed.zip в хранилище сайта ), ложим туда прогу и работает

где то так…

MainPath2:=ExtractFilePath(Application.ExeName);
MainPath2:=»+MainPath2+’IPHOST.GDB’;
pFIBDatabase1.LibraryName:=’fbembed.dll’;
pFIBDatabase1.DBName:=MainPath2;

pFIBDatabase1.Open;
ipSDS.Active:=true;

Ниже из форму по этому

1.Одна из самых часто встречаемых:
«Can’t format message 13:96 — message file m:myfirebird.msg not found.
Unavailable database.»

Вообще, здесь 2 ошибки:

«Can’t format message 13:96 — message file m:myfirebird.msg not found.» — говорит о том, что не найден файл «firebird.msg». Самая безобидная, влияет на расшифровку, что именно произошло.

«Unavailable database» — обычно возникает, если не может найти SQL сервер.
За подключение к серверам баз данных отвечают файлы:
— fbclient.dll или gds32.dll -предназначен для подключения в многопользовательском варианте к серверам баз данных в сети или локальном компьютере;
— fbembed.dll -предназначен для подключения монопольно к базам данных, на локальном компьютере;

Решение проблемы:
проверьте, какие файлы находятся рядом с программой:
— если файл fbclient.dll или gds32.dll, то должен быть установлен сервер баз данных; этот файл имеет наивысший приоритет для программы; по этой причине, при всем желании вы не сможете подключиться если не стоит сервер баз данных.
— если файл fbembed.dll, то есть возможность подключения без установки сервера баз данных, но тогда должны отсутствовать фалы fbclient.dll или gds32.dll, как говорилось выше, они имеют приоритет;

Для подключения к базе данных Firebird пользователь должен
аутентифицироваться с использованием имени пользователя и правильного
пароля. Кроме того, любому пользователю отличному от SYSDBA, root (Posix — системы), или Administrator (на Windows-системах, если
Firebird запущен от имени этого пользователя) необходимо иметь
разрешения на доступ к объектам внутри самой базы данных (так называемые
объектные привилегии). Для простоты, рассмотрим процедуру аутентификации
пользователя SYSDBA с использованием
пароля masterkey.

Используем isql

Существует несколько способов подключения к базе данных с
использованием утилиты isql. Один из них —
это использование isql в интерактивном
режиме. Перейдите в подкаталог bin директории, в которой установлена
Ваша версия Firebird, и в командной строке наберите
isql (для Linux: ./isql) [↵
означает «нажать клавишу Enter»]:

C:Program FilesFirebirdFirebird_1_5bin>isql↵
Use CONNECT or CREATE DATABASE to specify a database
SQL>CONNECT "C:Program FilesFirebirdFirebird_1_5examplesemployee.fdb"↵
CON>user 'SYSDBA' password 'masterkey';↵

Важно

  • В isql каждое SQL-выражение
    должно завершаться точкой с запятой. Если строка не
    заканчивается точкой с запятой, и Вы нажимаете клавишу
    Enter, isql будет считать, что выражение будет
    продолжаться на следующей строке и сменит приглашение с
    SQL> на CON>. Это
    позволяет разбивать длинные выражения на несколько строк. Если
    Вы нажали клавишу Enter, забыв указать точку с
    запятой, просто наберите символ после приглашения и нажмите
    Enter ещё раз.

  • Если, используя Classic Server под Linux, не указать имя
    хоста, будет предпринята попытка организовать прямое локальное
    соединение. Что, в свою очередь, может закончиться неудачей в
    случае отсутствия у текущей учетной записи Linux необходимых
    прав доступа к файлу базы данных. В этом случае попробуйте
    подключиться к localhost:/<path>. В этом случае файл
    будет открывать серверный процесс (который в Firebird 1.5 обычно
    работает от имени firebird). С другой стороны,
    попытка сетевого соединения может закончиться неудачно, если
    пользователь создавал базу данных при локальном подключении и у
    сервера нет необходимых прав.

  • В случае использования Classic Server под Windows, Вы
    должны указывать имя хоста (это может быть
    localhost) и полный
    путь, в противном случае подключиться не получиться.

Замечание

Несмотря на то, что в Firebird «нормальными»
символами разделения строк являются одинарные кавычки, в примере,
при указании пути к базе данных, использовались двойные кавычки. Это
необходимо, так же как и в некоторых других утилитах командной
строки, при указании путей, содержащих пробелы. Одинарные кавычки
будут работать для путей, не содержащих пробелы.

Кавычки вокруг «SYSDBA» и
«masterkey» необязательны. Также не обязательно
заключать в кавычки путь к базе данных, не содержащий
пробелов.

Далее isql сообщит о том, что Вы
подключились:

DATABASE "C:Program FilesFirebirdFirebird_1_5examplesemployee.fdb",
User: sysdba
SQL>

Теперь Вы можете продолжить эксперименты с базой
employee.fdb. isql означает
interactive SQL [utility] (интерактивный SQL). Вы
можете использовать её для извлечения данных, получения
метаинформации, создания объектов базы данных, запуска скриптов и
многого другого.

Для того, чтобы вернуться в командную строку наберите

SQL>QUIT;↵

За дополнительной информацией об использовании
isql обращайтесь к Using
Firebird
, глава 10: Interactive SQL Utility
(isql)
.

Используем графические утилиты

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

Замечание

  • Существуют средства, в которых имя сервера + полный путь
    ожидаются в виде одной строки

  • Помните, что на Linux и других Posix-системах имена файлов
    и названия команд являются чувствительными к регистру

  • Ошибка подключения к базе данных beward
  • Ошибка подключения к базе данных 2 не удалось подключиться к mysql
  • Ошибка подключения к базе sql
  • Ошибка подключения к апп стор
  • Ошибка подключения к usbasp 3 ch341a