BDE Funkcja agregująca SUM() - Field not found

BDE Funkcja agregująca SUM() - Field not found
LA
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:17
0

Witam!

Mam taki kod, który powinien sumować wartości pola SREDNIA, jednak generuje błąd:

EDatabaseError with message 'dbqRzWilg: Field 'SumaSrednia' not found'.

Kopiuj
PierwszyMiesiaca  := EncodeDate(iRok, iMiesiac, 1);
DanyDzienMiesiaca := EncodeDate(iRok, iMiesiac, iDzien);

Sql.Clear;
Sql.Add('SELECT SUM(srednia) AS SumaSrednia ');
Sql.Add('FROM dbo.bf_rapzm_wilg_koksu ');
Sql.Add('WHERE doba BETWEEN :pierwszy AND :dany ');
ParamByName('pierwszy').AsDateTime  := PierwszyMiesiaca;
ParamByName('dany').AsDateTime      := DanyDzienMiesiaca;
ExecSQL;
sTemp := FieldByName('SumaSrednia').AsString;

Nie wiem dlaczego nie widzi pola SumaSrednia, do komunikacji z bazą danych (MS SQL) używam komponentów BDE. Googlam, szukam no i nic :/ Z góry dzięki za pomoc [browar]

edytowany 1x, ostatnio: Lakshmi
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 13 lat
  • Postów:7923
0

poczytaj do czego służy ExecSQL


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
LA
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:17
0
Misiekd napisał(a):

poczytaj do czego służy ExecSQL

Jeśli zastąpię ExecSQL przez Open, to z kolei wywala mi w linijce z Open właśnie:

EDBEngineError with message 'Table is read only.'.

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 13 lat
  • Postów:7923
0

- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
LA
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:17
0

Zmiana właściwości RequestLive komponentu TQuery na FALSE zmieniła sytuację o tyle, że zamiast 'Table is read only' wyskakuje:

EDatabaseError with message 'dbqRzWilg: Field 'srednia' not found'.

W komponencie we właściwości SQL zaszyte jest zapytanie:

Kopiuj
SELECT srednia FROM DanaTabela

oraz poprzez Fields Editor pole srednia jest dodane do komponentu.

edytowany 1x, ostatnio: Lakshmi
LA
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:17
0

Przespałem się z tym problemem i ze świeżym umysłem udało mi się go rozwikłać :)
Prócz niewłaściwie ustawionej właściwości TQuery.RequestLive na TRUE, problemem było pośrednio różnica zapytań SQL bezpośrednio w kodzie:

Kopiuj
SELECT SUM(srednia) AS SumaSrednia FROM dbo.bf_rapzm_wilg_koksu itd.

jak i właściwości SQL wykorzystywanego komponentu TQuery: SELECT srednia FROM dbo.bf_rapzm_wilg_koksu

Kopiuj
 Do komponentu TQuery przypisuje się pola poprzez wykonanie zaszytego w jego właściwości zapytania SQL, na podstawie tego w Fields Editor... (PPM na TQuery) pojawiają nam się dostępne pola. W tym przypadku procedura Open zwraca wyniki zapytania zaszytego w kodzie, zatem jest to zbiór zsumowanych wartości pola 'srednia' pod nazwą 'SumaSrednia', która to nie została dodana do TQuery poprzez Field Editor... (ponieważ ta nazwa nie padła we właściwości SQL komponentu TQuery).  Panaceum zatem okazało się: 

1) Ustawienie TQuery.RequestLive na FALSE.
2) Zmiana pytania we właściwości SQL komponentu TQuery na takie które zawiera nazwę 'SumaSrednia' (np. takie same jak w kodzie).
3) Dodanie 'SumaSrednia' do TQuery poprzez Fields Editor...

PS. Dzięki Misekd za pomoc i naprowadzenie :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.