Newsgroup: it.comp.lang.delphi
Titolo: Query

Salve, utilizzo spesso le Query e modifico la Stringa SQL anche runtime, ma
se voglio cambiare i campi da selezionare devo necessariamente creare una
nuova Qry?. Mi spiego ho un QRpt che visualizza il totale di alcuni record.
Creata la Qry con il GROUP BY visualizzo il risultato, poi stesso archivio
ma altro GROUP BY per un altro campo non posso utilizzare la stessa Qry xche
i campi non sono stati dichiarati in fase di design (poiche non inclusi nel
comando SQL) posso ridichiarare i campi utilizzati dalla Qry o devo
disegnare altra Qry? Sto creando un Datamodule con piu Qry che Table!! Credo
che questo non sia un ottimo modo di lavorare percio.....
Grazie.
Ciao, davide


Io creerei un'altra query da sostituire.
In alternativa va anche bene il discorso di modificare la query a runtime
ma, per quanto mi riguarda, questo sistema lo uso solo per la clausola
WHERE.

 che questo non sia un ottimo modo di lavorare percio.....
Se il progetto non lavora su un DB locale è la situazione tipica...
[puoi anche non avere alcuna TTable...]
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

In effetti non sono stato molto chiaro. vediamo un po:
Ho un Rubrica telefonica con gestore servizi e Categoria contatto. Per
sapere quanti nominativi possiedo per ogni gestore in design time creo una
Qry con SELECT cGestori,  COUNT(*) [...] GROUP BY cGestori [...], Importo i
campi (ADD FIELD mi mostra solo cGestori) e mando in stampa, fin qui tutto
ok, voglio anche sapere anche quanti nominativi possiedo per categoria
(sempre solo i totali) quindi la mia SQL STRING diventa :SELECT cTipoi,
COUNT(*) [...] GROUP BY cTipo [...], MA cTipo non č stato definito design
time poichč non esisteva nella Qry ma solo nella Table, quindi...? se
inserisco tutte e due i campi nella SQL STRING non me li raggruppa + xchč
Devono essere entrambi presenti nella GROUP BY . Adesso ho creato piů table
ma l'archivio č un po complesso e utilizzare 5 Qry per la stessa stampa ma
per un group diverso non credo sia la soluzione migliore e pulita, credevo
(e lo penso ancora) che possa alterare i campi creati design time con quelli
necessari all'occorrenza, i campi della Qry sono necessari perchč vengono
poi utilizzati in stampa.
Grazie mille per l'interessamento e 2000 se avrete voglia di continuare.
Ciao.Davide

 wrote...
[SNIP]
Vediamo un po':
fai tutto a Run-time che fai prima:
begin
Query.Close;
Query.Sql.Clear;
If StampaNumero1 then
  Query.Sql.Add('SELECT Campo, COUNT(Campo) FROM Tabella GROUP BY Campo')
else
If StampaNumero2 then
  Query.Sql.Add('SELECT Campo, COUNT(Campo) FROM Tabella GROUP BY Campo')
else ecc ecc... [puoi usare un Case se vuoi...]
Query.Open;
// --> Stampa (come la fai, con un report?)
end;


Ancora grazie ma continuo a non farmi capire, il mio problema consiste non
tanto di generare le SQL STRING runtime ma poichè per le stampe utilizzo
QuickReport dove nel detail sono posizionati dei campi che non esistono in
una delle due Qry. Es.
tabella rubrica telefonica per gestori:
SELECT gestore1,COUNT(*) FROM MyRubrica GROUP BY gestore1
in QRpt posiziono due campi che prelevo dalla field definition della Qry
creata design time ed è fatta.
ma se adesso vorrei
tabella rubrica telefonica per categoria nominativi
SELECT TipoNome1,COUNT(*) FROM MyRubrica GROUP BY TipoNome1
in un altro QRpt posiziono due campi che dovrei prelevare dalla field
definition della Qry creata design time prima, ma chiaramente non esistono
poichè dovrei creare una seconda Qry per poter generare tali Field. La mia
domanda era: è possibile ricreare runtime la Field Definition di una Qry
creata design time o, addirittura, creare una Qry runtime ? ma a quel punto
nel, detail cosa ci metto?.
Ancora infinite grazie .
Davide

 nel, detail cosa ci metto?.
Ripeto: non mi è ben chiaro cosa stai cercando di fare, ma la risposta è SI,
puoi creare una nuova istanza di TQuery a run time
var QueryTmp: TQuery;
begin
try
 QueryTmp:=TQuery.Create(FormXXX);
 QueryTmp.DataBaseName....
 ecc ecc
QueryTmp.SQL.ADD('SELECT ecc ecc');
qui lavori
finally QueryTMP.Free;
end;
Ciao
