Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315

    [delphi] ricerca in IBTable Indicizzata

    salve a tutti,

    ho una IBTable indicizzata sul campo nome.
    tale tabella la visualizzo in una DBGrid.

    ho un texbox dove scrivo un stringa da ricercare...

    faccio in questa maniera:
    [code]procedure TForm1.Edit2Change(Sender: TObject);
    begin
    IBTable1.Locate('nome',edit2.Text,[]);
    end;[code]
    volevo avere un effetto di scorrimento della tabella ma non riesco ad ottenere il posizionamento su una ricerca parziale.

    su una tabella TTABLE avrei eseguito la ricerca tramite FindNearest. forse sbaglio ad utilizzare Locate?

    grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Il metodo Locale è un po' controverso: c'è chi lo suggerisce poichè è in grado di ispezionare le caratteristiche della tabella e identificare qual è il mezzo più rapido per posizionarsi su un determinato record, mentre c'è chi lo sconsiglia poichè essendo a conoscenza dell'esistenza di un indice sulla tabella, l'uso di una funzione di ricerca alternativa (ad esempio, con FindKey) è più rapida poichè evita tutti i controlli per individuare quale sia il metodo di ricerca più efficiente.

    Controlla attentamente sulla Guida in linea il significato delle opzioni da passare al metodo Locate: nel tuo codice, l'insieme è vuoto, ma in certi casi è necessario specificare che la ricerca può essere parziale e "case insensitive".

    Se non sbaglio, dovrebbe esserci anche una LocateNext che consente di individuare il record successivo, ma non ne sono sicuro.

    Provare per credere...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    scusa io non riesco a passare i parametri all'istruzione locate, quindi non riesco a ricercare un valore intermedio della chiave.
    io faccio cosi:
    codice:
     IBTable1.Locate('NOME',edit2.Text,[]);
    ho letto l'help e so che dove sono le parentesi quadre posso passare 2 parametri per indicargli TLocateOption = (loCaseInsensitive, loPartialKey); ma non riesco a capire la sintassi con cui scrivere questo comando.

    per quanto riguarda Findkey, lo trovo tra i metodi di TTable ma non tra quelli di IBTable ,....forse devo settare qualcosa nel mio delphi?

    grazie

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Il terzo parametro della Locate è un set, cioè un insieme.

    Infatti, tu specifichi un insieme vuoto usando le parentesi quadre, una aperta ed una chiusa.

    Quell'insieme può essere "nutrito" con uno o più valori dell'insieme stesso, come hai letto della Guida.

    Ad esempio, supponendo che tu debba effettuare una ricerca che sia "case insensitive", devi scrivere
    codice:
      IBTable1.Locate('NOME', Edit2.Text,[loCaseInsensitive]);
    Se invece la ricerca deve essere "case insensitive" ma che includa pure confronti parziali, allora devi scrivere
    codice:
      IBTable1.Locate('NOME', Edit2.Text,[loCaseInsensitive, loPartialKey]);
    Se FindKey non esiste in IBTable, allora si tratta probabilmente di un metodo introdotto solo all'interno della TTable.

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

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.