Newsgroup: it.comp.appl.access
Titolo: Selstart

Quando in un campo sull'evento modifica inserisco uno spazio me lo mangia
Private Sub Cerca_Change()
    Dim j As Integer, tmp As String, tmplen As Integer, varItem As Variant,
ctlList As Control
    tmp = UCase(Me.Cerca.Text)
    tmplen = Len(tmp)
    'Ricerca per descrizione macchina
    If Asc(Me.Cerca.Text) < 48 Or Asc(Me.Cerca.Text) > 57 Then
    .......
    .......
    .......
    Me.Cerca.SetFocus
    Me.Cerca.SelStart = Len(Me!Cerca.Text)
end sub
come mai ?
Grazie, Alberto

"ALCAU (ST1)" ha scritto:

scusami ma credo di non capire. 
1)sull'evento modifica non inserisci uno spazio, quello che fai e'
intercettare l'evento modifica
2) se il valore non e' un numero fai qualcosa (a parte che nella routine
manca end if, magari hai tagliato qualcosa.)
3) "cerca" che tipo di controllo e'? perche' usi la proprieta' text?
4) che fa il sistema? non fa il setfocus? non mette 1 in
me.cerca.selstart?
5) fare me.cerca < "0" or me.cerca > "9" era lo stesso. ripeto perche'
usi text?
6) a meno che i ..... non significhino qualcosa a che ti serve fare
l'ucase?
7) ogni tanto access ha fame ;=))
a.cara

Questa è la routine completa
Private Sub Cerca_Change()
On Error GoTo Errman
    Dim j As Integer, tmp As String, tmplen As Integer
    tmp = UCase(Me.Cerca.Text)
    tmplen = Len(tmp)
    Me.Cliente_precedente.Enabled = False
    Me.Cliente_successivo.Enabled = False
    Me.Ultimo_cliente.Enabled = False
    Me.Primo_cliente.Enabled = False
    'Ricerca per nome
    If Asc(Me.Cerca.Text) < 48 Or Asc(Me.Cerca.Text) > 57 Then
        For j = 0 To ElencoClienti.ListCount - 1
            If UCase(Left(ElencoClienti.ItemData(j), tmplen)) = tmp Then
                'Uso & Chr$(34) & per raddoppiare l'apice in caso di ricerca
di un nominativo con apostrofo
                DoCmd.Echo False
                Me.RecordSource = "SELECT * FROM Clienti WHERE cli_nome LIKE
" & Chr$(34) & ElencoClienti.ItemData(j) & Chr$(34)
                Me.Cerca.SetFocus
                Me.Cerca.SelStart = 255 'Len(Me!Cerca.Text)
                ElencoClienti.Value = ElencoClienti.ItemData(j)
                'Controlla la posizione del cursore nella casella Cerca
                'Funzionano tutte e due le soluzioni sia .SelStart = 255 che
.SelStart = Len(Me!Cerca.Text)
                DoCmd.Echo True
                Exit For
            End If
        Next
    Else
        'Ricerca per codice cliente
        If Asc(Me.Cerca.Text) < 48 Or Asc(Me.Cerca.Text) <= 57 Then
            Dim Find As Variant
            Find = DLookup("[cli_nome]", "Clienti", "[cli_cod] = '" &
Me.Cerca.Text & "'")
            Me.RecordSource = "SELECT * FROM Clienti WHERE cli_nome LIKE '"
& Find & "'"
            Me.Cerca.SetFocus
            Me!Cerca.SelStart = Len(Me!Cerca.Text)
            ElencoClienti.Value = Find
        End If
    End If
Exit Sub
Errman:
    If Err.Number = 5 Then Resume Next
    If Err.Number = 3075 Then Resume Next
End Sub
Il sistema, se inserisco uno spazio e la/e lettere che lo precedono sono
presenti in un valore da ricercare me lo mangia.
Se per esempio ho delle macchine che si chiamano:
Macchina 1
Macchina 2
Macchina 3
Se digito uno spazio dopo la m non lo prende se digito una qualsiasi lettera
diversa dalla m lo spazio lo mantiene
Spero di essere stato chiaro.
Alberto

 Spero di essere stato chiaro.
no
cmq:
se le select sono effettivamente come le hai scritte sono sbagliate
nella like, ripeto non mi sembra di aver visto l'asterisco. Che succede
se le select non restituiscono righe?
-- 
Alessandro Cara

 Alessandro Cara


azzeriamo tutto. Credo di aver piu' o meno capito quello che vuoi fare.
Premessa uso raramente lbx (che sarebbe una evoluzione di lbo ;=)) piu'
spesso cbx. 
e' evidente che con lbx (ti avevo fatto la domanda sul tipo di
controllo) puoi solo scegliere.
Quello che mi chiedo e'?
Se nel tuo lbx sono presenti clienti (tutti?) che necessita' c'e' di
fare le select o le dlookup.
cmq: come la vedo io:
1) hai una txt sulla quale scrivi (nome o codice) e man mano che scrivi
vuoi posizionarti sul relativo elemento della lbx (simulando una cbx).
2) se sulla lbx riporti 2 colonne (di cui quella con il codice nascosta)
la sola cosa che devi fare e' scorrerti (come fai) l'lbx (ha gia'
l'ordinamento, ma non e' un problema)  senza riaccedere alla base dati,
quindi niente select e dlookup. 
3) continuo a non capire il me.recordsource. Questo quante volte lo
cambi? ogni volta che digiti un carattere? Non sarebbe il caso di farlo
solo alla fine. Non ho capito perche' la modifica del recordsource per
un non trovato ti dovrebbe andare in errore (se la select e' corretta).
Non va in errore, trova solo 0 record.
4) sono un po' tardo, ma meglio tardi che mai, la cosa che vuoi ottenere
e' anche la selezione sul parziale di codice e di nome per ottenere la
visibilita' di piu' record. Ok questo fa si che il cambio di
recordsource lo devi fare progressivamente, e quindi da cio' l'uso della
select sulla quale pero' se non scrivi cod_xxx (dove "xxx" e nome o
"cod" like 'val*' non ti da' il risultato sperato. Pero' mi hai detto
che hai cambiato la like con uguale e quindi questo ragionamento e'
allora sbagliato?
Ho il vago dubbio (in questo non ho mai fatto test) che al cambio di
recordsource il sistema rifaccia subito la query. Certo che se il nome
e' lungo e la tabella clienti pure access lo fai lavorare per bene.
S.e e/o O
-- 
Alessandro Cara


Potrei ma non devo digitare tutto il nome, se mi ci avvicino lo posso poi
scegliere dalla lbx.

Il recordsource della lbx non contiene il codice cliente ma solo il nome ed
è per quello che faccio il dlookup.
Da notare che il codice cliente non è l' id ma un codice numerico che il
cliente assegna al nominativo
Nella lbx visualizzo quindi una sola colonna (cli_nome)
Alberto