Autor Téma: FB 3 - Generators  (Přečteno 5905 krát)

Offline Lukas

  • Nováček
  • *
  • Příspěvků: 9
  • Karma: 0
    • Verze Delphi: Seattle 10 , Berlin 10.1 update 2
FB 3 - Generators
« kdy: 24-09-2019, 15:52:03 »
Dobrý den všem,
  je možné u verze Firebird 3 nastavit generator ID na libovolnou hodnotu jiným uživatelem než SYSDBA ?


Lukáš

Offline KarelHorky

  • Plnoletý
  • ***
  • Příspěvků: 238
  • Karma: 9
    • Verze Delphi: XE6, Delphi 10.2 Tokyo
Re:FB 3 - Generators
« Odpověď #1 kdy: 24-09-2019, 16:15:42 »
Používám pouze FB 2.5, ale nemyslím, že by to mělo u FB 3 být zásadně jinak.
Změny ve struktuře databáze (nová tabulka, ...) může dělat SYSDBA nebo vlastník databáze, tedy uživatel, který ji vytvořil.
K.
Win10 Prof 64b, Firebird 2.5

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1289
  • Karma: 51
    • Verze Delphi: 10.3
Re:FB 3 - Generators
« Odpověď #2 kdy: 25-09-2019, 10:06:29 »
Používám:
Kód: [Vybrat]
GRANT USAGE ON GENERATOR gUkolyOdeslane TO ...
Pro větší změnu než o 1:
Kód: [Vybrat]
Kod = GEN_ID(gUkolyOdeslane, NovyKod-Kod);

Offline Lukas

  • Nováček
  • *
  • Příspěvků: 9
  • Karma: 0
    • Verze Delphi: Seattle 10 , Berlin 10.1 update 2
Re:FB 3 - Generators
« Odpověď #3 kdy: 25-09-2019, 10:34:33 »
Díky za info ...

 a ještě jedna podotázka:
   když provedu na FB 2.5 prvotní nastavení hodnoty generator příkazem : SET GENERATOR 'nazev_generatoru'  TO hodnota;
tak to projde v pořádku.
narozdíl od FB 3 kde to končí chybou:
   unseccessful metada update ... failed no permission for ALTER access to GENERATOR ..
 a to i přesto, že práva nastaveny mám pro uživatele
    grant usage on generator 'nazev generatoru' to 'uzivatel'
Nejde to ani s WITH GRANT OPTION.

Zřejmě nastavení hodnoty lze udělat pouze uživatelem SYSDBA...

Máte někdo nějaké řešení i na uživatele ?

Díky
Lukáš

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1289
  • Karma: 51
    • Verze Delphi: 10.3
Re:FB 3 - Generators
« Odpověď #4 kdy: 25-09-2019, 10:40:45 »
No řešením by právě bylo pomocí GEN_ID(xxx, 0) zjistit aktuální hodnotu (třeba 10) a pokud je požadovaná hodnota 100, zavolat GEN_ID(xxx, 90). GEN_ID kupodivu akceptuje i záporná čísla.

Offline Lukas

  • Nováček
  • *
  • Příspěvků: 9
  • Karma: 0
    • Verze Delphi: Seattle 10 , Berlin 10.1 update 2
Re:FB 3 - Generators
« Odpověď #5 kdy: 25-09-2019, 11:11:18 »
no to ano, ale potřebuji zadat na počátku natvrdo do čítače hodnotu tu moji max a pak dál tím už pracovat s použitím hodnoty increment.

Příklad:
   smažu data z databáze a chci nastavit generator na počátek 0..

Zřejmě jinak, než uživatelem SYSDBA to nepůjde...

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1289
  • Karma: 51
    • Verze Delphi: 10.3
Re:FB 3 - Generators
« Odpověď #6 kdy: 25-09-2019, 11:12:55 »
select GEN_ID(gUkolyOdeslane, 0-GEN_ID(gUkolyOdeslane, 0)) from rdb$database

Offline Lukas

  • Nováček
  • *
  • Příspěvků: 9
  • Karma: 0
    • Verze Delphi: Seattle 10 , Berlin 10.1 update 2
Re:FB 3 - Generators
« Odpověď #7 kdy: 25-09-2019, 11:30:05 »
díky, funguje to...   ;)

přidávám zkrácenou variantu, která na FB 3 jede

select GEN_ID(generator, startHodnota) from rdb$database

Díky moc V.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1289
  • Karma: 51
    • Verze Delphi: 10.3
Re:FB 3 - Generators
« Odpověď #8 kdy: 25-09-2019, 11:32:51 »
Ta zkrácená varianta ale funguje, jen pokud je výchozí hodnota 0.

Offline Lukas

  • Nováček
  • *
  • Příspěvků: 9
  • Karma: 0
    • Verze Delphi: Seattle 10 , Berlin 10.1 update 2
Re:FB 3 - Generators
« Odpověď #9 kdy: 25-09-2019, 11:43:07 »
Zkrácený příklad funguje za podmínky, že hodnota generatoru před novou hodnotou je 0..

jinak plně fungující příklad je od V.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6141
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:FB 3 - Generators
« Odpověď #10 kdy: 25-09-2019, 14:48:11 »
Ja používam verziu ako uviedol Vandrovnik týmto spôsobom
Kód: [Vybrat]
  Fqry.SQL.Text := 'SELECT MAX(UNITS.IDUNITS), GEN_ID(' + AGeneratorName + ', -(GEN_ID(' + AGeneratorName + ', 0)))'+
    ' FROM UNITS';
Je to z návodu. Len neviem naisto, či som to spúšťal aj pod FB3. Asi áno.
Ale ja som prihlásený pod účtom SYSDBA. To chcem v budúcnosti zmeniť.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.