Newsgroup: it.comp.lang.delphi
Titolo: Sintassi query

In fase di esecuzione di una query mi viene segnalato il messaggio :
Capability not supported. E' la clausola HAVING ?
La query è la seguente:
-----------------------------------------------------------------
if RB1.checked = true then
begin
        q1.sql.add('SELECT Data, Articolo,');
        q1.sql.add(' sum(Qvendu), sum(Qannul),;
        q1.sql.add(' sum(Quantita1), sum(Ca1), sum(Quantita2)');
        q1.sql.add('FROM "CONSOLIDATO.DBF" Consolidato ');
        q1.sql.add('GROUP BY data, articolo');
        q1.sql.add('HAVING (data >= :WDBTP1) ');
        q1.sql.add('AND (data <= :WDBTP2) ');
end;
    q1.ParamByName('WDBTP1').asdate := WDBTP1.date;
    q1.ParamByName('WDBTP2').asdate := WDBTP2.date;
-----------------------------------------------------------------
Grazie Monica
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

> Capability not supported. E' la clausola HAVING ?
non credo. L'errore è del BDE che non riesce ad eseguire la tua query. Una
possibile soluzione è quella di aumentare il parametro MAXFILESHANDLES in
BDE - Configuratione System - INIT... portarlo almeno a 128. Un'altra
possibile soluzione è quella di  reinstallare il BDE. Avevo un problema in
un solo computer della rete e tutto e ripartito. Prova ! Ciao

 non credo. L'errore è del BDE che non riesce ad eseguire la tua
[]
A dire il vero mi pare mancasse una WHERE, o meglio, che si usasse
HAVING al posto della where.
Se si usa il BDE HAVING e' applicabile solo sulle colonne frutto di
aggregazioni; quoto dal file LocalSQL.hlp: "Use a HAVING clause to limit
the rows retrieved by a SELECT statement to a subset of rows where
aggregated column values meet the specified criteria. A HAVING clause
can only be used in a SELECT statement when:
 - The statement also has a GROUP BY clause.
 - One or more columns are the subjects of aggregate functions."
ed anche:
" A HAVING clause filters data after the aggregation of a GROUP BY
clause. For filtering based on row values prior to aggregation, use a
WHERE clause. "
a giudicare dalla query, cio' che si vuole ottenere e' la somma di
alcune colonne per articolo e data all'interno di un range di date:
select d, a, sum(f1), sum(f2)
from table
where d between :start and stop /* o (d >= :start) and (d <= :stop) */
group by d, a;
Saluti
Paolo Arosio
-- 
"La dimostrazione dell'esistenza di specie intelligenti nell'universo
 e' che non ci vengono a trovare" [Calvin & Hobbes]

 aggregazione
non proprio. HAVING filtra dopo aver fatto l'aggregazione, mentre WHERE
filtra prima di aggregare, ma si possono entrambi usare anche su colonne non
si SELECT. Non è quello il problema secondo me

> A dire il vero mi pare mancasse una WHERE, o meglio, che si usasse HAVING
al posto della where.
Hai ragione. Avevo frainteso e pensavo che in presenza di GROUP BY si
dovesse usare HAVING al posto di WHERE.
Adesso la query funziona, e se posso chiederti un'altra cortesia:
Una volta che la query è stata eseguita come faccio ad assegnare alle
variabili di un ppReport i campi raggruppati?
Ho provato con q1.fieldbyname('quantita1').value e
               q1.fieldbyname('sum(quantita1')).value
ma non li riconosce.


 ha scritto nel messaggio
news:81Z74Z19Z61Y10...@usenet.libero.it...



Grazie Matteo, funziona perfettamente.
