Forum Delphi.cz

Databáze => MS SQL => Téma založeno: dee 22-08-2016, 18:29:34

Název: FireDAC Stored Procedury
Přispěvatel: dee 22-08-2016, 18:29:34
Zdar,
Ucim sa pracovat s FireDACom ked uz je tak preferovany a vytvoril som si jednoduchu stored proceduru zabezpecujucu overenie hesla a prihlasenie. V SQL Managment Studio sa chova korektne ale prinutit FireDAC k spolupraci je zjavne problem vid screenshot:

Kde robím chybu ?

(https://s9.postimg.org/hizlo9l73/Bez_n_zvu.png)

Dakujem za rady  :)
Název: Re:FireDAC Stored Procedury
Přispěvatel: dee 22-08-2016, 18:44:19
ako to ze hodi na prazdny dataset AVcko by som pochopil, ale meno a heslo je zadane spravne, ale i ta vrati ako RETURN 1
Název: Re:FireDAC Stored Procedury
Přispěvatel: mjseven 22-08-2016, 19:21:26
Firedac nepouzívám, ale zkus to .ParamByName bez těch @
FDCommand1 předpokládám máš položený na tom formu  a nevytváříš ho někde za běhu.
Název: Re:FireDAC Stored Procedury
Přispěvatel: dee 22-08-2016, 19:30:12
ano command je na Forme,  command kind  je skStoredProc  parametre su nastavene

bez @ hodi chybu parameter not found.

Název: Re:FireDAC Stored Procedury
Přispěvatel: PetrH 23-08-2016, 09:35:44
Dobrý den,
FDCommand lze použít jen pro příkazy, které nevrací výsledkovou sadu (resultset). Pro volání uložených procedur je k dispozici komponenta FDStoredProc.
Podívejte se na http://petrhouf.blogspot.cz/2014/04/DBApp5.html, případně i předchozí příspěvky věnované technologii FireDAC.
PetrH
Název: Re:FireDAC Stored Procedury
Přispěvatel: dee 23-08-2016, 22:24:55
dik, prestudujem si ... ale aj napriek tomu by minimalne malo vratit korektnu navratovu hodnotu tej storky, teda result 0 v danom modelovom priklade, no vracia 1 ...

koniec koncov pri return 1 ta storka nevracia dataset, select zbehne az pri return 0
Název: Re:FireDAC Stored Procedury
Přispěvatel: dee 24-08-2016, 09:24:45
A este ako mam z komponenty FDStoredProc vytiahnut dataset a pristupovat k nemu ?

(https://s14.postimg.org/e6m9e3mup/Sn_mka.png)

Da sa sice cez DataSource nalinkovat na DBGrid ale to nechcem a ani nepotrebujem, potrebujem len priamo pristupovat k jednotlivým fieldom tak ako je to mozne u FDCommand, FDQuerry ...
Název: Re:FireDAC Stored Procedury
Přispěvatel: pf1957 24-08-2016, 15:41:55
A este ako mam z komponenty FDStoredProc vytiahnut dataset a pristupovat k nemu ?
Precist si dokumentaci http://docwiki.embarcadero.com/RADStudio/XE7/en/Executing_Stored_Procedures_(FireDAC) (http://docwiki.embarcadero.com/RADStudio/XE7/en/Executing_Stored_Procedures_(FireDAC))  >:(

Název: Re:FireDAC Stored Procedury
Přispěvatel: dee 24-08-2016, 16:56:15
A este ako mam z komponenty FDStoredProc vytiahnut dataset a pristupovat k nemu ?
Precist si dokumentaci http://docwiki.embarcadero.com/RADStudio/XE7/en/Executing_Stored_Procedures_(FireDAC) (http://docwiki.embarcadero.com/RADStudio/XE7/en/Executing_Stored_Procedures_(FireDAC))  >:(


tento clanok som cital este vcera ... ako sa dostat k datasetu z FDStoredProc s toho neviem pochopit, akurat na konci tam pisu ze sa ta storka da spustat aj cez FDCommand.

Chcel by som Vas poziadat, o kusok kodu pre ten moj konkretny pripad, s tymto problemom uz bojujem niekolko dni a neviem najst uspokojive riesenie.

pre vysvetlenie preco taketo riešenie:
Ono rozhodol som sa celu logiku aplikacie implementovat na strane databazoveho serveru, kedze by som okrem FireMonkey (android) aplikacie chcel urobit aj Web aplikáciu (PHP) ktora bude pristupovat k tejto databaze a mat uplne rovnaku funkcionalitu.
Pride mi teda vyhodne pouzivat stored procedury ako tuto pre "Login"  ktora bud vrati dataset z udajmi pouzivatela v pripade spravneho mena a hesla alebo vráti navratovu hodnotu cez RETURN 1 alebo 2 (neexistujuci login alebo nesprávne heslo)

Název: Re:FireDAC Stored Procedury
Přispěvatel: mjseven 24-08-2016, 17:27:42
TFDStoreProc je potomek TDataSet (http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC.Comp.Client.TFDStoredProc (http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC.Comp.Client.TFDStoredProc))
A tuším, že je na něm v případě kdy je třeba pracovat s vrácenou datovou sadou použít místo ExecuteProc jen nastavení property Active na True
(to by se ale podle informací uvedených zde: http://petrhouf.blogspot.cz/2014/04/DBApp5.html (http://petrhouf.blogspot.cz/2014/04/DBApp5.html) , mělo týkat jen Interbase Firebird).



 
Název: Re:FireDAC Stored Procedury
Přispěvatel: dee 24-08-2016, 18:07:13
TFDStoreProc je potomek TDataSet (http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC.Comp.Client.TFDStoredProc (http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC.Comp.Client.TFDStoredProc))
A tuším, že je na něm v případě kdy je třeba pracovat s vrácenou datovou sadou použít místo ExecuteProc jen nastavení property Active na True
(to by se ale podle informací uvedených zde: http://petrhouf.blogspot.cz/2014/04/DBApp5.html (http://petrhouf.blogspot.cz/2014/04/DBApp5.html) , mělo týkat jen Interbase Firebird).


Ďakujem za nasmerovanie ...
Prerobil som to z FDCommand na FDStoredProc a je to všetko OK  ;)

(https://s15.postimg.org/qzfz5e0d7/Sn_mka.png)

Skoda ze som nevedel skor ze FDStoredProc je potomkom DataSetu a ze staci dat rovno .FieldByName ..... mohol som si usetrit 2dni hladania riesenia  >:(
No hold Storky som doteraz týmto sposobom nepoužíval naviac prechádzam z VCLka na FireMonkey a z ADOdb na FireDAC ... potom tazko rozmyslat ze co clovek robi blbo  :-[
Název: Re:FireDAC Stored Procedury
Přispěvatel: dee 24-08-2016, 18:19:04
este mensi tip... namiesto FDStoredProc.Active je potrebne pouzit .ExecProc  inak to dopadne takto pri neexistujucom logine, blbe je to ze to padne uz na tom active a vobec nedojde k pokusu o pristup k neexistujucemu fieldu datasetu .... ach jaj  ???

(https://s16.postimg.org/5uffyboth/Sn_mka.png)
Název: Re:FireDAC Stored Procedury
Přispěvatel: pf1957 24-08-2016, 19:07:34
tento clanok som cital este vcera ... ako sa dostat k datasetu z FDStoredProc s toho neviem pochopit, akurat na konci tam pisu ze sa ta storka da spustat aj cez FDCommand.
Hmmm... Ono jim to dneska leze ze srovnavacich testu, ze studenti neumi porozumet psanemu textu, ale ze se to tyka i nekoho, kdo se pousti do programovani  :o

Odstavec: Executing the Stored Procedure
To execute a stored procedure that does not return a result set, use the ExecProc method...
To execute a stored procedure, returning a result set and open this result set, use the Open methods...

 >:(
Název: Re:FireDAC Stored Procedury
Přispěvatel: pf1957 24-08-2016, 19:12:10
Skoda ze som nevedel skor ze FDStoredProc je potomkom DataSetu a ze staci dat rovno .FieldByName ..... mohol som si usetrit 2dni hladania riesenia  >:(
A co jsi ty 2 dnyu hledal  :o http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC.Comp.Client.TFDStoredProc (http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC.Comp.Client.TFDStoredProc)
Název: Re:FireDAC Stored Procedury
Přispěvatel: dee 24-08-2016, 19:38:00
tento clanok som cital este vcera ... ako sa dostat k datasetu z FDStoredProc s toho neviem pochopit, akurat na konci tam pisu ze sa ta storka da spustat aj cez FDCommand.
Hmmm... Ono jim to dneska leze ze srovnavacich testu, ze studenti neumi porozumet psanemu textu, ale ze se to tyka i nekoho, kdo se pousti do programovani  :o

Odstavec: Executing the Stored Procedure
To execute a stored procedure that does not return a result set, use the ExecProc method...
To execute a stored procedure, returning a result set and open this result set, use the Open methods...

 >:(


 :-[ no ano preletel som ocami clanok a tie dva vety sa na prvy pohlad nezdali az tak dolezite ...

nakoniec som musel este riesenie upravit aby pracovalo korektne

(https://s3.postimg.org/je8f88f2b/Sn_mka.png)

bez toho Close tam aj napriek novemu spusteniu storky zostaval povodny dataset !
a finalne ten problem riesi OpenOrExecute kedze ta storka pri nespravnom logine alebo hesle nevracia dataset .... clovek si chce zjednodusit zivot a ...  >:(
Název: Re:FireDAC Stored Procedury
Přispěvatel: Stanislav Hruška 24-08-2016, 21:14:20
Citace
bez toho Close tam aj napriek novemu spusteniu storky zostaval povodny dataset !
To platí pre všetko! Ja to robím nasledovne. A je jedno o čo sa jedná. Môže zlyhať aj spojenie so serverom.
Kód: [Vybrat]
  FspROOMS_IU.ParamByName('IDROOMS').AsInteger := Rooms.IDRooms;
  ...
  try
   FspROOMS_IU.ExecProc;
    ...
  finally  // alebo except on
    FspROOMS_IU.Close;
    ...
  end;
Název: Re:FireDAC Stored Procedury
Přispěvatel: dee 25-08-2016, 06:35:52
ano to dava zmysel, ono moja apka je zatial na zaciatku vyvoja, tak na try-except este pride cas, taksito na .free atd ...

lem mi nieje jasne preco aj napriek ExecProc alebo OpenOrExecute tam bez Closnutia toho datasetu ostal zjavne povodny. Preco ten exec ten dataset proste neprepise, predpokladam ze storka zbehla.
Název: Re:FireDAC Stored Procedury
Přispěvatel: Stanislav Hruška 25-08-2016, 21:24:37
Citace
lem mi nieje jasne preco aj napriek ExecProc alebo OpenOrExecute tam bez Closnutia toho datasetu ostal zjavne povodny
Lebo pracuje s pôvodnými parametrami. To som si zistil. Ale prečo, to neviem.