Firebird ошибка подключения к базе

Опишу свой случай, схожий на ваш, может вам поможет или тому кто зайдет через поиск.
По рабочей необходимости перешел с 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:\Windows\System32\GDS32.DLL
c:\Windows\SysWOW64\gds32.dll
c:\Users\Public\Documents\Embarcadero\Interbase\redist\InterBase2020\win32\gds32.dll
c:\Program Files (x86)\Embarcadero\Studio\22.0\InterBase2020\bin\

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

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

I have a Firebird 2.0 database running on a remote Windows XP PC.
Using the ADO.net connection provider, I configure the connection as follows:

Dim x As New FirebirdSql.Data.FirebirdClient.FbConnectionStringBuilder
x.Database = "[hostname]:FileShare:/db/REMOTE_SVR.FDB"
x.UserID = "SYSDBA"
x.Password = "masterkey"

Dim y As New FirebirdSql.Data.FirebirdClient.FbConnection(x.ConnectionString)
y.Open()

Attempting to open the connection raises an FbException, with the message «unavailable database».

Downloading the ODBC drivers and attempting to connect with those settings produces the same error message.

I have copied the database file to my development environment and verified that I can connect to x.Database = "c:\testdb\REMOTE_SVR.FDB" with these settings (with a local install of Firebird 2.0 Server).

I have confirmed that the Firebird 2.0 Server is running on the remote PC. The fileshare in which the DB is located doesn’t require any login or permissions.

I’m probably doing something dumb, but I’m out of ideas.

asked Aug 12, 2016 at 10:41

Frosty840's user avatar

0

Firebird will — by default — not open database files that are located on a network share. The file must be on a physical disk of the server. This is done to protect the database against corruption from incorrect or insufficient locking of the file (eg when accessed by multiple Firebird server processes from different machines).

So you need to move the database to one of the real drives of the machine that hosts the Firebird server process.

answered Aug 12, 2016 at 11:32

Mark Rotteveel's user avatar

Mark RotteveelMark Rotteveel

101k193 gold badges141 silver badges199 bronze badges

9

My answer is not about setup connection using ADO.net, but I still try to answer how to connect to remote FDB from Windows.

  1. In firebird.conf set RemoteFileOpenAbility to 1. This parameter will allow your DBMS connect to DB located in remote folder. Also check that Redirection parameter is set to 0 or is commented with #.

  2. Download PSTools from https://learn.microsoft.com/en-us/sysinternals/downloads/psexec, unpack it.

  3. From PSTools folder via CMD (started as admin) execute psexec -i -s cmd.exe, accept agreement.

  4. In popped-up CMD’s window execute whoami to check that you are now identified as nt authority\system.

  5. In that window execute such command:

net use z: \\123.111.111.111\my_share /persistent:yes, where z is a network drive letter, you want to assign, and 123.111.111.111\my_share is an address of your network share. If the command executed successfully you will see new network drive in the Explorer.

If you got System error 58, try to execute command with specifying user/password in quotes like:

net use z: \\123.111.111.111\my_share /persistent:yes /user:"your username" "your password"

If in the future you will need to disconnect that network drive, perform step 3, then execute net use z: /delete. Or just reboot OS.

  1. Now you can launch your client (ibexpert, dbeaver, etc.) and connect to remote FDB file:
  • Server name: localhost
  • FDB file path: Z:/path_to_FDB/some_db.FDB

answered Mar 11 at 16:42

Kyo's user avatar

При возникновении в программе Контур-Экстерн Лайт ошибки «Ошибка при подключении к базе данных. Невозможно подключиться к службе FireBird на «localhost». Проверьте имя сервера и порт»,

выполните следующие действия:

Служба Firebird не настроена или отсутствует

Для работы программы Контур-Экстерн Лайт, необходимо, чтобы служба Firebird была включена и работала.
Чтобы включить службу Firebird выполните следующие действия:

  1. Пройдите по пути Пуск → Настройка → Панель управления или Пуск → Панель управления управления и запустите Администрирование
  2. Запустите «Службы»
  3. В открывшемся списке найдите службу Firebird Server — KELiteInstance и убедитесь, что служба находится в состояние «Работает»

Если служба не находится в состоянии «Работает», то выполните следующие:

  • Правой кнопкой мыши нажмите на название Firebird Server — KELiteInstance и в открывшемся списке выберите «Свойства»
  • Нажмите кнопку «Запустить»

Если вы не нашли в списке службу Firebird Server — KELiteInstance, то выполните следующие:

  • Скачайте и запустите установку Firebird.exe (нажмите здесь, чтобы скачать)
  • Убедитесь что в списке «Служб» у вас появилась служба Firebird Server — KELiteInstance и ее состояние «Работает»

Неправильно указан порт в настройках соединения с базой данных

Проверьте указанный в настройках порт соединения с базой данных. Для этого выполните следующие действия:

  1. Откройте программу, зайдите в «Настройки» → «Параметры соединения с базой данных…»
  2. Значение в пункте порт должно быть 3050 или 30303

Не подключается в базе Firebird. Через консоль подключается. ☑ 0

ЧессМастер

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)\ENT\Server\DB\CBASE.FDB;» +  // Исправьте на свой IP, порт и путь к базе данных !

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

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

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

     «C:\Program Files (x86)\Firebird\Firebird_2_1\bin\fbclient.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

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

4

acht

03.03.21

20:47

64×32

5

Кирпич

03.03.21

20:48

мож «CLIENT=C:\Program Files (x86)\Firebird\Firebird_2_1\bin\fbclient.dll»;

6

vovastar

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) Что делать — БД пропускной системы на нем крутится.

10

Gimalaj

04.03.21

12:29

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

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

11

Gimalaj

04.03.21

12:32

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

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

12

ДенисЧ

04.03.21

12:35

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

13

Gimalaj

04.03.21

12:36

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

14

ДенисЧ

04.03.21

12:38

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

15

ДенисЧ

04.03.21

12:39

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

16

Gimalaj

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.

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

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

19

Fram

05.03.21

00:33

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

20

ЧессМастер

05.03.21

11:37

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

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

DBNAME=KD-SKUD-01:C:\Program Files (x86)\ENT\Server\DB\CBASE.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.

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

UID=SYSDBA

PWD=masterkey

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

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 непосредственно под HKLM\Software\ODBC

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

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 и всё будет работать.

36

Gimalaj

09.03.21

15:45

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

37

Gimalaj

09.03.21

15:47

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

38

Кирпич

09.03.21

15:49

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

39

Кирпич

09.03.21

15:50

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

40

Gimalaj

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)\ENT\Server\DB\CBASE.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

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

51

Gimalaj

09.03.21

17:04

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

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

52

Gimalaj

09.03.21

17:05

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

53

Gimalaj

09.03.21

17:20

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

54

Кирпич

09.03.21

17:32

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

55

Garykom

09.03.21

17:37

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

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

56

Garykom

09.03.21

17:38

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

57

Garykom

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)\TimeControl\BASE\OKO.FDB»;    

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

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

    
    
    //FBDBAddr  = «192.168.2.5/3053″;//:C:\Program Files (x86)\TimeControl\BASE\OKO.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) >Черным по белому там написано не про права, а про логин/пароль.

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

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

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

UID=SYSDBA

PWD=masterkey

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

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 и вот битность драйвера должна совпадать с битностью приложения,а совпадение с битностью сервера не требуется.

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

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

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

3. Вылетает такая ошибка в программе  unsuccessful execution caused by an unavailable resource . Решение в FIB соединение прописать примерно так localhost:c:\dir\data.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:\my\firebird.msg not found.
Unavailable database.»

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

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

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

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

Понравилась статья? Поделить с друзьями:
  • Fmb sirius коды ошибок
  • Firebird ошибка 902
  • Fl studio ошибка 2004287473
  • Fmi код ошибки что это
  • Fl studio выдает ошибку при сохранении