Autor Téma: MS SQL - FireBird  (Přečteno 9367 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2720
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:MS SQL - FireBird
« Odpověď #15 kdy: 30-09-2012, 14:38:36 »
//Leda že bys chtěl DB redukovat skutečně jen na čisté úložiště bez jakékoliv inteligence, pak to smysl mít může.
Pri Access-e to vždy bol iba sklad údajov. Nič iné. Využíval som tam akurát GUI na nadefinovanie väzieb aj s patričnými vlastnostiami - napr. zachovanie integrity. Neviem, či sa pri FB niečo zmení na mojom prístupe/pohľade k DB.

Tak na ten genrátor som narazil. Spätne ma nič netrápi. Akurát tam bola poznámka o obmedzení čísla na nejakých 32 tisíc a nejaké drobné. Neštudoval som to bližšie, angličtina je mizerná, tak neviem, či to platí len pre jedno sedenie alebo všeobecne. To "všeobecne" je volovina, nakoľko sa záznamy bežne počítajú na milióny (nie u mňa).
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1734
  • Karma: 72
    • Verze Delphi: D2007, XE3, DX10
Re:MS SQL - FireBird
« Odpověď #16 kdy: 30-09-2012, 15:05:01 »
Tak na ten genrátor som narazil. Spätne ma nič netrápi. Akurát tam bola poznámka o obmedzení čísla na nejakých 32 tisíc a nejaké drobné. Neštudoval som to
Ale ne, je to normalni integer 32 bitu (u 32bitoveho Firebirdu).
Jinak kdyz zacinas z gruntu, tak doporucuju se mrknout na problematiku domain tj. nedefinovat tabulky, triggery a nic rovnou z nativnich typu, ale nadefinovat si vlastni domainy, tj. neco jako
Kód: SQL [Vybrat]
  1. CREATE DOMAIN D_PRICE AS BIGINT;
  2.  
  3. CREATE TABLE xxxx (
  4.   SPRAVNE D_PRICE,
  5.   SPATNE BIGINT,
  6.   ...
  7.  

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Re:MS SQL - FireBird
« Odpověď #17 kdy: 30-09-2012, 18:46:28 »
Já vám něco řeknu, používáním základních a standardizovaných SQL příkazů naši zákazníci mohli upgradovat FB od verze 1.0 bez toho, abychom museli dělat jakékoliv úpravy do programu(to samé u MSSQL). Je pravda, že kdybychom tam dělali vychytávky, které by toto neumožnili, mohli bychom po zákazníkovi požadovat další peníze, protože on ze své vůle provedl upgrade serveru.

Nicméně tyto věci se dají smluvně řešit a nám ubyla práce díky univerzálnosti systému.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2720
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:MS SQL - FireBird
« Odpověď #18 kdy: 01-10-2012, 09:10:32 »
Na tie domain-y sa pozriem. Samozrejme dám si poradiť = použijem ich. Len som zvedavý na dôvod.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1734
  • Karma: 72
    • Verze Delphi: D2007, XE3, DX10
Re:MS SQL - FireBird
« Odpověď #19 kdy: 01-10-2012, 09:37:42 »
Na tie domain-y sa pozriem. Samozrejme dám si poradiť = použijem ich. Len som zvedavý na dôvod.
Jednoduchy: konzistence a udrzovatelnost tj. respektovani zlateho pravidla, ze ve slusne napsanem programu se vsechno pise prave jednou.

Nejde jen o definici typu, ale muzes tim predepsat default hodnotu, podminky ktere pro ni musi platit, charset a kde co.  A je-li to definovano prave jednou, tak to lze taky na jedinem miste vsude zmenit. Cim vetsi je projekt, cim dele zije a cim vic lidi se na nem vystrida, tim je to vyznamnejsi.

Neco si muzes precist i cesky treba tady http://owebu.bloger.cz/Databaze/Firebird-11-dil-Domeny a i v predchozich dilech.




Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2720
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:MS SQL - FireBird
« Odpověď #20 kdy: 01-10-2012, 15:42:40 »
Ten odkaz je pre mňa perfektný.

Narazil som tam na toto:
Další z mnoha možností využití generátorů je využití spouští prováděných před vložením řádku do tabulky. Tím lze dosáhnou podobného efektu, jako u autoinkrementu.

Kde sa o tom dočítam viac? Tak tomu nerozumiem. Hlavne čo je tá "spoušť" - preložiť do slovenčiny to viem, ale preklad by mohol mýliť.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1734
  • Karma: 72
    • Verze Delphi: D2007, XE3, DX10
Re:MS SQL - FireBird
« Odpověď #21 kdy: 01-10-2012, 15:52:03 »
Další z mnoha možností využití generátorů je využití spouští prováděných před vložením řádku do tabulky. Tím lze dosáhnou podobného efektu, jako u autoinkrementu.
Spoust = trigger. A jsou to v podstate specializovane ulozene procedury, u kterych lze predepsat, kdy se maji vykonat = spoustet. V zasade jsou moznosti pred/po a operace insert/update/delete.

To je to co jsem ti psal hned na zacatku, ze autoinkrement si muzes udelat sam pomoci generatoru a before insert triggeru, kde v before triggeru otestujes hodnotu pole s PK a pokud je null, tak tam vygenerujes generatorem unikatni hodnotu, pokud ma hodnotu, tak nedelas nic.
A aby ses dostal k takto vygenerovane hodnote v Delphi, tak u SQL prikazu INSERT pridas klauzuli RETURNING a prectes si vygenerovanou hodnotu.
« Poslední změna: 01-10-2012, 15:55:05 od pf1957 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2720
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:MS SQL - FireBird
« Odpověď #22 kdy: 01-10-2012, 16:00:28 »
Ďakujem, hlavne za ten RETURNING. Ten by ma potrápil. Nateraz som skončil. Skúsim nejakú tu DB založiť - pomocou IBExpert.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2720
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:MS SQL - FireBird
« Odpověď #23 kdy: 05-10-2013, 12:22:37 »
Citace
A aby ses dostal k takto vygenerovane hodnote v Delphi, tak u SQL prikazu INSERT pridas klauzuli RETURNING a prectes si vygenerovanou hodnotu.
To ste mi už viacerí viackrát odporučili. Ale neviem zistiť ako si mám prečítať vygenerovanú/é hodnotu/y. Používam FIBPlus. Tam som do DataSet.SGLs.InsertSQL doplnil
Kód: [Vybrat]
...
    :ISACTIVE,
    :DATEFROM,
    :DATETO
)
  returning IDSVBs into :IDSVBS
Mám to na mysli bez SP!
« Poslední změna: 05-10-2013, 15:04:05 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Re:MS SQL - FireBird
« Odpověď #24 kdy: 05-10-2013, 20:23:16 »
já to dělám tak, že si nejdřím vyberu hodnotu z generátoru a potom ji vložím do jakože Autoinc sloupce
'SELECT GEN_ID(GEN_'+UpperCase(aTable)+', 1) FROM RDB$DATABASE';


Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1734
  • Karma: 72
    • Verze Delphi: D2007, XE3, DX10
Re:MS SQL - FireBird
« Odpověď #25 kdy: 05-10-2013, 21:52:56 »
To ste mi už viacerí viackrát odporučili. Ale neviem zistiť ako si mám prečítať vygenerovanú/é hodnotu/y. Používam FIBPlus. Tam som do DataSet.SGLs.InsertSQL doplnil
  ...
  returning IDSVBs into :IDSVBS

1. Jestli si to dobre pamatuju, tak to into <var> lze pouzit pouze uvnitr SP ev. triggeru (nekde, kde mas SQL promenne). Jinak se pise jen returning IDSVBs
2. Pokud si prikaz spoustis rucne, tak s tim neni  zadny problem: insert spustis metodou Open misto ExecSql, protoze vraci result set a pak si prectes hodnotu napr. takhle
Kód: Delphi [Vybrat]
  1. ...
  2. Q.Open;
  3. if not Q.Eof then
  4.   begin
  5.     NewID := Q.Fields[0].AsInteger;
  6.     NewID := Q.FieldByName('ID').AsInteger;
  7.   end;
  8. ...
  9.  

3. Ovsem co dela ten ktery dataset, pokud mu nastasvis autoupdate a nechas ho to vygenerovat na POST ti neporadim neporadim, protoze to  nepouzivam

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2720
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:MS SQL - FireBird
« Odpověď #26 kdy: 06-10-2013, 10:23:39 »
Citace
já to dělám tak, že si nejdřím vyberu hodnotu z generátoru a potom ji vložím do jakože Autoinc sloupce
Ja chcem na to využiť práve možnosti komponentov FIBPLus a zjednodušiť si prácu - vyhnúť sa definovaniu udalosti onBeforePost pre každý DataSet!
Citace
Jinak se pise jen returning IDSVBs
Išiel som podľa tohto príkladu
Kód: SQL [Vybrat]
  1. xamples:INSERT INTO Scholars (firstname, lastname, address, phone, email)  VALUES ('Henry', 'Higgins', '27A Wimpole Street', '3231212', NULL)  returning lastname, fullname, idinsert INTO Dumbbells (firstname, lastname, iq)  SELECT fname, lname, iq FROM Friends ORDER BY iq ROWS 1  returning id, firstname, iq INTO :id, :fname, :iq;
A ja pri svojej nepozornosti som si nevšimol rozdiel medzi oboma príkladmi  :D , že nie je posledný riadok ako posledný riadok
Vyskúšam to s tým Open.
Citace
Ovsem co dela ten ktery dataset, pokud mu nastasvis autoupdate a nechas ho to vygenerovat na POST ti neporadim
Ja tam nastavujem jedine GeneratorName, KeyFields a UpdateTableName. Uvidím. Dám vedieť.
Edit:
Používaš if not Q.Eof then. To stačí na zistenie, že dataset je prázdny? Ja vždy používam
if not Q.IsEmpty then
čo v tomto (rozumej pFIBQuery + ExeQuery) prípade nejde a tak som to nahradil if not Q.RecordCount = 0 then
Viem, že dataset sa pri otvorení automaticky nastavuje na First záznam. Ale už neviem, že ak je prázdny, čo mi vrátia Bof a Eof. Ďakujem.
« Poslední změna: 06-10-2013, 12:19:24 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1734
  • Karma: 72
    • Verze Delphi: D2007, XE3, DX10
Re:MS SQL - FireBird
« Odpověď #27 kdy: 07-10-2013, 08:42:30 »
Edit:
Asi neni prilis korektni prilepit dalsi dotaz tykajici se jineho predmetu pomoci edit... Nehlede na to, ze ti kdo ctou prispevky RSS cteckou (jako ja) zeditovane prispevky znovu nedostanou a o zmenach nevedi.


Používaš if not Q.Eof then. To stačí na zistenie, že dataset je prázdny?
Samozrejme. Vzdyt
Kód: Pascal [Vybrat]
  1. while not Q.Eof do
  2.   begin
  3.     ...
  4.     Q.Next
  5.   end;
  6.  
se nesmi vykonat ani jednou, neexistuje-li zadny record.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: