Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Циклы в FireBird / 22 сообщений из 22, страница 1 из 1
10.04.2019, 13:32
    #39799316
WellSlava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
Приветствую знатоков FB.
Переписываю серверную часть с MS SQL на FB. Подскажите, где можно найти хорошие примеры с курсорами (явными и неявными). А то у меня триггер в пять строк, но как я не извращался с for...select...do, переменными и двоеточием (":"), так и не смог его создать.
...
Рейтинг: 0 / 0
10.04.2019, 13:36
    #39799320
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
WellSlava,

триггеры в MS SQL совершенно не годятся для Firebird, ибо в MS они FOR EACH STATEMENT, а в Firebird — FOR EACH ROW. Надо полностью пересматривать логику.

А по синтаксису всё можно найти в этом документе Firebird_3_0_Language_Reference_RUS.pdf
...
Рейтинг: 0 / 0
10.04.2019, 20:46
    #39799643
WellSlava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
Симонов Денис, Да этим руководствуюсь. Примеры оттуда беру, но все равно получаю ошибки. В MS объявил переменную и работаю с ней, как хочу; здесь - без двоеточия, с ним.

Вот скрипт в MS SQL - при добавлении записи в таблице User_Info из таблицы Prog_MenuItem берутся все записи и заносятся в табличку связи Link_UserMenuItem (По-русски: при добавлении пользователя на него автоматом вешаются настроечные пункты меню)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
create trigger T_User_Info_I1
on User_Info for insert
as
  declare @ID_MenuItem int, @ID_User int
  declare curUser cursor for
    Select ID_User
    From Inserted
  open curUser
  fetch curUser into @ID_User
  while @@FETCH_STATUS = 0
    begin
      declare curMI cursor for
        Select ID_MenuItem
        From Prog_MenuItem
      open curMI
      fetch curMI into @ID_MenuItem
      while @@FETCH_STATUS = 0
        begin
          if not exists(Select * From Link_UserMenuItem Where ID_User = @ID_User and ID_MenuItem = @ID_MenuItem)
            insert into Link_UserMenuItem(ID_User, ID_MenuItem) values (@ID_User, @ID_MenuItem)
          fetch curMI into @ID_MenuItem
        end
      close curMI
      deallocate curMI
      fetch curUser into @ID_User
    end
  close curUser
  deallocate curUser
go 



Вот переработка для FB.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create trigger T_User_Info_I1 for User_Info 
active after insert
as
  --  переменная
  declare vID_MenuItem int;
  --  аналог курсора
  begin
  for Select ID_MenuItem From Prog_MenuItem into :vID_MenuItem do
    begin
      --  проверяем есть ли такая запись
      if (not exists(Select * From Link_UserMenuItem Where ID_User = new.ID_User and ID_MenuItem = :vID_MenuItem)) then
        --  заносим
        insert into Link_UserMenuItem(ID_User, ID_MenuItem) values (new.ID_User, :vID_MenuItem)
    end
  end;



Что здесь не так, понять не могу.
...
Рейтинг: 0 / 0
10.04.2019, 20:58
    #39799646
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
WellSlava,

очевидно что ты не там выполняешь сей запрос. Если пользуешься IB Expert, то выполнять надо в редакторе скриптов.
Если в ISQL то прочитай про переключения терминатора с помощью команды SET TERM
...
Рейтинг: 0 / 0
10.04.2019, 21:20
    #39799647
WellSlava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
Симонов Денис, IBExpert у меня вообще не работает - вот выдает ошибку при подключении к базе FB (после регистрации)

Error Message:
----------------------------------------
can't format message 13:96 -- message file c:\Program Files\Embarcadero\InterBase/interbase.msg not found.
unavailable database.

[00544E97] FIB.IBError (Line 558, "FIB.pas" + 55) + $2
[00540253] FIBDatabase.TFIBDatabase.Open (Line 1115, "FIBDatabase.pas" + 69) + $9
[005181EF] pFIBDatabase.TpFIBDatabase.Open (Line 279, "pFIBDatabase.pas" + 9) + $2
[0054054D] FIBDatabase.TFIBDatabase.SetConnected (Line 1185, "FIBDatabase.pas" + 4) + $4
[010DF082] IBEDatabases.TIBEDatabase.Connect (Line 3223, "IBEDatabases.pas" + 2) + $10
[01068CEA] InspectorFm.TInspectorFrame.OpenDatabase (Line 3347, "Frames\InspectorFm.pas" + 44) + $D
[01063AFA] InspectorFm.TInspectorFrame.ObjectsTLDblClick (Line 1314, "Frames\InspectorFm.pas" + 11) + $A
[004555C5] Controls.TControl.DoMouseDown (Line 4306, "Controls.pas" + 2) + $21
[00455681] Controls.TControl.WMLButtonDblClk (Line 4331, "Controls.pas" + 5) + $C
[00444388] Forms.StdWndProc (Line 1459, "Forms.pas" + 8) + $0
[0044DB97] Forms.TApplication.ProcessMessage (Line 6630, "Forms.pas" + 13) + $1
[011251BE] IBExpert.IBExpert (Line 935, "D:\Projects_5\IBExpert\IBExpert.dpr" + 147) + $7

================================================================================
Пользуюсь SQL Manager Lite for InterBase & Firebird.
...
Рейтинг: 0 / 0
10.04.2019, 21:23
    #39799648
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
WellSlava,

для начала узнай чем ты именно пользуешься Firebird или Interbase. И если Firebird. то неплохо бы озвучить версию. В IB Expert путь к клиенту можно указывать отдельно для каждой зарегистрированной базы. Надо указывать родной клиента. Очевидно, что у тебя что-то там ищется интербейсовское.
...
Рейтинг: 0 / 0
10.04.2019, 21:27
    #39799649
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
WellSlavaСимонов Денис, IBExpert у меня вообще не работает - вот выдает ошибку при подключении к базе FB (после регистрации)

Error Message:
----------------------------------------
can't format message 13:96 -- message file c:\Program Files\Embarcadero\InterBase/interbase.msg not found.
unavailable database.

[00544E97] FIB.IBError (Line 558, "FIB.pas" + 55) + $2
[00540253] FIBDatabase.TFIBDatabase.Open (Line 1115, "FIBDatabase.pas" + 69) + $9
[005181EF] pFIBDatabase.TpFIBDatabase.Open (Line 279, "pFIBDatabase.pas" + 9) + $2...
...

Вот само сообщение: unavailable database .

Покажи, как подключаешься.
...
Рейтинг: 0 / 0
10.04.2019, 22:08
    #39799651
WellSlava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
ёёёёёWellSlavaСимонов Денис, IBExpert у меня вообще не работает - вот выдает ошибку при подключении к базе FB (после регистрации)

Error Message:
----------------------------------------
can't format message 13:96 -- message file c:\Program Files\Embarcadero\InterBase/interbase.msg not found.
unavailable database.

[00544E97] FIB.IBError (Line 558, "FIB.pas" + 55) + $2
[00540253] FIBDatabase.TFIBDatabase.Open (Line 1115, "FIBDatabase.pas" + 69) + $9
[005181EF] pFIBDatabase.TpFIBDatabase.Open (Line 279, "pFIBDatabase.pas" + 9) + $2...
...

Вот само сообщение: unavailable database .

Покажи, как подключаешься.

Оно то понятно, но какого хрена IDExpert лезет сюда: "c:\Program Files\Embarcadero\InterBase/interbase.msg not found". У меня IB нет на компе. Подключаюсь двойным щелчком мыши в окне, где отображаются базы данных.
...
Рейтинг: 0 / 0
10.04.2019, 22:15
    #39799653
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
WellSlava,

потому что в качестве клиента надо было выбирать fbclient.dll от правильной версии сервера, а не оставлять gds32.dll по умолчанию, который подхватывается от установленного interbase или Delphi
...
Рейтинг: 0 / 0
10.04.2019, 22:45
    #39799660
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
WellSlavaёёёёёпропущено...


Вот само сообщение: unavailable database .

Покажи, как подключаешься.

Оно то понятно, но какого хрена IDExpert лезет сюда: "c:\Program Files\Embarcadero\InterBase/interbase.msg not found". У меня IB нет на компе. Подключаюсь двойным щелчком мыши в окне, где отображаются базы данных.

Покажи окошко, где регистрационная информация для данной конкретной базы.
...
Рейтинг: 0 / 0
11.04.2019, 12:36
    #39799829
WellSlava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
Симонов Денис, Благодарю. Я, в принципе, и думал, что связано с этим, но только предполагал, что выбрав в настройках FB 3.0, программа сама выберет нужный файл или сделает запрос.
...
Рейтинг: 0 / 0
11.04.2019, 12:41
    #39799834
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
WellSlava,

откуда IB Expert это должен узнать. В системе можно хотя 10 разных или одинаковых версий Firebird поставить. Есть библиотека зарегистрированная глобально, вот она и берётся. Исторически сложилось что по умолчанию в эксперте в качестве клиента выставлено gds32.dll. Никто не мешает fbclient.dll зарегистрировать как gds32.dll
...
Рейтинг: 0 / 0
11.04.2019, 12:53
    #39799844
WellSlava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
Симонов Денис, Да я просто рассуждаю, как бы сам делал. Но скрипт из IB тоже выдает ошибку. Буду сейчас здесь менять синтаксис .
...
Рейтинг: 0 / 0
11.04.2019, 13:16
    #39799856
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
WellSlava,

ошибка обычно всякие буковки содержит, они часто подсказывают в чём дело
...
Рейтинг: 0 / 0
11.04.2019, 13:37
    #39799872
WellSlava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
Симонов Денис, В данном случае выдает ошибку

This operation is not defined for system tables.
unsuccessful metadata update.
CREATE TRIGGER T_USER_INFO_I1 failed.
no permission for ALTER access to TABLE USER_INFO.
Транзакция откачена... (0 ms)

Не могу понять каких прав нет? Вхожу под sysdba.

И, кстати, почему после перезагрузки IBExpert снова ищет IB? В настройках выставил по-умолчанию fbclient.dll
...
Рейтинг: 0 / 0
11.04.2019, 13:46
    #39799882
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
WellSlava,

уверен? Что даёт

Код: sql
1.
2.
3.
4.
select
  *
from sec$users
where sec$user_name = current_user



Какой user_management используется? Маппигом не баловался?
...
Рейтинг: 0 / 0
11.04.2019, 14:13
    #39799924
WellSlava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
Симонов Денис, Благодарю за ответы.
С синтаксисом разобрался. Пользуюсь SQL Manager Lite for InterBase & Firebird - на мой взгляд он качественней IBExpert.
...
Рейтинг: 0 / 0
11.04.2019, 14:17
    #39799928
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
WellSlavaИ, кстати, почему после перезагрузки IBExpert снова ищет IB? В настройках выставил по-умолчанию fbclient.dll
хочешь работать с ИБ и ФБ - удали из системных путей gds32.dll и fbclient.dll.
В IbExpert всегда указывай конкретный путь и конкретную библиотеку, а не просто имя fbclient.dll, которого в PATH может не оказаться.
Хочешь чтобы fbclient был в системном пути - сделай instclient i f.
Хочешь, чтобы gds32.dll из fbclient был в системном пути - сделай instclient i g

если что непонятно - читай http://www.ibase.ru/inst_manual/
...
Рейтинг: 0 / 0
11.04.2019, 14:19
    #39799931
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
11.04.2019 14:13, WellSlava пишет:
> Пользуюсь SQL Manager Lite for InterBase & Firebird

нет такого.
https://www.sqlmanager.net/ru/products/ibfb/manager
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.04.2019, 14:33
    #39799943
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
Мимопроходящий,

есть, они переименовали в EMS SQL Manager for InterBase/Firebird Freeware
...
Рейтинг: 0 / 0
11.04.2019, 14:35
    #39799946
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
...
Рейтинг: 0 / 0
11.04.2019, 14:47
    #39799953
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Циклы в FireBird
offtop:
у них не сайт, а помойка.
за качество продуктов не скажу, не касался.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Циклы в FireBird / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]