Autor Téma: Vo FDQuery nevidim vysledok procedury  (Přečteno 2345 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2695
  • Karma: 25
    • Verze Delphi: XE7 professional
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #15 kdy: 04-08-2016, 10:48:47 »
Citace
naozaj neviem o čo vám všetkým ide ... mám problém a snažím sa ho riešiť, a vy vsetci do mňa aký som hlúpy, ale to je jasné, keď sa pýtam na veci čo sú pre vás triviálne ... tak preto hľadám u vás - múdrych - radu
Nikto nenapísal, že si hlúpy. Ale, že nemáš dostatočné vedomosti + patričné skúsenosti.
A ide nám o to, aby si sa zamyslel ako to funguje! Potom si uvedomíš čo robíš zle.

Ja som Ti poslal ukážku svojej SP aj s použitím + popis chýb, ktoré podľa mňa máš. Sú minimálne v uvedených textoch.

Pepak, pf1957 aj ja sme Ti nezávisle na sebe napísali , že flamerobin si to obslúži sám. Ak on vráti hodnotu, tak to neznamená, že to máš správne. Znie to čudne, ale bude to tak.

Teraz po lopate:
 - V Tvojej SP nikde nepriraďuješ hodnotu do ID !!! Máš tam dva výskyty ID. Musia byť minimálne TRI
 - Ak do parametra (fields[0]) vrazíš "hodnotu" null, tak Ti ju aj vráti. A fileds[0] je IDCiselnik.

Prečo to nie je v angličtine? Ja po anglicky neviem, ale slovenské slovo u mňa v DB ani v definíciách v delphi nenájdeš. Aj keď tam mám dosť často dobrú kravinu. Nie je nič výnimočné, že to aj 5 x premenujem.

PS: už som to raz písal. Máme jednu spoločnú vlastnosť. Nevieme správne napísať čo chceme ;D  + uverejňujeme časti kódu, ktoré len ostatných úplne zmätú (domotajú).
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Plnoletý
  • ***
  • Příspěvků: 243
  • Karma: 1
    • Verze Delphi: XE5, 10.1 starter (BDS2006, XE)
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #16 kdy: 04-08-2016, 10:56:31 »
áno priznávam sa, že sem tam niečo prehliadnem, ale mňa zarážalo to, že v manažéroch to išlo aj s EXECUTE PROCEDURES

Kód: [Vybrat]
SELECT id FROM procedureheuréka


PS. ďakujem, a nikto vám nie je vďačnejši ako ja

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2695
  • Karma: 25
    • Verze Delphi: XE7 professional
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #17 kdy: 04-08-2016, 11:17:33 »
Ešte jedna poznámka k SP. Máš tam DECLARE VARIABLE V_ID2 INTEGER; a V_ID2 sa už nikde neobjavuje. Vyhodiť. Predpokladám, že si uverejnil celý text SP.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Plnoletý
  • ***
  • Příspěvků: 243
  • Karma: 1
    • Verze Delphi: XE5, 10.1 starter (BDS2006, XE)
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #18 kdy: 04-08-2016, 11:36:06 »
Stanislav, ďakujem že si pozornejší ako ja, použil som to na test a potom vyhodil, išlo to .... to je tá moja nepozornosť

Offline František

  • Plnoletý
  • ***
  • Příspěvků: 243
  • Karma: 1
    • Verze Delphi: XE5, 10.1 starter (BDS2006, XE)
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #19 kdy: 04-08-2016, 12:03:25 »
For SELECT statements and other statements which return cursors, call Open instead of ExecSQL a ke konci textu to pro jistotu zopakuji jeste jednou:
Use ExecSQL to execute queries that do not return a cursor to data

tu je navine moja angličtina: zle som si preložil  " instead of "

Offline František

  • Plnoletý
  • ***
  • Příspěvků: 243
  • Karma: 1
    • Verze Delphi: XE5, 10.1 starter (BDS2006, XE)
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #20 kdy: 04-08-2016, 12:37:20 »
vyriešené, zostali len šrámy na duši

https://www.youtube.com/watch?v=hrEmcu3hYZo

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2695
  • Karma: 25
    • Verze Delphi: XE7 professional
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #21 kdy: 04-08-2016, 15:30:52 »
Ja sa celý čas neviem zmieriť s
Kód: [Vybrat]
SELECT id FROM procedureNa kieho čerta volať navyše nejaké SQL.Select, ktoré spustí celú lavínu udalostí, keď sa to dá priamo prečítať z SP.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1257
  • Karma: 28
    • Pepak.net
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #22 kdy: 04-08-2016, 17:14:51 »
Na kieho čerta volať navyše nejaké SQL.Select, ktoré spustí celú lavínu udalostí, keď sa to dá priamo prečítať z SP.
Kód: SQL [Vybrat]
  1. SELECT some_field, some_other_field
  2. FROM some_procedure(1,2,3,4,5)
  3. WHERE yet_another_field>=25
  4. ORDER BY still_another_field
Například. Šlo by to samozřejmě dále zkomplikovat JOINy, agregacemi atd. atd.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1257
  • Karma: 28
    • Pepak.net
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #23 kdy: 04-08-2016, 17:16:28 »
Nebo taky:
Kód: SQL [Vybrat]
  1. INSERT INTO sometable (field1, field2)
  2. SELECT field_a, field_b
  3. FROM some_procedure(3,1,4,1,5)

Offline František

  • Plnoletý
  • ***
  • Příspěvků: 243
  • Karma: 1
    • Verze Delphi: XE5, 10.1 starter (BDS2006, XE)
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #24 kdy: 04-08-2016, 17:22:41 »
Ja sa celý čas neviem zmieriť s
Kód: [Vybrat]
SELECT id FROM procedureNa kieho čerta volať navyše nejaké SQL.Select, ktoré spustí celú lavínu udalostí, keď sa to dá priamo prečítať z SP.
no neviem presne co myslis, ale tie zbytocnosti som videl v tvojom kode co si mi tu ukazoval

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2695
  • Karma: 25
    • Verze Delphi: XE7 professional
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #25 kdy: 04-08-2016, 19:34:42 »
Citace
no neviem presne co myslis, ale tie zbytocnosti som videl v tvojom kode co si mi tu ukazoval
Tak mi ich ukáž! :o  Ja o nich neviem. Zhrniem čo som tu dal.
V DB mám SP. Teraz ju maximálne zjednoduším
Kód: [Vybrat]
CREATE PROCEDURE RISER_FLAT_IU(
  IDRISER_FLAT TYPE OF COLUMN RISER_FLAT.IDRISER_FLAT)
RETURNS(
  NEWID INTEGER)
AS
BEGIN
  NEWID = GEN_ID(COMMON_ID, 1);  // 1
  INSERT INTO RISER_FLAT (IDRISER_FLAT, FKFOCS, FKFLATS, FKRISERS, ISRISER)
  VALUES (:NEWID, :FKFOCS, :FKFLATS, :FKRISERS, :ISRISER);
  SUSPEND;
END;
Pomocou generátora som získal Primary key a uložil do premennej, ktorú mi SP vráti!!! Zároveň som ju použil ako nový PK v novom zázname. Touto konštrukciou som prestal používať možnosť získať ID pomocou FireDAC.
V projekte mám:
Kód: [Vybrat]

  FspRISER_FLAT_IU := TFDStoredProc.Create(MyForm);  // 2
  FspRISER_FLAT_IU.StoredProcName := 'RISER_FLAT_IU';
  ....
  FspRISER_FLAT_IU.ParamByName('IDRISER_FLAT').AsInteger := NodeData.iPKList[0];

  try
    FspRISER_FLAT_IU.ExecProc;

    if FspRISER_FLAT_IU.ParamByName('NEWID').AsInteger <> 0 then  // 3
      NodeData.iPKList[0] := FspRISER_FLAT_IU.ParamByName('NEWID').AsInteger;  // 4
  except
    on E: EDatabaseError do
      Fault(E.Message);
  end;
Snáď je to teraz jasné. Ty si si mal urobiť takúto analýzu >:(
Ja nad niektorými odpoveďami hútam aj nejaký ten deň ;)

1 Bezpečné získanie hodnoty primárneho kľúča. Už mi ju nikto neukradne/nepoužije/neprepíše... Trvalo mi to dosť dlho kým som to pochopil a niektorí ľudia pri tom skoro stratili nervy.
2 Nech sa nestarám o jej likvidáciu - FreeAndNill(); To robím so všetkými komponentami vytváranými za behu.
3 To je z mojej strany vlastne zbytočná poistka navyše. Pre moju spokojnosť.
4 Získanie hodnoty, ktorú mi SP vracia. Tu som sa potrápil, lebo som nepredpokladal použitie ParamByName.

Na získanie ID sa dá použiť aj konštrukcia
Kód: [Vybrat]
 
FcmdConsumptionIns.CommandText.Add('INSERT INTO CONSUMPTIONS' +
  ' (IDCONSUPMTIONS, FKFOCS, FKLANDLORD_FLAT, FKMETERS, READING, STATE, INITIALSTATE)'+
  ' VALUES (GEN_ID(COMMON_ID, 1 ), :FKFOCS, :FKLANDLORD_FLAT, :FKMETERS, :READING, :STATE, 1)');
« Poslední změna: 04-08-2016, 19:40:19 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Plnoletý
  • ***
  • Příspěvků: 243
  • Karma: 1
    • Verze Delphi: XE5, 10.1 starter (BDS2006, XE)
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #26 kdy: 05-08-2016, 09:03:03 »
učili ma že databáza má byť napísaná tak, aby som aj manuálnym zápisom do nej neporušil integritu údajov
v tvojom prípade keď ten insert urobím bez procedúry, tak sa to stane, ale ak to máš ošetrené, nič som nepovedal

mne sa to ale aj tak viac pozdáva s trigerom a využitím RETURNING v INSERTE, ale toto je asi skôr otazka na FIREBIRD google group

mám databázu, kde mám použitý spôsob "Tree traversal" na uloženie stromu, a ktomu mám triger, že keď prepíšem jednu hodnou L, alebo R hoc aj ručne, ta sa mi presunie celá vetva, ak je to teda možné, ak nie nestane sa nič - nedovolí mu to prepísať

niečo o Tree traversal
https://www.zdrojak.cz/clanky/ukladame-hierarchicka-data-v-databazi-ii/



Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2695
  • Karma: 25
    • Verze Delphi: XE7 professional
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #27 kdy: 05-08-2016, 12:45:08 »
Citace
učili ma že databáza má byť napísaná tak, aby som aj manuálnym zápisom do nej neporušil integritu údajov
v tvojom prípade keď ten insert urobím bez procedúry, tak sa to stane,
Mňa to síce neučili, ale považujem to za základné pravidlo a snažím sa ho v plnej miere dodržať. Ale spustenie procedúry nepovažujem za manuálny zásah do DB. Ale pravidlo integrity musí dodržať.
Citace
mne sa to ale aj tak viac pozdáva s trigerom a využitím RETURNING v INSERTE, ale toto je asi skôr otazka na
Skôr otázka osobného vkusu či uprednostňovania nejakého postupu alebo už niečoho naučeného.
Citace
mám databázu, kde mám použitý spôsob "Tree traversal" na uloženie stromu
To nebolo spomenuté. Ten trigger je tam viac než žiadaný.
Od rána som nerobil nič iné, len čítal ten odkaz na Tree traversal. Nevedel som o tom. Bolo to zaujímavé čítanie, aj keď mňa sa to netýka. A snáď ani nebude :)  Ale aspoň viem načo je dobré (či kedy) ukladať strom do DB
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Plnoletý
  • ***
  • Příspěvků: 243
  • Karma: 1
    • Verze Delphi: XE5, 10.1 starter (BDS2006, XE)
Re:Vo FDQuery nevidim vysledok procedury
« Odpověď #28 kdy: 05-08-2016, 14:22:17 »
čo sa týka záklednej témy tohoto príspevku, je už vyriešená, ale tak že som to nakoniec prepísal bez potreby vracania výsledku :), ale takto som spokojný , lebo bez tohoto by som na to neprisiel .... vsetyko potrebne si vyriesim vramci tej procedury

ten tree traversal bol len ako príklad, netýka sa tejto témy priamo

 

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í:
Kolik je šest plus čtyři (slovem):