Newsgroup: it.comp.appl.access
Titolo: Consentire un massimo di tre spazi in casella di testo

Buon giorno a tutti
il problema sorge quasi spontaneo quando si decide di non consentire
spazi nelle caselle di testo dove andra' immesso il cognome per evitare
paranoie nella ricerca perche' magari uno lo digita senza, con uno o
piu' spazi.
ora il problema non si pone se il cognome e' un unica parola ma se il
cognome e' composto da due o piu' parole?
non c'e' una maniera per consentire un massimo di tre spazi sulla
casella di testo?
Per evitare gli spazi ed inserire i caratteri tutti maiuscoli sia a
video che a stampa uso la funzione
UCase(Replace(Me.TxtCognome, " ", ""))
per ottenere, invece, quanto descritto sopra mi veniva in mente
qualcosa del tipo
Private Sub TxtCognome_AfterUpdate()
if me.TxtCognome.Format=UCase(Me.TxtCognome@ & me.txtCognome) Or
   me.TxtCognome.Format=UCase(Me.TxtCognome@ & @me.txtCognome) Or
   me.TxtCognome.Format=UCase(Me.TxtCognome@ & @me.txtCognome&
@me.txtCognome) then
me.TxtCognome=UCase(me.TxtCognome
else
UCase(Replace(Me.TxtCognome, " ", ""))
end if
end sub
ma non ne vuole sapere di funzionare
nemmeno sostituendo il carattere @ con " "
potete dirmi dove sbaglio e se c'e' maniera di fare cio'?
Grazie a tutti 
Saluti 
Diego

diego ha scritto:

pero' a dire il vero mi sembra una cazzata, e se uno sbagliasse a
digitare che so' Brambilla con Bram billa perche' magari gli scappa un
colpo di barra spaziatrice??....mmmm... mi sa che e' un posto stupido,
scusate ma non credo ci siano soluzioni, l'errore umano e' sempre in
agguato!!!

 ha scritto nel messaggio
news:1155555433....@m73g2000cwd.googlegroups.com...

Se ti puע andar bene:
supponendo che la casella testo si chiami COGNONE,
prima di aggiornare inserirei questo codice:
Private Sub Cognome_BeforeUpdate(Cancel As Integer)
If IsNull(Me.Cognome) Then
Exit Sub
End If
    Dim Msg, Style, Response
    If Not CognomeValido(Me.Cognome) Then
        Msg = Me.Cognome.Value & vbCrLf & vbCrLf & "Il COGNOME non sembra
valido. " & vbCrLf & "Usarlo ugualmente?"
        Style = vbYesNo + vbQuestion + vbDefaultButton2
        Response = MsgBox(Msg, Style, "Controllo COGNOME")
        If Response = vbNo Then DoCmd.CancelEvent
    End If
End Sub
ed il modulo relativo:
Public Function CognomeValido(strTextToCheck As String) As Boolean
On Error GoTo ProcErr
    Dim lngPos As Long
    Dim lngCnt As Long
    Dim strCharToCheck As String
    Dim Count As Integer
    Dim Numeric As Integer
    Count = 0
    Numeric = 0
    ' Caratteri Numerici Non accettati
    For lngCnt = 1 To Len(strTextToCheck)
        strCharToCheck = LCase(Mid(strTextToCheck, lngCnt, 1))
        lngPos = InStr(1, "abcdefghijklmnopqrstuvwxyz'אטילעש",
strCharToCheck, vbTextCompare)
        If IsNumeric(strCharToCheck) Then Numeric = 1
    Next
    If Numeric = 1 Then CognomeValido = False: Exit Function
        ' Numero di SPAZI
         For lngCnt = 1 To Len(strTextToCheck)
        strCharToCheck = LCase(Mid(strTextToCheck, lngCnt, 1))
        If strCharToCheck = Chr(32) Then Count = Count + 1
        [Forms]![Maschera1]![b] = Count
    Next
    If Count <= 3 Then CognomeValido = True: Exit Function
ProcExit:
    Exit Function
ProcErr:
    Resume ProcExit
End Function
Sarebbe perע da aggiungere anche il controllo di caratteri strani come il +
o -....
Ciao
Paolo

diego ha scritto:

Non è che stai facendo un giro assurdo semplicemente per evitare che
il carattere Spazio
sia non digitabile ....???
Questa funzione inserita nell'evento KeyPress fà in modo che i
caratteri ammessi siano solo LETTERE......
Se la modifichi, ed è molto semplice, vedrai che ti eviti tutto quel
popò di codice che
in ogni caso è fallace di suo....!
Public Function CkDgtWord(KeyAscii As Integer) As Integer
'Verifica se il TASTO PREMUTO è una lettera
'Va inserita nell'EVENTO KEY_PRESS
'65-90(Maiuscole) 97-122(Minuscole)
   CkDgtWord = 30
   If ((KeyAscii >= 65 And KeyAscii <= 90) Or (KeyAscii >= 97 And
KeyAscii <= 122)) Then CkDgtWord = KeyAscii
   Select Case KeyAscii
      Case vbKeyBack, vbKeyTab, vbKeyClear, vbKeyReturn, vbKeyShift
         CkDgtWord = KeyAscii
      Case vbKeyEscape, vbKeySpace, vbKeyDelete, vbKeyNumlock
         CkDgtWord = KeyAscii
   End Select
End Function
Saluti
@Alex