Newsgroup: it.comp.appl.access
Titolo: problemi scrittura textbox

Ciao a tutti, mi capita una cosa veramente strana. 
 
Ho una form principale che all'apertura ha questo codice
 
Private Sub Form_Open(Cancel As Integer)
 
' richiamo la funzione che mi carica in un recordset
' l'archivio delle piastrelle.
Call prodotti
 
' stampo in una casella di testo il numero di record
txtRecord.Value = NumRecord
 
' associo alla listbox il recordset
Set Me.subfrm_dettaglio_prod.Form.Recordset = rs
 
Me![subfrm_dettaglio_prod]![txtCodart].ControlSource = "codart"
Me![subfrm_dettaglio_prod]![txtDescriz].ControlSource = "descrizione"
Me![subfrm_dettaglio_prod]![txtUm].ControlSource = "um_interna"
 
Me.subfrm_dettaglio_prod.Requery
 
End Sub
 
Nella routine prodotti ho una funzione che mi riempie un recordset ado chiamato rs e fin qui tutto ok
 
Nella form principale ho una casella di testo a cui è collegato questo codice:
 
Private Sub txtRicerca_Change()
Dim strdescrizione As String
 
' rilevo il nome del campo descrizione
strdescrizione = Nz(Me.txtRicerca.Text, "")
 
 
' evitare continue connessioni al databse inutile, carico prima tutto il recordset
' fatto questo finche' la txtbox non viene cancellata continuo a filtrare sempre quel recordset
If strdescrizione = "" Then
    Call prodotti
Else
    rs.Filter = "Descrizione LIKE '%" & strdescrizione & "%'"
End If
 
txtRecord.Value = NumRecord
 
Set Me![subfrm_dettaglio_prod].Form.Recordset = rs
 
Me![subfrm_dettaglio_prod]![txtCodart].ControlSource = "codart"
Me![subfrm_dettaglio_prod]![txtDescriz].ControlSource = "descrizione"
Me![subfrm_dettaglio_prod]![txtUm].ControlSource = "um_interna"
 
 
End Sub
 
Con questa routine alla pressione dei caratteri inizio a filtrare i risultati nella sottomaschera, non capisco per quale motivo ogni volta che digito un carattere nella casella di testo il cursore mi torna subito al primo carattere non permettendomi di proseguire con la digitatazione
 
grazie mille ciao a tutti

Il Carattere JOLLY con JET non è [%] ma l'ASTERISCO...
 
 rs.Filter = "Descrizione LIKE '*" & strdescrizione & "*'" 
 
Aggiungerei un pezzetto...
 
 rs.Filter = "Descrizione LIKE '*" & Replace(strdescrizione,"'","''") & "*'" 
 
Saluti
 
@Alex


uhmmmmm    e' ADO?
-- 
ac (x=y-1)
Aborro il Killfile
(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 


Ciao Alex,
 
grazie per la risposta, ho provato la tua modifica ma ahimè ho sempre lo stesso problema...
 
appena scrivo nella textbox di ricerca il cursore mi si posiziona nuovamente all'inizio del textbox, tipo come se la maschera principale facesse un refresh non voluto.
 


ok ho fatto un piccolo passo avanti aggiungendo questa riga
 
If Not IsNull((Len(Me.txtRicerca))) Then
    Me.txtRicerca.SelStart = Len(Me.txtRicerca)
End If
 
ora riesco a scrivere, ma quando batto lo spazio il cursore torna indietro di una posizione, cosa può mancare???

Stiamo ancora parlando del problema iniziale...? Non mi pare...
 
@Alex

 @Alex
 
Si sempre quello, ho effettuato la modifica che mi hai detto ma non ha avuto effetto.
 
Quindi ho provato aggiungendo questo codice dopo il requery
 
If Not IsNull((Len(Me.txtRicerca))) Then 
    Me.txtRicerca.SelStart = Len(Me.txtRicerca) 
End If 
 
Ora riesco a scrivere ma non riesco ad aggiungere lo spazio dopo la parola, è come se la casella di testo facesse in automatico un trim 
 
grazie mille


Forse devi cambiare l'evento... invece di change prova a utilizzare afterUpdate


Mettendo l'evento AfterUpdate il filtro mi viene fatto solo quando tolgo il focus dalla casella di testo, io ho necessità che il filtro avvenga mentre digito.


Qualche nuova idea????


Su Change scrivi solo questo:
 
    Me.Recalc
    Me.textRicerca.SelStart = Len("" & Me.textRicerca)
 
--
sv

Niente da fare, questo è il codice scritto nell'evento Change ma il problema è sempre lo stesso:
 
Private Sub txtRicerca_Change()
Dim strdescrizione As String
 
' rilevo il nome del campo descrizione
strdescrizione = Nz(Me.txtRicerca.Text, "")
 
 
' evitare continue connessioni al databse inutile, carico prima tutto il recordset
' fatto questo finche' la txtbox non viene cancellata continuo a filtrare sempre quel recordset
If strdescrizione = "" Then
    Call prodotti
Else
    rs.Filter = "Descrizione LIKE '*" & strdescrizione & "*'"
    ' rs.Filter = "Descrizione LIKE '*" & Replace(strdescrizione, "'", "''") & "*'"
End If
 
txtRecord.Value = NumRecord
 
Set Me![subfrm_dettaglio_prod].Form.Recordset = rs
 
Me![subfrm_dettaglio_prod]![txtCodart].ControlSource = "codart"
Me![subfrm_dettaglio_prod]![txtDescriz].ControlSource = "descrizione"
Me![subfrm_dettaglio_prod]![txtUm].ControlSource = "um_interna"
 
If Not IsNull((Len(Me.txtRicerca))) Then
    Me.Recalc
    Me.txtRicerca.SelStart = Len("" & Me.txtRicerca.Text)
End If
 
End Sub


Il problema è lo stesso, nel senso che battendo lo spazio il cursore ti ritorna indietro? Questo spazio a cosa serve? Vedi che lo spazio su change per filtrare la lista, lo devi sostituire con un asterisco.
 
--
sv


il problema è lo stesso nel senso che battendo lo spazio il cursore torna indietro ed anche utilizzando l'asterisco viene scritto l'asterisco. 
 
lo spazio mi serve per aggiungere altre parole e per affinare la ricerca in quanto ho dei prodotti composti da molte parole..
 
Magari sbaglio il modo in cui affronto il problema. ho sempre utilizzato un listbox su cui effettuavo il filtro tramite la casella textbox e li tutto funzionava.
 
il problema mi è sorto quando ho deciso (per comodità mia) di sostituire questa listbox con una sottomaschera e non riesco ad uscire da questo problema.....