Autor Téma: FireDAC - Expression illegal in evaluator (Vyriešené)  (Přečteno 2442 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3082
  • Karma: 29
    • Verze Delphi: XE7 professional
Kód: [Vybrat]
  TTeams = class(TTableVst)
  strict private
    FqrIDTeams, FqrTitle, FqrSerialNumber, FqrActive: TField;
....
  FVSTQuery.SQL.Add(
  'SELECT Teams.IDTeams, Teams.Title, Teams.SerialNumber, Teams.Active'+
  ' FROM Teams INNER JOIN Clubs ON Teams.FKClubs = Clubs.IDClubs'+
  ' WHERE (Teams.FKClubs = :FKClubs)'+
  ' ORDER BY Teams.SerialNumber');

  FVSTQuery.ParamByName('FKClubs').AsInteger := 0;
  FVSTQuery.Open();
  FqrIDTeams := FVSTQuery.FieldByName('IDTeams');
  FqrTitle := FVSTQuery.FieldByName('Title');
  FqrSerialNumber := FVSTQuery.FieldByName('SerialNumber');
....
  NodeData.SerialNumber := FqrSerialNumber.AsInteger;  // Expression illegal in evaluator
Až na uvedený prípad mi všetko funguje. SQL je v poriadku - je tam hodnota. FVSTQuery je vytváraný dynamicky.
Ide o Access a typ poľa je Byte (pre istotu so ho zmenil na integer - bez výsledku).

Pri práci priamo s tabuľkou problém nenastane.

Nerozumiem tomu, ale pomohla takáto zmena:
Kód: [Vybrat]
  'SELECT Teams.IDTeams, Teams.Title, Teams.Active, SerialNumber'+
« Poslední změna: 14-07-2015, 14:05:16 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3082
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:FireDAC - Expression illegal in evaluator (Vyriešené)
« Odpověď #1 kdy: 14-07-2015, 14:56:58 »
Tešil som sa predčasne. Tých zmätkov tam bolo podstatne viac.
Nakoniec som sa musel vzdať dynamickej tvorby FDQuery. Asi mi tam niečo uniká.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1823
  • Karma: 73
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:FireDAC - Expression illegal in evaluator (Vyriešené)
« Odpověď #2 kdy: 14-07-2015, 15:29:57 »
Tešil som sa predčasne. Tých zmätkov tam bolo podstatne viac.
Nakoniec som sa musel vzdať dynamickej tvorby FDQuery. Asi mi tam niečo uniká.

Asi jo, protože všecky moje (tuny) query jsou generované dynamicky.

Jen taková myšlenka:
používáš FVSTQuery.SQL.Add, nekupí se ti tam SQL příkazy?
Tj. FVSTQuery.SQL.Clear?
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3082
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:FireDAC - Expression illegal in evaluator (Vyriešené)
« Odpověď #3 kdy: 14-07-2015, 15:38:14 »
Citace
Tj. FVSTQuery.SQL.Clear?
To nie. Pre každý objekt je FVSTQuery jedinečný a napĺňam ho len raz - pri myClass.Create.
Najskôr predpokladám, že mám problém v určení typu parametra: vstupný + integer. Používal som fintu, že som mu priradil 0 a potom FVSTQuery.Open. Za tým nasledovalo priradzovanie polí do TField (FqrXXX). Je to aj v ukážke. 

Dostával som rôzne chyby. Od uvedenej cez nezmyselné hodnoty (náhodné) pre PrimaryKey, že Field''
 nemá priradený dataset...

Neviem ktoré FD unity musím mať v uses. (Hodil som ich tam pre istotu všetky - nič). Môžeš sem hodiť nejakú ukážku?

PS: Pracujem, mal som prestávku, na preklade helpu k TRibbon. Potom Ti ho pošlem
« Poslední změna: 14-07-2015, 15:41:05 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3082
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:FireDAC - Expression illegal in evaluator (Vyriešené)
« Odpověď #4 kdy: 14-07-2015, 18:59:24 »
Upresňujem. Pri práci so samotným FDQuery nie je žiaden problém.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3082
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:FireDAC - Expression illegal in evaluator (Vyriešené)
« Odpověď #5 kdy: 15-07-2015, 07:21:24 »
Napadlo ma:
Vytvorím Query, otvorím ho, priradím TField do premenných a Query zavriem.
V tej chvíli stratím prepojenie na TField v Query.

Ak vytváram Query staticky, tak vždy použijem Fields editor na vygenerovanie zoznamu polí. To sa pri dynamicky vytváranom nedeje.

Je úvaha správna?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1966
  • Karma: 101
    • Verze Delphi: D2007, XE3, DX10
Re:FireDAC - Expression illegal in evaluator (Vyriešené)
« Odpověď #6 kdy: 15-07-2015, 08:23:35 »
Vytvorím Query, otvorím ho, priradím TField do premenných a Query zavriem.
V tej chvíli stratím prepojenie na TField v Query.
Samozrejme: ty si zapamatujes pointer na instanci TField, ale ta instance zanikne spolu s instanci query, takze jakmile zavres query, nesmis pouzit zapamatovany odkaz na jiz zrusenou instanci TField, protoze ukazuje donikam (a projevem navenek muze byt zejmena cokoli).


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3082
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:FireDAC - Expression illegal in evaluator (Vyriešené)
« Odpověď #7 kdy: 15-07-2015, 09:47:11 »
Heuréka. Takže neostáva nič iné, len zakaždým po Open znova priradiť TField.
Ďakujem
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1966
  • Karma: 101
    • Verze Delphi: D2007, XE3, DX10
Re:FireDAC - Expression illegal in evaluator (Vyriešené)
« Odpověď #8 kdy: 15-07-2015, 12:34:45 »
Heuréka. Takže neostáva nič iné, len zakaždým po Open znova priradiť TField.
No hlavne je treba se na to podivat z jineho uhlu pohledu: proc vubec potrebujes "vytahnout" field z datasetu?

Ma-li to slouzit jako vytknuti invariantu, abys opakovane neresolvoval napr. FieldByName apod., tak vetsinou muzes vytahnout rovnou hodnotu pole, ne?

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1823
  • Karma: 73
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:FireDAC - Expression illegal in evaluator (Vyriešené)
« Odpověď #9 kdy: 15-07-2015, 13:03:05 »
Heuréka. Takže neostáva nič iné, len zakaždým po Open znova priradiť TField.
No hlavne je treba se na to podivat z jineho uhlu pohledu: proc vubec potrebujes "vytahnout" field z datasetu?

Ma-li to slouzit jako vytknuti invariantu, abys opakovane neresolvoval napr. FieldByName apod., tak vetsinou muzes vytahnout rovnou hodnotu pole, ne?

No třeba já to tak často dělám, když procházím celý dataset. Hodnota pole je ti k ničemu, jelikož je pro každý řádek přece jiná, ale Field je stejný, takže je to značná optimalizace.
Embarcadero MVP - Czech republic

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1966
  • Karma: 101
    • Verze Delphi: D2007, XE3, DX10
Re:FireDAC - Expression illegal in evaluator (Vyriešené)
« Odpověď #10 kdy: 15-07-2015, 13:27:12 »
No třeba já to tak často dělám, když procházím celý dataset. Hodnota pole je ti k ničemu, jelikož je pro každý řádek přece jiná, ale Field je stejný, takže je to značná optimalizace.
Mas pravdu, ja to taky delal, akorat jak uz v Delphi nic nedelam, tak HOSIP. Sorry za sum.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3082
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:FireDAC - Expression illegal in evaluator (Vyriešené)
« Odpověď #11 kdy: 15-07-2015, 14:39:03 »
Citace
No třeba já to tak často dělám, když procházím celý dataset.
To je aj môj prípad. Celý dataset dávam do VirtualStringTree prípadne do ComboBox. A táto technika bola nedávno spomenutá na tomto fóre. Ja by som na to nikdy neprišiel ;)

Poznámka: Ale som veľmi rád, že mi došlo o čo ide. Asi už začínam rozmýšľať :)
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

 

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í:
Křestní jméno zpěváka Gotta: