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

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

А по синтаксису всё можно найти в этом документе Firebird_3_0_Language_Reference_RUS.pdf
...
Рейтинг: 0 / 0
Циклы в FireBird
    #39799643
WellSlava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, Да этим руководствуюсь. Примеры оттуда беру, но все равно получаю ошибки. В 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
Циклы в FireBird
    #39799646
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WellSlava,

очевидно что ты не там выполняешь сей запрос. Если пользуешься IB Expert, то выполнять надо в редакторе скриптов.
Если в ISQL то прочитай про переключения терминатора с помощью команды SET TERM
...
Рейтинг: 0 / 0
Циклы в FireBird
    #39799647
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
[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
Циклы в FireBird
    #39799648
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WellSlava,

для начала узнай чем ты именно пользуешься Firebird или Interbase. И если Firebird. то неплохо бы озвучить версию. В IB Expert путь к клиенту можно указывать отдельно для каждой зарегистрированной базы. Надо указывать родной клиента. Очевидно, что у тебя что-то там ищется интербейсовское.
...
Рейтинг: 0 / 0
Циклы в FireBird
    #39799649
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Циклы в FireBird
    #39799651
WellSlava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё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
Циклы в FireBird
    #39799653
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WellSlava,

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


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

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

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

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

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

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

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
Циклы в FireBird
    #39799882
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WellSlava,

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

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



Какой user_management используется? Маппигом не баловался?
...
Рейтинг: 0 / 0
Циклы в FireBird
    #39799924
WellSlava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, Благодарю за ответы.
С синтаксисом разобрался. Пользуюсь SQL Manager Lite for InterBase & Firebird - на мой взгляд он качественней IBExpert.
...
Рейтинг: 0 / 0
Циклы в FireBird
    #39799928
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Циклы в FireBird
    #39799931
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Циклы в FireBird
    #39799943
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

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


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