Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    64

    [DELPHI] Uso dell'evento OnFilterRecord

    Salve a tutti,
    per cortesia mi dite come impostare la proprietà Table1.Filter per filtrare record con campi che contegono string scritte con lettere sia maiuscole sia minuscole.
    Grazie dell'attenzione.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,869
    Il criterio puoi configurarlo usando la proprietà FilterOptions.

    Per comparazioni più complesse invece, puoi intercettare e implementare come alternativa l'evento OnFilterRecord.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    64
    Quote Originariamente inviata da alka Visualizza il messaggio
    Il criterio puoi configurarlo usando la proprietà FilterOptions.

    Per comparazioni più complesse invece, puoi intercettare e implementare come alternativa l'evento OnFilterRecord.

    Ciao!
    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    64
    Salve alka,
    ho provato a fare quanto da te esposto. ma ho difficoltà ad impostare FilterOptions.
    Vorrei realizzare un filtro in grado di mostrate sun una DBGrid solo i nomi di autori dell'archivio libri quando il nome dell'autore è maggiore o uguale a un dato nome.
    Per esempio (se nome autore>=Etid1.Text allora mostra tutti gli autori che seguono in ordine slfsbrtico la stringa di Etid1.Text. - Se Etid1.Text='Ros' sulla BDGrid devoono essere visualizzati Rossi, Rosa, ... senza distinzione tra maiuscola a minuscola ).
    Grazie dell'attenzione.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,869
    Quote Originariamente inviata da JuanJuan Visualizza il messaggio
    Salve alka,
    ho provato a fare quanto da te esposto. ma ho difficoltà ad impostare FilterOptions.
    Riporta il codice che hai scritto per l'evento OnFilterRecord.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  6. #6
    Quote Originariamente inviata da JuanJuan Visualizza il messaggio
    Salve alka,
    ho provato a fare quanto da te esposto. ma ho difficoltà ad impostare FilterOptions.
    Vorrei realizzare un filtro in grado di mostrate sun una DBGrid solo i nomi di autori dell'archivio libri quando il nome dell'autore è maggiore o uguale a un dato nome.
    Per esempio (se nome autore>=Etid1.Text allora mostra tutti gli autori che seguono in ordine slfsbrtico la stringa di Etid1.Text. - Se Etid1.Text='Ros' sulla BDGrid devoono essere visualizzati Rossi, Rosa, ... senza distinzione tra maiuscola a minuscola ).
    Grazie dell'attenzione.
    Su come si usa l'evento OnFilterRecord ti hanno risposto sull'altro forum dove crosspostato la tua domanda http://www.pierotofy.it/pages/extras...ter_di_delphi/

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    64
    Ciao
    Grazie dell'appunto, mi sarà utile.
    Vero è che ho postato la richiesta su http://www.pierotofy.it/pages/extras...ter_di_delphi/ , forum che frequento da tempo e ancor prima frequento il forum HTML, su http://www.pierotofy.it/pages/extras/forum/171/ non ho ricevuto risposte precise, (forse io non sono stato capace di capire) e mi sono rivolto al forum HTML.
    Ho rispetto per i forum e per le persone che condividono esperienze con altre persone, ma non sapevo che il "crosspost" non è consentito e per questo chiedo scusa.Ho semplicemente ritenuto normale consultare più fonti.
    Ora se le scuse sono accettate e mi si consente di frequentare questo Forum, ripropongo la richiesta in precedenza esposta.
    La richiesta è quella di ricercare record in una Table i cui campi sono indifferentemente in maiuscolo e minuscolo.
    Ho realizzato questa
    procedure TForm1.Button5Click(Sender: TObject);
    begin
    Table1.Filtered:=False;
    Table1.Filter:='(Autore >= ''' + Edit3.Text +''')';
    Table1.FilterOptions:=[foNoPartialCompare];
    Table1.Filtered:=True;
    Table1.Close;
    Table1.Open;
    end;
    end.
    Ma se la Edit1.Text:='bianchi', nella DBGrid non compare l'Autore Bianchi con B maiuscola.
    Spero do aver ben esposto il quesito.
    Rinnovo le scuse e ringrazio per l'attenzione,
    Ultima modifica di JuanJuan; 27-12-2019 a 19:31

  8. #8
    Copio incollo l'help di Delphi:

    Specifies whether or not filtering is case insensitive, and whether or not partial comparisons are permitted when filtering records.

    Set FilterOptions to specify whether or not filtering is case insensitive when filtering on string or character fields, and whether or not partial comparisons for matching filter conditions is allowed.

    Note: Because unidirectional datasets do not support filters, when you set the FilterOptions property of a unidirectional dataset, it raises an exception.
    By default, FilterOptions is set to an empty set. For filters based on string fields, set FilterOptions to foCaseInsensitive to catch all variations on a string regardless of capitalization.

    When a string in a filter ends with an asterisk (*), it can be used to match partial strings. To disable matching of partial strings and to treat the asterisk as a literal character in string comparisons, set FilterOptions to include foNoPartialCompare.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    64
    Ti ringrazio del "copio e incollo", ma non aggiunge molto alla soluzione del quesito.
    Con le mie modeste conoscenze sono riuscito a realizzare un semplice database del tutto funzionante, anche con una procedura di ricerca (vedi post precedente).
    Ora bisogna migliorare la procedura di ricerca nel modo esposto nei post precedenti, cioè filtrare un record indifferentemente con maiuscole e minuscole. Per tale operazione occorre utilizzare Accept, FilterOptions , OnFilterRecord, etc etc.
    Come congegnare tali oggetti ?

  10. #10
    Come ti hanno già risposto, devi utilizzare la variabile logica ("booleana") "Accept" passata nell'evento OnFilterRecord.
    L'evento passa in rassegna l'intero DataSet e prende solo i record che soddisfano la condizione "Accept".
    Dunque poniamo che tu voglia cercare tutti gli autori che contengono la parola "bianchi":
    Accept dovrà essere settato a "true" ogni qualvolta nel campo "AUTORE" della tua tabella compare la scritta "bianchi" non tenendo conto delle maiuscole e/o minuscole
    codice:
    
    Accept := Pos(UpperCase('bianchi'), UpperCase(DataSet.FieldByName('AUTORE').AsString)) > 0;
    
    La funzione POS(s, s1) ritorna la posizione della sottostringa s nella stringa s1, dunque hai come ritorno un numero intero, per esempio se nel campo della tabella hai un autore che si chiama "aldobianchi" la POS avrà come ritorno 5, poi poniamo la condizione che questo ritorno sia ">0" e in più gli diciamo di elevare entrambe le stringhe maiuscole, e il giochino è fatto la tua tabella viene filtrata con tutti i record dove nel campo "AUTORE" compare la parola "bianchi", a questo punto puoi inventarti le varie possibilità settando la variabile Accept a true, altro esempio:
    codice:
    
    Accept := Pos(UpperCase('bianchi'), UpperCase(DataSet.FieldByName('AUTORE').AsString)) = 1;
    
    in questo modo il tuo dataset viene filtrato per tutti gli autori che "Iniziano" con "bianchi", anche in questo caso non si tiene conto delle maiuscole e/o minuscole.
    L'evento viene richiamato quando la proprietà "Filtered" viene settata a "True".
    Al momento non ho la possibilità di testare il funzionamento di ciò che ho scritto non avendo Delphi sotto mano, ma dovrebbe funzionare tutto.
    Saluti.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.