Autor Téma: TIBCQuery.Params - počet je 1  (Přečteno 225 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6867
  • Karma: 44
    • Verze Delphi: W10 + D11.1
TIBCQuery.Params - počet je 1
« kdy: 29-08-2022, 13:41:28 »


Nejako si nerozumieme.
Kód: Delphi [Vybrat]
  1.   FqrySubAccount_Flat_UI.Params.ValueCount := FNodeCount;  //  Hodnota je 4
  2.   FqrySubAccount_Flat_UI.ParamByName('IDSUBACCOUNT_FLAT').Values[I].AsInteger := iIDSubAccount_Flat;  //  Na inom mieste, funguje to
  3.     var FParam := AQry.Params.FindParam('FKFOCS');
  4.     if Assigned(FParam) then
  5.       FParam.Values[Idx].AsInteger := oGlobVar.IdFoc;   //  Tu je počet Values = 1. Prečo?
Ako to mám správne robiť? Vo FireDAC to išlo bez problémov.
Nepozdáva sa mi, aby som po otestovaní či parameter existuje, ho získaval znovu!

Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3467
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:TIBCQuery.Params - počet je 1
« Odpověď #1 kdy: 29-08-2022, 14:58:47 »
Excellent
Rated 1 time
Podle me je to zgruntu spatne, alespon co si pamatuju z prace s jakoukoli konektivitou: kdyz se meni text SQL prikazu, tak se spousti parser, ktery ty parametry do seznamu vytaha.

Pokud jsou pozicni, tak se na ne leze indexem, pokud pojmenovane, tak jmenem => nikdy se do params zadne parametry nepridavaji, jen se jim prirazuji hodnoty a na pojmenovane hodnoty se neleze indexem.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6867
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:TIBCQuery.Params - počet je 1
« Odpověď #2 kdy: 29-08-2022, 19:10:40 »
Tak som to objavil.
Kód: Delphi [Vybrat]
  1.   if Idx = 0 then
  2.     SetParameters0(AQry, ARecordAction)
  3.   else
  4.   begin..
  5. class procedure TSQLTexts.SetParameters0(AQry: TIBCQuery; const ARecordAction: Byte);
  6. begin
  7.   var FParam := AQry.Params.FindParam('FKFOCS');
  8.   if Assigned(FParam) then
  9.     FParam.AsInteger := oGlobVar.IdFoc; *
* Tu je problém. Nie je použitý index a výsledkom je zrušenie všetkých ostatných parametrov pre FKFOCS a spol.
Môžem akurát konštatovať, že sú "obrovské" rozdiely v práci s a v činnosti FireDAC / IBC.
« Poslední změna: 29-08-2022, 19:13:45 od Stanislav Hruška »
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3467
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:TIBCQuery.Params - počet je 1
« Odpověď #3 kdy: 29-08-2022, 22:13:21 »
Kód: Delphi [Vybrat]
  1.   var FParam := AQry.Params.FindParam('FKFOCS');
  2.   if Assigned(FParam) then
  3.     FParam.AsInteger := oGlobVar.IdFoc;  
  4.  
Môžem akurát konštatovať, že sú "obrovské" rozdiely v práci s a v činnosti FireDAC / IBC.
Hmmm...

To nema co delat s FireDAC/IBC, to je obecna prace s objekty: jestlize mas kontejner v podobe pole/seznamu objektu a ziskas pointer na jeho konkretni element, tak uz nepracujes s tim parent kontejnerem, ale primo s elementem a ten typicky (pokud se nejedna o nejakou rekurzi) zadne indexovane property shodne s kontejnerem nemiva.

Takze buhvi, co jsi tam vlastne delal, protoze kdybys pracoval se vsemi objekty stejne jako jsi psal naposledy, tak by ti to fungovalo vzdy a vsude. A to nemluvim o te podivnosti, ktera tam nema co delat:
Kód: Delphi [Vybrat]
  1. FqrySubAccount_Flat_UI.Params.ValueCount := FNodeCount;  //  Hodnota je 4

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6867
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:TIBCQuery.Params - počet je 1
« Odpověď #4 kdy: 30-08-2022, 09:00:54 »

Tá podivnosť je priamo v návode. FireDAC má SizeArray (alebo tak nejako).
Ja len porovnávam prácu s IBC voči FireDAC. FD fungovalo - IBC nie. To je všetko. Jednoducho črevá sú iné.
Pre mňa nemá význam sa v tom viac rýpať. Samozrejme má význam presne vedieť ako s tým pracovať. To je tak všetko.
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.