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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2718
  • Karma: 26
    • Verze Delphi: XE7 professional
MS SQL - FireBird
« kdy: 29-09-2012, 11:42:46 »
Stále ma máta, aby som v novom projekte opustil MS Access a zvolil skutočnú DB  :) Najviac sa mi pozdávajú MS SQL a FB.

Som v tom úplný laik a mám v tom poriadny zmätok. Momentálne si potrebujem vyjasniť dve otázky, aby som sa rozhodol. Samozrejme chcem, ako sa to teraz nosí, "free" riešenie. To sa netýka nejakého základného nástroja na správu DB (hlavne vytváranie tabuliek a SQL príkazov) v grafickom prostredí.

1) Inštalácia DB alebo DB servera u mňa a zákazníka. U zákazníka to musí zbehnúť automaticky. Teraz pozerám do FB a som z toho vedľa. Ale to založím samostatnú tému, ak sa rozhodnem pre FB.
Rozhoduje inštalácia nejakým spôsobom o rozhodovaní pri voľbe DB?

2) Možnosť výberu "server" oproti "embeded" verzia.

a - Pri FB by nemal byť problém. Buď inštalujem server, alebo nie a tu len dokopírujem patričné knižnice. DB sa nijakým spôsobom nemení.

b - MS SQL. Každá verzia má inú DB - nie sú navzájom zameniteľné (?).  To ma dosť odrádza. A hlavne, pri mojom pokuse o pripojenie k embeded DB som nepochodil DXE2.

Viem, že už som v minulosti s podobným otravoval, ale prosím o zľutovanie. Chcem urobiť definitívne rozhodnutie, či do toho vôbec ísť. A ak áno, tak ktorým smerom.

Ešte otázočka. Podporuje DXE2 formát Access 2007? Alebo mi stačí 2003?
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ěď #1 kdy: 29-09-2012, 13:22:14 »
MSSQL je dokonalá databáze a jde tam pomocí SQL příkazů udělat prakticky cokoliv. Nicméně si myslím, že je náročnější na instalaci a s Embed nemám zkušenosti. PS. do 2GB za DB je ve verzi Express taky grátis.

FB je pervektní, jednoduchá instalace a to včetně Embed. Nicméně mám v současné chvíli takový drobný problém http://forum.delphi.cz/index.php/topic,13104.0.html

Nelze obecně říct, co je lepší, proto to nechávám na zákazníkovi. Já podporuji obě

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2718
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:MS SQL - FireBird
« Odpověď #2 kdy: 29-09-2012, 13:45:14 »
V mojom prípade, ak by došlo k vývoju programu (robím základné veci, aby som zistil, či to zvládnem), tak zákazníka DB zaujímať nebude.

Inštaláciu musím zvládnuť ja. Zákazník nebude vedieť o DB, a vlastne o PC ako takom, nič. Má to byť na správu domov (SVB). Včítane jednoduchého účtovníctva (toho sa obávam najviac, aj keď to bude prísne len pre potreby SVB) ale so zápismi na pozadí ako v podvojnom. Špekulujem nad viacnásobným prístupom k DB. Vzhľadom na účel nemusím riešiť veľkosť DB. 1 - 2 GB nenaplnia ani za celý život.

Mnohí zákazníci budú používať výhradne sólo prístup. Z PC na ktorom to bude nainštalované.

PS: Rozhodol som sa, že je načase rezať frajera  :o
« Poslední změna: 29-09-2012, 13:47:00 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1265
  • Karma: 28
    • Pepak.net
Re:MS SQL - FireBird
« Odpověď #3 kdy: 29-09-2012, 16:48:25 »
1) Inštalácia DB alebo DB servera u mňa a zákazníka. U zákazníka to musí zbehnúť automaticky. Teraz pozerám do FB a som z toho vedľa. Ale to založím samostatnú tému, ak sa rozhodnem pre FB.
Rozhoduje inštalácia nejakým spôsobom o rozhodovaní pri voľbe DB?
Může a nemusí. U MSSQL například musíš počítat s tím, že to bude muset instalovat někdo, kdo tomu rozumí, a nebo kdo je schopný sledovat úchylně dlouhý návod. Naproti tomu u Firebirdu zaprvé můžeš použít Embedded verzi, kdy není potřeba instalovat vůbec nic (prostě k aplikaci přidáš jedno DLL a je nainstalováno), nebo použiješ kompletní instalaci, kterou lze v extrémním případě shrnout do "spusťte Setup.exe a klikejte na Další Další Další až do konce". Zbytek případných úprav (nadefinování uživatelů a jejich hesel) už si můžeš udělat sám z aplikace.

Citace
b - MS SQL. Každá verzia má inú DB - nie sú navzájom zameniteľné (?).  To ma dosť odrádza. A hlavne, pri mojom pokuse o pripojenie k embeded DB som nepochodil DXE2.
Věnoval jsem zprovoznění embedded MSSQL (MSSQL Compact) dost času a došel k závěru, že musím použít third-party knihovnu. Pokud to z Delphi jde přes ADO, tak nikdo neví jak.

Osobně se mnohem víc vyznám ve Firebirdu než v MSSQL, takže bych ho z toho titulu preferoval, ale pokud začínáš a je ti to jedno, tak IMHO:

- Firebird je mnohem jednodušší na instalaci, správu a konec konců i používání. Nemáš žádná licenční omezení ("max. X uživatelů" nebo "max. X paměti"), databází si můžeš vytvořit a používat kolik chceš. Osobně si myslím, že Firebird lépe pracuje s triggery a uloženými procedurami.

- MSSQL engine toho umí mnohem víc než Firebird. Pokud to dokážeš použít a zaplatit, tak si klidně můžeš rozchodit třeba cluster. Nebudeš narážet na to, že "nejde DROPnout pohled X, protože ho někdo používá", nebudeš muset psát uložené procedury na to, abys "chci vložit do tabulky záznam s ID 1, ale jen pokud tam ještě neexistuje".

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1265
  • Karma: 28
    • Pepak.net
Re:MS SQL - FireBird
« Odpověď #4 kdy: 29-09-2012, 16:50:15 »
Nelze obecně říct, co je lepší, proto to nechávám na zákazníkovi. Já podporuji obě
To je podle mě vůbec nejhorší přístup - pak nevyužíváš pořádně možností ani jedné z databází. Já vím, zákazník je pán, ale v mé realitě zákazník stejně neví, v čem se která databáze liší, a vezme tu, kterou mu doporučím.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1733
  • Karma: 72
    • Verze Delphi: D2007, XE3, DX10
Re:MS SQL - FireBird
« Odpověď #5 kdy: 29-09-2012, 19:05:49 »
To je podle mě vůbec nejhorší přístup - pak nevyužíváš pořádně možností ani jedné z databází. Já vím, zákazník je pán, ale v mé realitě zákazník stejně neví, v čem se která databáze liší, a vezme tu, kterou mu doporučím.

Nooo, je otazka, jestli cilem programatora je poradne vyuzivat moznosti konkretniho RDBMS  :D

My jsme v minulosti museli podporovat nekolik ruznych stroju pocinaje DB/2 na AS400 a tenkrat konce Interbasi (na te jsme to primarne vyvijeli)  navrhovali jsme to pro nejvetsi spolecnou mnozinu operaci. Byl to humus, ale bez nej by se takovej byznys nedal vubec udelat.

A ted nas ceka preklapeni projektu z ptaka ohnivaka na MSSQL, protoze se ptak ohnivak ukazuje pro byznys jako silne omezujici (chteli by oracle, a kdyz ne, tak v nejhorsim MS SQL, ale ptaka ohnivaka ani zadarmo...). A to bude zase humus, protoze jde o stovky tabulek, triggeru a SP. Zrejme jeste pridame dalsi SP a pojedeme pres jejich spolecne rozhrani jak proti FB, tak proti MS SQL.

A kdyz treba vezmes persistenci a ORM, treba Hibernate, tak tam je naprosto normalni, ze muzes vymenit typ DB, aniz bys zmenil cokoli jineho nez par radku v konfiguracnim XML... totez Python & Django...
« Poslední změna: 29-09-2012, 19:30:18 od pf1957 »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1733
  • Karma: 72
    • Verze Delphi: D2007, XE3, DX10
Re:MS SQL - FireBird
« Odpověď #6 kdy: 29-09-2012, 19:22:53 »
Může a nemusí. U MSSQL například musíš počítat s tím, že to bude muset instalovat někdo, kdo tomu rozumí

Je pravda, ze jsem se pred lety snazil udelat unattended instalaci MSSQL Express a musel jsem parsovat logy instalatoru, protoze se muselo osefovat, ze na stroji muze byt instalovano nekolik MS SQL. Nakonec jsme ten MSSQL zavrhli a presli na SQLite.

Ale plati ta slozitosti instalace i pro Compact server? Ja uz si to nepamatuju.

Věnoval jsem zprovoznění embedded MSSQL (MSSQL Compact) dost času a došel k závěru, že musím použít third-party knihovnu. Pokud to z Delphi jde přes ADO, tak nikdo neví jak.

To me docela prekvapuje. Asi pred dvema roky jsem si to instaloval a nejak to pracovalo - narazil jsem, ze to umi jen NCHAR & spol. tj. jen unicode a neumi SP. Ale uz si bohuzel nepamatuju, jestli jsem na to lez pres ADO nebo pres SDAC, ktere jsem pozdeji musel poridit, protoze u ADO jsem narazil (u bezneho MSSQL) na problemy s transakcemi pres vice serveru.
« Poslední změna: 29-09-2012, 19:31:09 od pf1957 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2718
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:MS SQL - FireBird
« Odpověď #7 kdy: 30-09-2012, 13:22:43 »
Z týchto odpovedí je jasné, že voľba pre mňa môže byť jedine FB. Jeho "obmedzení" sa obávať nemusím, lebo nepredpokladám, že by som musel používať niečo extra.
Štve ma len Autoincrement, ale na ten som našiel niekoľko riešení. Ďalšie otázky budú už priamo v sekcii FB.

Veľmi ďakujem.
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ěď #8 kdy: 30-09-2012, 13:41:27 »
mě by zajímalo, když tak využíváte storované procedury a další specialitky, jak děláte aktualizaci těchto procedur, jak to debugujete a jak hledáte Bugy  :)
věřím, že to nějak zvládnete, ale dá to sakra práci

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1733
  • Karma: 72
    • Verze Delphi: D2007, XE3, DX10
Re:MS SQL - FireBird
« Odpověď #9 kdy: 30-09-2012, 13:52:11 »
Z týchto odpovedí je jasné, že voľba pre mňa môže byť jedine FB. Jeho "obmedzení" sa obávať nemusím, lebo nepredpokladám, že by som musel používať niečo extra.
Tak Ptak ohnivak snad ani zadna prakticka omezeni nema. Jedine na co si vzpominam, je problematicka prace s GUID, Ptak ohnivak si to dava do CHAR(), takze se s nim neda pracovat v UDF, protoze ta dostava argument jako ASCIIZ, Jedine vylucovat hodnoty obsahujici 0x00. Absence modernejsich SQL konstrukci je stejne casto nejjednoduzsi, rychlejsi a srozumitlnejsi proceduralne prepsat do SP.

Take byval problem sehnat k nemu rozumnou konektivitu zadarmo, takze jsme kdysi koupili FIB+, a tak nevim, jak to s ni dnes nevim.

Štve ma len Autoincrement, ale na ten som našiel niekoľko riešení. Ďalšie otázky budú už priamo v sekcii FB.
No to je opruz. Standardni reseni jsou:
  • generator + before insert trigger + k insert prikazu pridat klauzuli returning
  • stored procedure pro vkladani novych zaznamu ke kazde tabulce vracejici PK

a pak mene obykla jako dopredu generovane ID a nebo jako PK pouzit GUID prevedene do Base64 bez paddingu jako char(22)

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1265
  • Karma: 28
    • Pepak.net
Re:MS SQL - FireBird
« Odpověď #10 kdy: 30-09-2012, 13:55:57 »
Poté, co jsem si zvykl na Firebirdovský přístup, mi autoincrementy přijdou jako naprostá zhovadilost, samá nevýhoda a žádná výhoda (dokonce ani ten jednodušší zápis ne, protože zase musím hlídat, že do klíčového pole nesmím zapisovat, ani NULL ne).

Btw., používám ten "méně obvyklý" přístup.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1733
  • Karma: 72
    • Verze Delphi: D2007, XE3, DX10
Re:MS SQL - FireBird
« Odpověď #11 kdy: 30-09-2012, 13:56:25 »
mě by zajímalo, když tak využíváte storované procedury a další specialitky, jak děláte aktualizaci těchto procedur, jak to debugujete a jak hledáte Bugy  :)
věřím, že to nějak zvládnete, ale dá to sakra práci

Treba na Ptaka ohnivaka mame koupeny IBExpert, ktery umoznuje ladit/krokovat SP a umi vyrabet rozdilove skripty pro evoluci schematu. Nekdy se tomu musi rucne pomoct. A  v podstate ke kazde DB neco takoveho existuje, akorat to byva docela drahe.  Ostatne mam dojem ze primo EMB je company puvodne zalozena na takovem nastroji.

Jinak bugy se hledaji dost blbe, jako v kazde relacni DB, ktera neni postavena na flat tabulkach a pouziva trochu slozitejsi dotazy.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1265
  • Karma: 28
    • Pepak.net
Re:MS SQL - FireBird
« Odpověď #12 kdy: 30-09-2012, 13:58:13 »
mě by zajímalo, když tak využíváte storované procedury a další specialitky, jak děláte aktualizaci těchto procedur, jak to debugujete a jak hledáte Bugy  :)
věřím, že to nějak zvládnete, ale dá to sakra práci
To je zrovna jedna z věcí, které se mi líbí na MSSQL, že nemusím napřed DROPnout všechny závislosti, pak předělat proceduru a pak zase všechno naCREATEit.

Jak to dělám - no jednoduše, když potřebuju něco změnit, tak si vygeneruju skript, který všechny ty kroky udělá. Sice pak kvůli jedné blbé změně, která se projeví jen uvnitř (řekněme, že číslo zaokrouhlím na čtyři místa místo na dvě), musím provést skript o 120 příkazech, ale co už...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2718
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:MS SQL - FireBird
« Odpověď #13 kdy: 30-09-2012, 14:20:45 »
// Poté, co jsem si zvykl na Firebirdovský přístup, mi autoincrementy přijdou jako naprostá zhovadilost,
Fajn, a čo to je ten "Firebirdovský přístup". Ako jednoznačne spojím/vytvorím reláciu medzi dvoma tabuľkami. Rád sa nechám poučiť.

//Take byval problem sehnat k nemu rozumnou konektivitu zadarmo
Poväčšinou odporúčajú ZEOS

//Treba na Ptaka ohnivaka mame koupeny IBExpert,
Cena 80€ je celkom prijateľná. Už som vyhodil viac za väčšie nezmysly, ktoré som nikdy nepoužil.
Nateraz požadujem len vizuálnu tvorbu tabuliek a SQL. Pre mňa akosi SQL nie je natívne :(

Tak som zvyknutý z Access-u a viac som ešte nepotrebova. Ovšem, vždy som riešil zásadne len jeden prístup. Čo mi samozrejme vyčítali, ale tam to stačilo.

Už ho mám aj nainštalovaný. Uvidím čo z toho bude..

Predsa ešte jedna otázka. Oplatí sa mi vytvárať aplikáciu s podporou Accessu a aj FB zároveň?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1265
  • Karma: 28
    • Pepak.net
Re:MS SQL - FireBird
« Odpověď #14 kdy: 30-09-2012, 14:28:31 »
// Poté, co jsem si zvykl na Firebirdovský přístup, mi autoincrementy přijdou jako naprostá zhovadilost,
Fajn, a čo to je ten "Firebirdovský přístup". Ako jednoznačne spojím/vytvorím reláciu medzi dvoma tabuľkami. Rád sa nechám poučiť.
Vytvořím si generátor:
Kód: SQL [Vybrat]
  1. CREATE GENERATOR ID
A potom si z toho generátoru mohu vytahovat neustále rostoucí čísla:
Kód: SQL [Vybrat]
  1. INSERT INTO tabulka VALUES (GEN_ID(ID, 1), ...)
Tzn. typicky to udělám tak, že si napřed z databáze vyzvednu unikátní ID něčím jako:
Kód: SQL [Vybrat]
  1. SELECT GEN_ID(ID, 1) FROM rdb$database
a pak už to číslo můžu použít, kde a kolikrát chci. Novější Firebirdy to umějí i přímo v rámci toho prvního INSERTu:
Kód: SQL [Vybrat]
  1. INSERT INTO tabulka VALUES (GEN_ID(ID, 1), ...) RETURNING tabulka_id
ale protože stále potřebuju podporovat i Firebird 1.5, který to neumí, tak tu syntaxi vůbec nepoužívám a možná jsem ji sem zapsal blbě.

Citace
Predsa ešte jedna otázka. Oplatí sa mi vytvárať aplikáciu s podporou Accessu a aj FB zároveň?
Podle mě se skoro nikdy nevyplatí podporovat víc než jednu databázi. 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.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2718
  • 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ů: 1733
  • 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ů: 2718
  • 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ů: 1733
  • 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ů: 2718
  • 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ů: 1733
  • 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ů: 2718
  • 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ů: 2718
  • 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ů: 1733
  • 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ů: 2718
  • 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ů: 1733
  • 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: