Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» InterBase и FireBird: вопросы по работе и их решение

Автор: volser
Дата сообщения: 01.04.2010 14:05
JohnSilver182
Что так и пишет "нехочу"?
Автор: JohnSilver182
Дата сообщения: 01.04.2010 14:12

Цитата:
Что так и пишет "нехочу"?

1) Ну пишет DB not open . У FIB компонент для DELPHI свои сообщения . У ODBC для FireBird свои .
2) Сейчас поставил у себя как приложение на WinXP SP3, сохранил копию . Снес FB 2.1 . Восстановил копию .
Вроде по сети работает .





Автор: X11
Дата сообщения: 01.04.2010 14:48
Мало информации. Открыт ли порт 3097 на сетевых экранах, если они есть?
Какой способ доступа? Нет ли путаницы в библиотеках доступа?
Бывает, что часто путают библиотеки доступа и приложение лезет на сервер с неправильной DLL.
Установка нескольких серверов Firebird

Добавлено:

Цитата:
Ну пишет DB not open

Кто пишет, а полный текст ошибки - секрет?

Добавлено:

Цитата:
Ну пишет DB not open

это сообщение ведь не сервера, а компонентов доступа, да?
Автор: JohnSilver182
Дата сообщения: 01.04.2010 15:10

Цитата:
Кто пишет, а полный текст ошибки - секрет?

Черт . Я уже ушел от клиента . Подробности тогда чуть позже .


Добавлено:

Цитата:
Установка нескольких серверов Firebird

Хмм . Это монент скольский . Если я буду пытаться установить на комп как СЕРВИСЫ F 1.5 и свой Fb 2.1 и что то там стелит, то есть возможность анальной кары .

Жаль неосвещается момент , можно ли вобще ставить F 2.1 простым копированием папки .
Автор: X11
Дата сообщения: 01.04.2010 15:30
Да там всё просто
Автор: JohnSilver182
Дата сообщения: 02.04.2010 09:59
В общем картина проясняется .

Клиентская часть на Delphi работать не хочет , хотя я сложил своему EXE в папку
fbclient.dll ( Мое приложение работает от fbclient.dll)

Работает только после установки дистрибутива FB 2.1 . Хорошо что хоть дистр от FB 2.1 GDS32.dll не заменил от FB 1.5 в SYSTEM32 .


Автор: X11
Дата сообщения: 02.04.2010 10:08

Цитата:
Клиентская часть на Delphi работать не хочет , хотя я сложил своему EXE в папку

А толку, что сложил?
Автор: JohnSilver182
Дата сообщения: 02.04.2010 10:14

Цитата:
А толку, что сложил?

Дак вот и вопрос , почему так все сложно . Почему нельзя просто положить fbclient.dll ??
Почему именно надо ставить дистрибутив FB 2.1 для этого ????

такая регистрация тоже опасна , если FB 1.5 стоит

xcopy gds32.dll %SYSTEMROOT%\system32
xcopy firebird.msg %SYSTEMROOT%\system32
xcopy instreg.exe %SYSTEMROOT%\system32
xcopy fb*.dll %SYSTEMROOT%\system32
%SYSTEMROOT%\system32\instreg.exe i
pause

Автор: X11
Дата сообщения: 02.04.2010 10:37

Цитата:
Дак вот и вопрос , почему так все сложно . Почему нельзя просто положить fbclient.dll ??

Можно просто положить. Но ты должен указать в компонентах библиотеку доступа.
Мало того, ты же не написал конкретно, чем пользуешься, фибы или IBX.
В фибах есть возможность указать путь и имя библиотеки доступа. В IBX - НЕТ. Для IBX можно так: нужной версии fbclient.dll положи в папку программы и переименуй в GDS32.DLL

Опять же. Не напутай с версиями. И лучше ничего не складывай в системные папки, дабы не напутать с версиями библиотек доступа.
Автор: JohnSilver182
Дата сообщения: 02.04.2010 10:43

Цитата:
В фибах есть возможность указать путь и имя библиотеки доступ


Я вот так делаю в Фибах

var a_Fibdb:TpFIBDatabase
.....................
a_Fibdb.LibraryName:='fbclient.dll'
Автор: X11
Дата сообщения: 02.04.2010 10:51
Указывай полный путь, чтобы быть лишний раз уверенным.

Добавлено:

Цитата:
DB not open

это ж не вопрос по firebird, тебе в раздел по компонентам для программирования
Автор: JohnSilver182
Дата сообщения: 06.04.2010 15:25
В общем я развел FB 1.5 и FB 2.1


Код: rem Это если стоит FireBird
NET STOP FirebirdServerDefaultInstance
NET STOP FirebirdGuardianDefaultInstance
sc delete FirebirdServerDefaultInstance
sc delete FirebirdGuardianDefaultInstance

rem Удалим свое на всякий случай
NET STOP Firebird21
NET STOP firebird15
sc delete firebird15
sc delete Firebird21
pause

set fb21=C:\Program Files\Firebird\Firebird_2_1\bin\
set fb15=C:\Program Files\Firebird\Firebird_1_5\bin\

rem Удалить Инфу из реестра . Зачем это надо ??????????????????????????????????
"%fb21%instreg.exe" r
"%fb15%instreg.exe" r

sc.exe create Firebird15 binpath= "%fb15%fbserver.exe -s" start= auto displayname= FireBird_Server_15
sc.exe create FireBird21 binpath= "%fb21%fbserver.exe -s" start= auto displayname= FireBird_Server_21

pause

rem ibguardinst.exe install "%fb21%fbserver.exe" "Firebird21" "FireBird_Server_21"
rem ibguardinst.exe install "%fb15%fbserver.exe" "Firebird15" "FireBird_Server_15"

rem перезапуск
sc failure FireBird21 reset= 0 actions= restart/10000
sc failure FireBird15 reset= 0 actions= restart/10000

rem Пристроим тихонько свой конфиг
xcopy firebird.conf "C:\Program Files\Firebird\Firebird_2_1\"

net start Firebird21
net start Firebird15

pause
Автор: alexssss1
Дата сообщения: 06.04.2010 20:51
Добрый день, знатоки!

Использую в своем приложении работу с dbExpress. Работаю с firebird (2.0). Соединяюсь через SQLConnection и т.д. Приложение часто обновляю, но в силу того, что с программой работают по сети много клиентов, иногда возникают проблемы.

Я хотел бы поинтересоваться, каким образом можно заблокировать доступ к базе данных в момент обновления приложения и собственно основной базы данных?! Т.е. как сделать так, чтобы в момент обновления базы данных к ней никто (кроме меня) не имел доступ и как закрыть все существующие соединения у клиентов?

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

Спасибо.
Автор: X11
Дата сообщения: 06.04.2010 21:16

Цитата:
Я хотел бы поинтересоваться, каким образом можно заблокировать доступ к базе данных в момент обновления приложения и собственно основной базы данных?! Т.е. как сделать так, чтобы в момент обновления базы данных к ней никто (кроме меня) не имел доступ и как закрыть все существующие соединения у клиентов?

Если визуальное средство, то можно использовать IBExpert. Меню Службы->базу в даун или базу на бочку

Добавлено:
Если нужен консольный вариант, то почитай про утилиту GFIX.
GFIX позволяет предпринять попытку починить поврежденную базу данных, открыть (on-line) и остановить (shutdown) базу данных для соединений, решить проблемы "зависших" между несколькими базами данных транзакций (in-limbo), изменить количество страниц буфера, и так далее.
См. доку в папке, где установлена жарптичко.
Автор: data man
Дата сообщения: 06.04.2010 21:36
alexssss1

Цитата:
как закрыть все существующие соединения у клиентов?

Принудительно закрывать соединения - не лучшее решение. Не нужно лишний раз пугать пользователей.
Лучше посылать клиентскому приложению сообщение, чтобы оно само корректно отсоединялось от базы.
В общем, нужно сделать механизм обновлений.
Автор: alexssss1
Дата сообщения: 06.04.2010 22:00
X11, мне скорее нужен программный вариант, а именно как єто сделать средствами Делфи?!
Автор: X11
Дата сообщения: 06.04.2010 22:11
Ну так надо же уточнять компоненты доступа. Если используешь IBX, то посмотри на закладку Intebase Admin

Добавлено:
Я этими компонентами на пользуюсь, но наверное тебя спасёт TIBSecurityService
Автор: alexssss1
Дата сообщения: 06.04.2010 22:36
Вообще я работаю с компонентами DBX. Есть у меня такая идея. Сделать некую таблицу, где хранить информацию об обновлении. Например, когда запускается процесс обновление, то в эту таблицу помещается некоторое значение, например UPD.
Далее, в клиентах выполняется проверка , например по таймеру каждые 3 секунды, значения этой таблицы. И как только клиент увидит там это значение (UPD), соответственно он отключается от базы с уведомлением.
Но, честно говоря, лишний раз не хочется нагружать клиентов таймерами.

Добавлено:
Хотя есть и другая идея. При запуске регистрировать всех клиентов в этой же базе данных. И когда запускается обновление, то все, кто в данный момент не завершили сеанс, получают уведомление от сервера о закрытии сеанса.
Автор: volser
Дата сообщения: 06.04.2010 23:05
alexssss1
POST_EVENT
Автор: alexssss1
Дата сообщения: 07.04.2010 00:03
volser, спасибо. Кажется то что надо. Теперь буду разбираться.
Кстати вопрос сразу.
Если я делаю, например в IBExpert такой триггер:

CREATE trigger mytable_bi0 for "mytable"
active before insert position 0
AS
begin
POST_EVENT 'myevent';
end

то все ок, но..
каким образом мне сделать такой же триггер программно (через запрос) в Delphi? Через SQLQuery,например?

Автор: X11
Дата сообщения: 07.04.2010 00:35
А что значит "сделать программно"?
Просто вставь текст запроса на изменение МЕТАданных и выполни SQLQuery.execsql. Только ParamsCheck установи в false;
Также есть компонента у IBX - TIBScript.

А если нужно выполнять сложные большие скрипты, то можно использовать специальные компоненты - скриптеры. В Фибах это TpFIBScripter.

Может есть другие компоненты.

Очень мощный скриптер идёт в поставке с IBExpert. Там есть примеры и информация по использованию. Загляни в папку C:\Program Files\HK-Software\IBExpert\IBEScriptDll\
А ещё есть экзешник IBEScript.exe - консольная утилита.
Автор: Odysseos
Дата сообщения: 07.04.2010 03:12
alexssss1

каким образом мне сделать такой же триггер программно (через запрос) в Delphi? Через SQLQuery,например?

В БД:


Код:
create or alter procedure update_notify
as
begin
POST_EVENT 'myevent';
end
Автор: alexssss1
Дата сообщения: 07.04.2010 07:45
Мне нужно сделать обновление БД в программе, в котором добавить вот типа такого триггера.


Цитата:
Просто вставь текст запроса на изменение МЕТАданных и выполни SQLQuery.execsql.


Т.е. вставить именно вот это:

CREATE trigger mytable_bi0 for "mytable"
active before insert position 0
AS
begin
POST_EVENT 'myevent';
end

?

или это нужно обрабатывать через TIBScript ?

Автор: alexssss1
Дата сообщения: 08.04.2010 11:26
Разобрался.
Автор: Omsk
Дата сообщения: 08.04.2010 12:34
Я использую клиент flamerobin, хочу добавить пользователя, чтобы был еще один кроме sysdba, и программа выдает такой лог:

Цитата:
Preparing query: create user sergey
Error: *** IBPP::SQLException ***
Context: Statement::Prepare( create user sergey )
Message: isc_dsql_prepare failed

SQL Message : -104
Invalid token

Engine Code : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 8
user


Total execution time: 0.000s

Что не так?
Автор: X11
Дата сообщения: 08.04.2010 13:21
А версию сервера должны телепаты угадать?
Автор: Omsk
Дата сообщения: 08.04.2010 13:32
версия 2.1.3, я думал, что версия неважна.
Автор: X11
Дата сообщения: 08.04.2010 13:41
Не в каждой версии есть возможность создавать пользователей SQL запросом. И эта возможность появилась ЕМНИП только в версии 2.5

Добавлено:
http://firebirdsql.su/doku.php?id=user
Что и требовалось доказать
Автор: Omsk
Дата сообщения: 08.04.2010 13:47
Это мне надо версию 2.5 поставить, чтобы можно было создавать пользователей командой?
Она ведь вроде еще бета-версия?
И написано, что эти команды доступны в Isql и еще в одном клиенте, а я пользуюсь другим.
Автор: X11
Дата сообщения: 08.04.2010 13:55

Цитата:
Это мне надо версию 2.5 поставить, чтобы можно было создавать пользователей командой?
Она ведь вроде еще бета-версия?

Ставь не бойся. Нормальная версия. Уже 2 RC

Добавлено:

Цитата:
И написано, что эти команды доступны в Isql и еще в одном клиенте, а я пользуюсь другим.

Не понял... Если можно добавлять юзверей с помощью SQL, то при чём здесь клиент? Клиент должен передать запрос серверу, а не сам его обрабатывать.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

Предыдущая тема: Сравнение двух строк


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.