Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Сменил пароль в FireBird 2.5 теперь не могу зайти в менеджер пользователей

День добрый, было всё норм sysdba masterkey по умолчанию! Решил завести новых пользователей! Защёл через IBExpress и поменял пароль! Теперь подключается к базе с новым паролем, но не могу зайти в менеджер пользователей! Ругается, что прав нет! что делать?
Ответ:
Dozent
а ещё забыл дописать что глюк скорее всего был из-за того что я по невнимательности вместо англ букв написал в пароль кирилицей!
Вы правы. С русскими паролями есть баг. Возможно это баг IBExpert, а возможно и Firebird.
Заинтересованные выяснят, их ли это баг, и исправят если их. Незаинтересованные оставят всё как есть.
Лечится выполнением
ALTER USER SYSDBA PASSWORD 'masterkey'
после коннекта. Это на будущее.
Вопрос: FireBird 2.5 IBExpert, user id, group id пользователя

В данных пользователя (на форме редактирования пользователя) есть реквизиты "идентификатор пользователя" (user id), "идентификатор группы" (group id). Как получить их значения при подключении пользователя.
Ответ:
Марк Фабий
1. Не хочется заводить дублирующую справочную таблицу Юзеров.

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

Марк Фабий
2. Если использовать роли - как можно в роли указать необходимость выборки данных по определенному критерию?
(или нужно просто писать в коде: для такой роли такая выборка, для другой роли другая выборка, ... ?
как-то не изящно и опять придется писать при появлении новой группы со своим критерием отбора)

как обычно через CURRENT_ROLE

Марк Фабий
3. IBExpert работает ведь как-то с полями User id, Group id (пишет, читает)

через Service API. Вряд ли это можно назвать удобным способом.

Марк Фабий
4. может самое простое - зашивать в имя юзера значение числовое (суть номер группы) и, выдернув его потом в клиенте,
использовать для формирования нужного отбора (хотя как-то экзотично)?


нет. Это будет криво
Вопрос: Firebird 3 IBExpert backup и кириллица в пути к БД

Здравствуйте!


Сабж собственно.

База лежит в пути с кириллицей.
FB 3 embedded
База открывается в IBExpert
Пробую сделать backup средствами IBExpert

говорит

Чтобы это значило?

К сообщению приложен файл. Размер - 25Kb
Ответ: Basil A. Sidorov,

я имел в виду реально используемые в интерфейсе

в Линуксе "в принципе" кодировок столько же, сколько в винде.

Но реaльно как правило используется одна, по крайней мере для каждого конкретного пользователя.
Вопрос: IBExpert - много INSERT-ов

Добрый День!
Подскажите, как в IBExpert-е SQL-запросом вставить много записей, вида:
INSERT INTO Table1 (Field1, Field2)values('Вася', '14');
INSERT INTO Table1 (Field1, Field2)values('Петя', '20');
INSERT INTO Table1 (Field1, Field2)values('Маня', '18');
...

При запуске получаю ошибку на втором INSERT:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, column 1.
INSERT.

Записей ~5 000.
Ответ: potkin,

Firebird (и InterBase) не умеет выполнять наборы команд (скрипт). Команды выполняются только по одной. Например, если несколько команд есть в скрипте isql, то isql парсит скрипт, и выполняет команды по очереди, поштучно.
В IBExpert в SQL Editor команды выполняются поштучно, для выполнения пакета команд есть Script Executive (и есть программка IBEScript).

Компоненты тоже не умеют выполнять несколько команд. В IBX есть IBScript, который работает точно так же как isql, распарсивая текст и выполняя команды поштучно.
Тем не менее, у InterBase есть в API команды для выполнения пакетов (isc_dsql_batch...).
У Firebird - нет, но есть возможность оформить пакет в execute block, и выполнить его уже как одну команду. Но в обоих случаях размер пакета (или количество команд в пакете) ограничен.
Вопрос: IBExpert под Wine и проблема с gds32.dll

Здравствуйте.

Подскажите, пжлста, поставил wine, проинсталлировал IBExpert. Теперь хочу подцепиться к серверу (другой компьютер), а IBExpert выдает, что у меня не правильная GDS32.DLL. Хотя, как рекомендуют статьи, взял библиотеку именно от того сервера, что надо. Статьи, к сожалении, очень старые и выполнить их рекомендации не удается (тупо не находятся файлы, которые советуют поставить). Может кто подсказать рабочий вариант настройки для связки Linux + IBExpert?
Ответ:
Arioch
а нативного линуксового fenixsql не хватило бы ?

Какие у него преимущества перед не менее нативным flamerobin?
Вопрос: Ibexpert выдаёт ошибку подключения

Приветствую всех.
Мне нужно привести в работоспособное состояние базу с "YARYNA_CLEAR.GDB".
Она, как мне рассказали создавалась во времена Firebird-2.0.0.12748-0-Win32.exe и Ibexpert 2006.12.13.1

Я установил Firebird, указанной версии и свежескачанный(18/03/2017), так как другого не было, Ibexpert.
Но при запуске Ibexpert выдаёт ошибку и подтягивая этот файл "YARYNA_CLEAR.GDB" вижу ещё одну подобную "

К сообщению приложен файл. Размер - 66Kb
Ответ: Gallemar,

что проверять-то? :-)
Вопрос: Создание auto-increment в IBExpert

Создаю auto-increment поле в IBExpert, генерирует такой скрипт:

create trigger procedures_value_sets_bi for procedures_value_sets
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(,1);
end


Но выполнить не может, вылетает ошибка:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, column 21.
,.

В чём может быть проблема?

Крик ума: Вообще все СУБД кроме PostgreSQL - это ужас. :) Вот и в FB проблема вставить несколько строк, вот этот, например, совет с EXECUTE BLOCK не работает: http://www.firebirdfaq.org/faq336/

--
С уважением,
Алексей.
Ответ: Aleksey K,

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

Ну или возьмём твой любимый PG

CREATE FUNCTION somefunc() RETURNS integer AS $$
DECLARE
    quantity integer := 30;
BEGIN
    RAISE NOTICE 'Quantity here is %', quantity;  -- Prints 30
    quantity := 50;
    --
    -- Create a subblock
    --
    DECLARE
        quantity integer := 80;
    BEGIN
        RAISE NOTICE 'Quantity here is %', quantity;  -- Prints 80
        RAISE NOTICE 'Outer quantity here is %', outerblock.quantity;  -- Prints 50
    END;

    RAISE NOTICE 'Quantity here is %', quantity;  -- Prints 50

    RETURN quantity;
END;
$$ LANGUAGE plpgsql;


Какие то дурацкие доллары, ну не идиотизм ли
Вопрос: Почему разная скорость запроса из IBExpert и из программы?

Доброго времени суток, помогите разобраться?

+ Вот такой незамысловатый запрос
select tc.ID,

(with N as (
  select NAME
    from
    TFIOS t inner join SPFIOS s on s.ID=t.IDFIO
  where t.IDCAT = tc.ID and t.idkind = 1
  order by NAME)
select list(NAME, ', ')
from N) as FIOS
from TCATALOG tc order by tc.ID


Из IBExpert выполняется отлично, все данные за несколько секунд.

+ Сбацал все это в поток в Делфи, вот так
procedure TFillUpFIOsThread.Execute;
var D: TpFIBDataset;
  RecC: Integer;
begin
  inherited;
  try
    LaDB := TFIBDatabase.Create(nil);
    LaTRN := TFIBTransaction.Create(nil);

    LaDB.DefaultTransaction := LaTRN;

    D := TpFIBDataSet.Create(LaDB);
    D.Database := LaDB;
    D.Transaction := LaTRN;

    LaDB.LibraryName := DM.FIBDB.LibraryName;
    LaDB.UseLoginPrompt := False;
    LaDB.DatabaseName := DM.FIBDB.DatabaseName;
    LaDB.DBParams := DM.FIBDB.DBParams;
    LaDB.SQLDialect := DM.FIBDB.SQLDialect;
    LaDB.DefaultTransaction := LaTRN;
    LaTRN.DefaultDatabase := LaDB;
    LaTRN.TRParams := DM.TRNRead.TRParams;

    LaDB.Connected := True;

    with D do
    begin
      SelectSQL.Text := 'select count(ID) from TCATALOG';
      Open;
      RecC := Fields[0].AsInteger;
      Close; SelectSQL.Clear;
//      SelectSQL.Text := 'select c.ID, (SELECT FIOS FROM CONSTRUCTFIOSLIST(c.ID)) as AUTHLIST from TCATALOG c order by c.ID';
      SelectSQL.Add('select c.ID,');
      SelectSQL.Add('(with N as (');
      SelectSQL.Add('  select NAME');
      SelectSQL.Add('    from');
      SelectSQL.Add('    TFIOS t inner join SPFIOS s on s.ID=t.IDFIO');
      SelectSQL.Add('  where t.IDCAT = c.ID and t.idkind = 1');
      SelectSQL.Add('  order by NAME)');
      SelectSQL.Add('select list(NAME, '', '')');
      SelectSQL.Add('from N) as AUTHLIST');
      SelectSQL.Add('from TCATALOG c '); //order by c.ID
      Open;
      while not EOF do
      begin
        if Terminated then Exit;
        //mutex? ahz
        MainForm.FIOsList.Add(Fields[0].AsInteger, Fields[1].AsString);
        if RecNo mod 1000 = 0 then
        begin
          PBPos := Round(RecNo / RecC * 100);
          Synchronize(MainForm.DrawPBPos);
        end;
        Next;
      end;
      Close;
    end;

  finally
    FreeAndNil(D);
    FreeAndNil(LaTRN);
    FreeAndNil(LaDB);
    Synchronize(MainForm.HidePB);

    if not Terminated then
      FreeAndNil(MainForm.FillUpFIOsThread);
  end;
end;


скорость на пару порядков медленнее, чем из IBE, почему?
Есть процедура, делающая почти то же самое (заремаренная строчка). Если выгружать через нее, то скорость нормальная и из Делфи. Но хочется понять, почему запрос-то из программы так медленно работает?

Спасибо!
Ответ:
Arioch
kdv,

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

Жаль в ранних Delphi не было TList<string>


Мнэээ... TStrings?

Кстати. Будучи дремучим склеротиком и не заглядывая в Delphi c 26 мая, засомневался в наличии буквы s на хвосте. Не поленился запустить, набрать слово и нажать F1. Вылез хелп по MS Windows и стал объяснять
____________________________________________________________
Почему не удается получить справку по этой программе?

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

Дополнительные сведения см. на веб-сайте справки и поддержки Майкрософт.
______________________________________________________________

Поубывав бы...
Вопрос: SSAS. Пользователи и должности.

Есть два измерения -
Пользователи (Пользователь_ID, ФИО и другие поля)
и
Должности (Должность_ID, Наименование, Оклад и другие поля)

В таблице фактов (пусть это будут продажи) выводится поле Пользователь_ID.
Как в кубе сделать вывод текущей должности пользователя в момент продажи товара, если существует таблица Пользователи_Должности (Пользователь_ID, Должность_ID, Дата_Назначения_На_Должность) - то есть, если допустим в 2010 году Иванов был просто менеджером а в 2015году стал старшим продавцом, то в отчете за 2010 напротив него нужно выводить - менеджер, а в отчете за 2015 - старший продавец.

Это Many-to-many? Или можно проще какую то вещь придумать?
Ответ:
Santa89
xxxTIMxxx,

а как учесть дату?
мой датасорс выглядит так (скриншот).

в настройке связей измерений и мер я ссылаюсь на табличку подсвеченную желтым (Пользователи_Должности_SCD), указывая Many-to-Many. При этом поля даты в этой таблице ПОКА НЕТ. Как же SSAS будет понимать что для определенного периода нужно отображать именно текущую на дату должность? Как ни странно, пока и без даты все работает корректно...

Правильно ли я понял, что дальнейшие действия мои таковы:
1) Добавляю в Пользователи_Должности_SCD поля Дата_Начала, Дата_Окончания.
2) Связываю эти поля с измерением дат по ключевому полю Дата (ключ измерения Даты)

Тогда мой SCD будет работать корректно?


Предложенный вами способ работать не будет, если вы ходите именно непрямые временно-зависимые связи. M2M SSAS работает только с join по равенству, предложенные вами join по неравенствам в SSAS сделать невозможно.
Как это можно сделать. Делаете factless измерение со следующими полями:
- ID должность
- ID пользователь
- ID даты актуализации (код даты когда действует)

То есть - если связь работает с 1 по 20 апреля, и у вас данные актуализируются по дням - делаете 20 записей, первые 2 поля одинаковые и дата.
Вопрос: Контроль целостности бд, параллельность работы пользователей

Здравствуйте, уважаемые.
Только начал изучать базы данных. Есть учебная задача: система управления стоматологической клиникой.
Создал следующие таблицы:
+

Таблица прием
CREATE TABLE TABLE_RECEPTION (
    NUM_RECEPTION    INTEGER NOT NULL,
    NUM_SERVICE      INTEGER,
    NUM_MEDIC        INTEGER,
    DATA_RECEPTION   DATE,
    SURNAME_PATIENT  VARCHAR(30),
    FNAME_PATIENT    VARCHAR(30),
    PAYMENT          FLOAT,
    PAID             VARCHAR(5)
);

Таблица врач
CREATE TABLE TABLE_MEDIC (
    NUM_MEDIC     INTEGER NOT NULL,
    SURNAME       VARCHAR(30),
    FNAME         VARCHAR(30),
    PATRONIMIC    VARCHAR(30),
    NUM_KAB       INTEGER,
    JOB_PHONE     VARCHAR(12),
    NAME_SERVICE  VARCHAR(30)
);

Таблица Пациент
CREATE TABLE TABLE_PATIENT (
    "KEY"            INTEGER NOT NULL,
    SURNAME          VARCHAR(30),
    FNAME            VARCHAR(30),
    PATRANIMIC       VARCHAR(30),
    NAME_SERVICE     VARCHAR(30),
    GENDER           VARCHAR(5),
    DOB              DATE,
    CITY             VARCHAR(10),
    STREET           VARCHAR(10),
    NUM_MED_POLICY   INTEGER,
    SER_NUM_PASPORT  INTEGER,
    ISSUED_BY        VARCHAR(20),
    YAMMER           VARCHAR(50)
);

Таблица Услуг
CREATE TABLE TABLE_SERVICE (
    NUM_SERVICE   INTEGER NOT NULL,
    NAME_SERVICE  VARCHAR(20),
    PRICE         FLOAT
);

Таблица Пользователи (для авторизации в приложение )
CREATE TABLE TABLE_USERS (
    KEY_USER    INTEGER NOT NULL,
    LOGIN       VARCHAR(10),
    "PASSWORD"  VARCHAR(30),
    STATUS      VARCHAR(5)
);


И вот такой вопрос ,как обеспечить контроль целостности бд и параллельность работы пользователей?

====
Firebird 2.5.5.26952\ibexpert
Ответ:
Ziph
А как обновить таблицу у всех пользователей после изменения\удаления записи?

Читай