Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [VB6] Problema completamento automatico testo in Textbox

    Salve..
    Avevo bisogno di creare una specie di completamento automatico del testo in dei TextBox e dei ComboBox prendendo dei dati da un DB Access..

    Ho fatto questo:

    codice:
    Private Sub cmbint_KeyUp(KeyCode As Integer, Shift As Integer)
    
        [ ... ] Parte di connessione al DB
    
        Dim sql As String
        sql = "SELECT intda FROM azioni WHERE intda LIKE '" & Apostrofo(cmbint.Text) & "%' ORDER BY intda"
        rs.Open sql, cn, 3, 3
        If (Not rs.EOF) And KeyCode > 32 And KeyCode <> vbKeyLeft And KeyCode <> vbKeyRight Then
            Dim inisel
            inisel = Len(cmbint.Text)
            cmbint.Text = rs("intda")
            cmbint.SelStart = inisel
            cmbint.SelLength = Len(cmbint.Text)
        End If
        rs.Close
    End Sub
    In pratica sull'evento keyUp leggo il textbox e vado a prendere la prima occorrenza del DB che inizia con ciò che è stato immesso nel textbox e seleziono la parte aggiunta, funziona, ma ha un problema, è lento, troppo lento, premenendo velocemente (poi nenache tanto) i tasti sulla tastiera non fa in tempo a selezionare il testo e quindi ciò che si scrive va ad aggiungersi a ciò che già sta nella textbox invece di sostituirvicisi..

    Spero di essere stato chiaro..

    Consigli?

    Grazie mille..
    zoodany..

    www.zoodany.it

  2. #2
    quanti vocaboli hai nel db?

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Inoltre, hai impostato degli indici nel db?

  4. #4
    Originariamente inviato da Luciano79
    quanti vocaboli hai nel db?
    Ehm, vocaboli?? che intendi?
    zoodany..

    www.zoodany.it

  5. #5
    Originariamente inviato da oregon
    Inoltre, hai impostato degli indici nel db?
    Ehm.. Indici?? Intendi chiavi? No...

    Quella tabella del mio db ha 9 campi, 5 di testo, 1 data, e 3 boolean..

    zoodany..

    www.zoodany.it

  6. #6
    Originariamente inviato da zoodany
    Ehm, vocaboli?? che intendi?
    fai capire che il db è un dizionario, quindi mi aspetto che ad ogni record corrisponda un vocabolo del dizionario (campo intda)... corretto?

    allora, quanti record ha?

  7. #7
    Originariamente inviato da Luciano79
    fai capire che il db è un dizionario, quindi mi aspetto che ad ogni record corrisponda un vocabolo del dizionario (campo intda)... corretto?
    Non è un dizionario, ma poco importa....

    allora, quanti record ha?
    Pochi, non più di una decina, lo sto provando..
    zoodany..

    www.zoodany.it

  8. #8
    Originariamente inviato da zoodany
    Pochi, non più di una decina, lo sto provando..
    Ok, ma in futuro quanto prevedi che siano all'incirca?
    Se non sono troppi (anche fino a 20.000) puoi pensare di caricare il database all'avvio del programma in 256 array. Per esempio l'array Vettore(65,xxx) conterrà tutte le parole che iniziano con la "A" perchè 65 è l'intero corrispondente al suo valore esadecimale 41. In questo modo puoi utilizzare la prima lettera come indice. Per semplificare puoi usare UCase in modo da non distinguere maiuscole da minuscole. La maggior parte degli array resterà quindi vuota. Così eviti sia di fare una ricerca su tutto il database, che di lanciare continuamente sql. Secondo me con un array di 5.000 parole (ovviamente tutte con la stessa iniziale) avresti un risultato quasi istantaneo per la prima lettera.
    La ricerca delle successive lettere è comunque immediata.
    Per esempio se per il momento hai scritto "Bac" vuol dire che stai ulilizzando Vettore(66,xxx). Visto che il vettore sarà ordinato, per trovare tutte le parole che iniziano con "Bac" non serve controllare una parola alla volta, basta individuare con una ricerca dicotomica l'indice della parola precedente a "Bac" e di quella successiva a "Bac"_&_String(chr(255),yyyy) e caricare nella Combo tutte le parole comprese tra i due indici.
    La ricerca dicotomica è velocissima, per trovare una parola tra 10.000 nel peggiore dei casi ci vogliono 12 passaggi!
    Sembra lungo ma non lo è, puoi farlo nel giro di un paio d'ore.
    Ovviamente dipende da quanti record dovrà contenere.

  9. #9
    Grazie mille Luciano... Ma allora dici che devo cambiare completamente sistema?
    Non è possibile modificare il codice che ho postato o fare cmq in un modo simile? Perchè quel codice l'ho usato in molti textbox del mio programma ed essendomi accorto solo ora del problema dovrei cambiarli tutti...
    zoodany..

    www.zoodany.it

  10. #10
    Originariamente inviato da zoodany
    Grazie mille Luciano... Ma allora dici che devo cambiare completamente sistema?
    Non è possibile modificare il codice che ho postato o fare cmq in un modo simile? Perchè quel codice l'ho usato in molti textbox del mio programma ed essendomi accorto solo ora del problema dovrei cambiarli tutti...
    Questo è solo il mio modesto parere, forse qualcuno ha idee migliori. Se vuoi provarlo ti consiglio di fare prima una copia del programma
    PS: il resto del programma puoi non toccarlo!

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