Newsgroup: it.comp.lang.delphi
Titolo: DBGrid,ADOTable...e "MEGA-FILTRO" spaventoso

Salve amici, stavolta sono qui per porvi un bel dilemma riguardande
un'ADOTable..
Attualmente imposto il filtro così (allo momento dello show della form)
  ADOTable1.Filter:='((Eliminata = ' + QuotedStr('0') + ' And
Gestita<>'+QuotedStr('2')+
                  ') Or (Eliminata =' + QuotedStr('0') + ' And
Gestita=Null))';
e tutto funziona; in questo modo escludo subito delle condizioni, evitando
di visualizzare dei record che non devono essere assolutamente visibili.
Adesso viene il bello...ho messo un bel tasto che al click fà questo:
cosacercare:=InputBox('Ricerca libera', 'Immettere qui il dato da
ricercare', '');
ovvero chiede di inserire una stringa, niente di strano...
Come diavolo creo il filtro,lasciando intatte le condizioni di prima e
aggiungendo le condizioni che
'Servizio LIKE '+quotedstr('%'+cosacercare+'%')'
o
'Categoria LIKE '+quotedstr('%'+cosacercare+'%');
o
'Notecampo LIKE '+quotedstr('%'+cosacercare+'%');
Diciamo che voglio visualizzare tutti i record che soddisfano le prime
regole ed inoltre uno dei campi (servizio,categoria,Notecampo) possa
contenere "%cosacercare%".
Non sò più dove sbattere la testa :( ogni volta che provo a costruire il
filtro ed attivarlo mi à un'errore del piffero).
Qualcuno mi aiuta?
Grazie!

 ha scritto nel messaggio
news:hlUFd.692800$35.27...@news4.tin.it...



a parte che ci andrebbe messo "AND"...non funziona comunque...dà il solito
errore
"Gli argomenti non sono di tipo valido, non sono compresi nell'intervallo
consentito o sono in conflitto."
Sigh!

 consentito o sono in conflitto."
Questo errore potrebbe dipendere dai tipi di campi. Imposti tutte le 
condizioni di filtro a "stringa", magari alcuni campi sono numerici.
Che database usi?
Visto e considerato che il primo filtro è statico (se non ho letto male, non 
contiene parametri), forse conviene crearti una vista con la select sql e la 
clausola where che esprima questo primo filtro (in modo che poi 
eventualmente demandi un pò di elaborazione al db manager). Poi a questa, a 
tuo piacere, potrai aggiungere il filtro dell'Utente.
Ciao,
Gianluca. 

Grazie!
	Ciao
	MassimoB
 
---------------------------
http://www.massimobeschi.it/


Ciao
Michele

 Hai provato ad usare l'asterisco invece del %?
Non è un problema del %, se faccio così:
  newfilter:= 'Servizio LIKE '+quotedstr('%'+cosacercare+'%');
  ADOTable1.Filter:='(('+newfilter+' And Eliminata = ' + QuotedStr('0') + '
And Gestita<>'+QuotedStr('2')+
                  ') Or ('+newfilter+' And Eliminata =' + QuotedStr('0') + '
And Gestita=Null))';
Funziona tutto...ma io devo "sbirciare" in + campi (oltre al campo
"Servizio")
Ciao!

Ciao!


no...non ci credo...ti sei arreso?!?! proprio tu che mi hai sempre aiutato e
risolto tutti i problemi? il superman del delphi!?
:)
Cmq a parte gli scherzi...seguirō il tuo consiglio, prendo carta e penna e
stasera butto gių qualcosa.
Cmq grazie!

Ma perchè non usi una ADOQuery e imposti i parametri e li assegni a run 
time.
Invece che all'avvio assegnare i filtri alla griglia fai una query con i 
settaggi giusti per visualizzare quello che ti serve all'avvio, poi 
quando l'utente scrive qualcosa nel campo chiudi la query e riassegni la 
stringa sql nuova e riapri la query.
Inviato da 
www.mynewsgate.net

 time.
Sarebbe la stessa cosa...guarda il nuovo messaggio che ho postato...il
problema è definire "AND" e "OR" tra i campi in modo corretto...
Ovvero definire una query che abbia
"Eliminata" sempre uguale a '0' e
"Gestita" o uguale a null o diversa da '2' e
"Servizio" o "Categoria" o "Notepippo" Like %ppp%
La vedo dura....fare una query così...almeno per me :(


 La vedo dura....fare una query cosě...almeno per me :(
Aggiustando quella sopra dovresti andar bene.
Ciao,
Andrea


Ora vedo come posso trasformarla in un filtro...ci studio un pò (sono ancora
un niubbo in certe cose).
Cmq proverò,grazie.

 Cmq proverò,grazie.
Ciao,
Andrea

Ho risolto cosě ihihihih!!!!
  ADOTable1.Filter:='((Servizio LIKE '+ quotedstr('%'+cosacercare+'%')+' And
Eliminata = ' + QuotedStr('0') + ' And Gestita<>'+QuotedStr('2')+')'+
                  ' Or '+'(Servizio LIKE '+ quotedstr('%'+cosacercare+'%')+'
And Eliminata =' + QuotedStr('0') + ' And Gestita=Null))';
  ADOTable1.Filter:=ADOTable1.Filter + ' Or ' +
          '((Categoria LIKE '+ quotedstr('%'+cosacercare+'%')+' And
Eliminata = ' + QuotedStr('0') + ' And Gestita<>'+QuotedStr('2')+')'+
          ' Or '+'(Categoria LIKE '+ quotedstr('%'+cosacercare+'%')+' And
Eliminata =' + QuotedStr('0') + ' And Gestita=Null))';
  ADOTable1.Filter:=ADOTable1.Filter + ' Or ' +
          '((Trasmissioneda LIKE '+ quotedstr('%'+cosacercare+'%')+' And
Eliminata = ' + QuotedStr('0') + ' And Gestita<>'+QuotedStr('2')+')'+
          ' Or '+'(Trasmissioneda LIKE '+ quotedstr('%'+cosacercare+'%')+'
And Eliminata =' + QuotedStr('0') + ' And Gestita=Null))';
  ADOTable1.Filter:=ADOTable1.Filter + ' Or ' +
          '((Zona LIKE '+ quotedstr('%'+cosacercare+'%')+' And Eliminata = '
+ QuotedStr('0') + ' And Gestita<>'+QuotedStr('2')+')'+
          ' Or '+'(Zona LIKE '+ quotedstr('%'+cosacercare+'%')+' And
Eliminata =' + QuotedStr('0') + ' And Gestita=Null))';
  ADOTable1.Filter:=ADOTable1.Filter + ' Or ' +
          '((Note LIKE '+ quotedstr('%'+cosacercare+'%')+' And Eliminata = '
+ QuotedStr('0') + ' And Gestita<>'+QuotedStr('2')+')'+
          ' Or '+'(Note LIKE '+ quotedstr('%'+cosacercare+'%')+' And


 Ho risolto così ihihihih!!!!
Giuro, senza nessuna vena polemica, ma pura curiosità... perché usi un
filtro su di una ADOTable anziché una ADOQuery?
Ciao,
Andrea

 Andrea
Andrea

Andrea


 ha scritto nel messaggio
news:cY8Gd.695548$35.27...@news4.tin.it...

Polemica e quando mai! figurati!
Cmq...
1) perchè non saprei nemmeno dove metter mano in un'ADOQuery,mai usata...e
nemmeno ho idea a cosa possa servire
2) mi son sempre trovato bene con i filtri, solo in questo caso dovevo fare
una cosa un pò strana...non mi servirà più in questo
applicativo fare una cosa del genere
3) non potevo perder tempo ad imparare ADOQuery, ma giuro che lo faccio
appena ho un momento di pausa


No no...l'ho aggiunto ora quel campo,funziona perfettamente (vedi l'altro
post su come ho risolto)
Grazie cmq a tutti quelli che mi hanno aiutato!

appena ho un momento di pausa
secondo me, se ti studiassi un attimino le AdoQuery
avresti più momenti di pausa ... :P ... anche in un
ottica client/server


 appena ho un momento di pausa
Quella che tu chiami "perdita di tempo" è una cosa che normalmente
viene considerata essenziale quando si fa uso di database, proprio
perché con poche righe puoi esprimere concetti complessi.
Basta che guardi la query che ti ho proposto io(4 righe molto
chiare) ed il codice per il filtro che hai usato tu. Mi pare
eloquente :-)
Ciao,
Andrea

Grazie dei consigli..appena posso mi faccio un giretto su 
delphi.about.com
 e
studio un pò :)

Oppure aggiungere i parametri, ad esempio:
SELECT * FROM TABELLA WHERE( SERVIZIO LIKE :pServizio ) OR (
                              CATEGORIA LIKE :pCategoria )
                       HAVING ( Eliminata = '0' ) AND
                              ( NOT GESTITA='2' )
e assegnare i parametri a runtime tramite 
...
Query1.parameter.parambyName('pServizio').Value:='abcdefg';
...//eccetera
in questo modo la stringa sql rimane uguale e assegni i parametri di volta in 
volta.
Inviato da 
www.mynewsgate.net