Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Rieccomi qui con un nuovo quesito, sono riuscito (sbirciando molto sulla rete) a strutturare una ricerca che vada a cercare la parola ricercata in ogni parola contenuta nella stringa ricercata.
esempio:
Parola da ricercare= "Prova"
Stringa su cui cercare= "Questa è una prova"
il programma suddivide automaticamente la stringa in questo modo= |Questa|è|una|prova| quindi non fa un controllo bensì ne fa 4 inoltre non ricerca la frase esatta bensì l'inizio quindi se io nella stringa da ricercare avessi avuto "provaova" al posto di "prova" avrebbe comunque inserito il record nella listview da me creata.
Ora il problema è applicare una ricerca su più parametri, titolo, anno, categoria ect
avevo pensato di usare delle flags, ho impostato in vari modi il codice e ho riscontrato loop infiniti, controlli solo sul primo records, ed altri problemini. vi rilascio di seguito il codice che ho trovato sulla rete per la ricerca, riadattato da me per il mio programma.
Set X = FrmVisList.ListFilm.ListItems.Add(, , RTrim(SchedaFilm.Cod))
X.SubItems(1)=RTrim(SchedaFilm.Tit)
X.SubItems(2)=RTrim(SchedaFilm.TitO)
X.SubItems(3)=RTrim(SchedaFilm.Regia)
X.SubItems(4)=RTrim(SchedaFilm.AnnoU)
EndIf
Else
If FVet(i)=FalseThen
ExitDo
EndIf
EndIf
Loop
Loop
Close #2
Loop
Close #1
EndIf
EndSub
Questa è l'impostazione attuale, il concetto logico è che appare la finestra di ricerca, si seleziona tramite l'option il metodo (il metodo semplice funziona alla grande), ma il nostro caso riguarda quello avanzato, mettiamo caso che io cerco i film anno di uscita (Variabile AnnoUX) il programma controlla quali campi sono "compilati" riscontra che solo il campo txtAnnoUX è compilato allora incrementa l'indice "i", ridimensiona i vettori, aggiunge al vettore CheckVet la variabile dove si deve cercare, in FindVet aggiunge la variabile contente il valore da ricercare, mentre in FVet la Flag appartenente, dopodiché legge l'archivio SchedaFilm, e richiama la funzione di ricerca, una volta qui controlla se all'interno della variabile c'è la parola o il numero ricercato, se c'è imposta la flag su VERO altrimenti rimane falsa. Finito il controllo su ogni vettore indicizzato dovrebbe controllare in modo ciclico le flag se sono tutte vere allora dovrebbe aggiungere la scheda nella listview uscendo dal do per ripetere l'operazione per la prossima scheda fin quando non finiscono (aggiungendo allo stesso modo altri risultati), altrimenti esce dal do e riprende i controlli sulla prossima scheda.
Ma purtroppo ciò non avviene o almeno... clicko su cerca, mi cancella i campi della listview ma non mi da nessun risultato... Qualche soluzione?!
Ultima modifica effettuata da WillyVB il 05/01/2012 alle 14:20
la prima cosa da fare è sistemare tutte le dichiarazioni delle variabili assegnadogli il tipo di dato specifico, ad esempio tu stai utilizzando il modo di dichiarare le variabili implementato in vb.net che permette di dichiarare il tipo di un blocco di variabili mentre in VB6 ogni variabile va dichiarata specificatamente
Codice sorgente - presumibilmente VB.NET
ad esempio Dim a, b, c AsInteger in vb.net sono 3 variabili Integer, in VB6 solo la c è Integer le altre sono Variant, quindi vanno specificate tutte: Dim a AsInteger, b Asinteger, c Asinteger
la funzione TrovaParola2 non ha senso poiché restituisce sempre un valore vbnullstring
io la correggerei così togliendo la variabile FLAG:
Grazie mille ampeg dalla base dei tuoi consigli e con una trentina di prove in debug sono riuscito a trovare "l'errore" ed isolarlo, ora il codice è completo e funzionante, ho dovuto usare i checkbox per "attivare" i vari parametri da ricercare in quanto lo stesso "spazio" ovvero "" per vb è un "carattere" quindi va ricercato tramite i checkbox e l'utilizzo delle FLAGS ho creato dei vettori che contengono i parametri da ricercare posto qui il controllo finale che faccio, chissà mai sarà utile a qualcuno in futuro.
Codice sorgente - presumibilmente VB.NET
For i = 1 To NE
If CheckVet(i) <> ""And FindVet(i) <> ""Then
FVet(i)= TrovaParola2(CheckVet(i), FindVet(i))
If FVet(i)=FalseThen
ExitFor
Else
If FVet(i)=TrueAnd i = NE Then
Set X = FrmVisList.ListFilm.ListItems.Add(, , RTrim(SchedaFilm.Cod))