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

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'.

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]

0

poczytaj do czego służy ExecSQL

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.'.

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:

SELECT srednia FROM DanaTabela

oraz poprzez Fields Editor pole srednia jest dodane do komponentu.

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:

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

 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 :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1