+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: funzione Replace su evento NotInList

  1. #1
    L'avatar di Diego1966
    Diego1966 non Ŕ in linea Scolaretto
    Luogo
    Palermo
    Post
    131

    funzione Replace su evento NotInList

    Buongiorno a tutto il gruppo.

    Vorrei chiedere a voi tutti, quale potrebbe essere la soluzione al problema che sto incontrando :

    Ho una combobox, che chiamer˛ ComboMittente, la cui Origine dati Ŕ una Tabella, la TblMittenti, strutturata in questo modo: ID - PK (numerazione automatica, o Contatore), Mittente - Testo breve.

    il combo mittente Ŕ cosý settato: Solo in Elenco =SI; Consenti Modifiche ad Elenco Valori=SI; Eredita Elenco Valori=SI; Mostra solo valori Origine Riga=NO.

    ora ovviamente pu˛ capitare che si debba aggiungere una nuova voce e li uso la solita routine che si applica alla proprietÓ NotInList:

    codice:
     Dim IntNuovo As Integer, strTitolo As String
               Dim IntFinestraMsg As Integer, strMsg As String
               strTitolo = "IL MITTENTE DIGITATO NON ╚ IN ELENCO"
    
            strMsg = "VUOI AGGIUNGERE IL NUOVO MITTENTE" & Chr(13) & Chr(10) & NewData & " " & Chr(13) & Chr(10) & "IN ELENCO?"
            IntFinestraMsg = vbYesNo + vbQuestion
            IntNuovo = MsgBox(strMsg, IntFinestraMsg, strTitolo)
    
            If IntNuovo = vbYes Then
    
    
    
                Dim miorst As Recordset
                Set miorst = CurrentDb.OpenRecordset("TblMittente")
    
                miorst.AddNew
                miorst!Mittente = NewData
    
    
                Me![ComboMitt] = miorst![Mittente]
    
                strReplace(miorst).Update
    
                miorst.Close
                strTitolo = "INSERIMENTO NUOVO MITTENTE"
                strMsg = "INSERIMENTO IN ELENCO DEL NUOVO MITTENTE " & Chr(13) & Chr(10) & NewData & Chr(13) & Chr(10) & "EFFETTUATO CON SUCCESSO"
                IntFinestraMsg = vbOKOnly + vbExclamation
                IntNuovo = MsgBox(strMsg, IntFinestraMsg, strTitolo)
                Response = acDataErrAdded
                Me![ComboMitt].Requery
            Else
                strTitolo = "MITTENTE NON IN ELENCO"
                strMsg = "IL MITTENTE " & NewData & " NON ╚ INSERITO NEL DATABASE." & Chr(13) & Chr(10) & "SELEZIONARE DALL'ELENCO"
                IntFinestraMsg = vbOKOnly + vbExclamation
                IntNuovo = MsgBox(strMsg, IntFinestraMsg, strTitolo)
                Response = acDataErrContinue
                Me![ComboMitt].Undo
            End If
    Response = acDataErrContinue
    end sub
    ma poi sopraggiunge un problema, e se l'utente inserisce un nominativo con l'apostrofo al posto dell'accento?, come dire invece di inserire tipo : COLLOV└ INSERISCE COLLOVA', tengo a precisare che tutti i controlli hanno come evento nella proprietÓ KeyPress la funzione KeyAscii = CkDgtUCase(KeyAscii), per cui la stringa mi ritorna tutto in maiuscolo, per cui avevo usato una private function dove sostituivo le lettere accentate con l'apostrovo nel loro carattere originale:

    codice:
    Private Sub ConvertiLetteraMittente()
    
    If Not IsNull(Me.ComboMitt) Or Len(Me.ComboMitt) > 0 Or Me.ComboMitt <> "" Then
    
    
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "A'", "└")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "E'", "╚")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "I'", "╠")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "O'", "Ď")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "U'", "┘")
            '______________________________________________
            
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "Ó", "└")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "ß", "┴")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "Ŕ", "╚")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "Ú", "╔")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "ý", "╠")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "Ý", "═")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "˛", "Ď")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "ˇ", "Ë")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "¨", "┘")
            Me.ComboMitt.Value = Replace(Me.ComboMitt, "˙", "┌")
            
    Else
    
    Exit Sub
    End If
    End Sub
    ma non funge assolutamente e nel momento in cui il record viene scritto in tabella viene scritto con l'apice e non con il carattere corretto. La routine con il replace funzione bene sull'evento AfterUpdate, ma ovviamente non posso usarlo in quanto convertire il valore del controllo dopo l'aggiornamento del record non serve a nulla.

    Mi dareste una mano per cortesia?

  2. #2
    L'avatar di Diego1966
    Diego1966 non Ŕ in linea Scolaretto
    Luogo
    Palermo
    Post
    131
    pensavo ad degli array del tipo VocaliNo (A',E',I',O',U') e VocaliSi(└,╚,╠,Ď,┘) e Replace dove pi¨ o meno andrebbe cosý; Replace( Me!ComboMittente , VocaliSi , VocaliNo) , ma non saprei da dove inziare a scrivere una funzione del genere

  3. #3
    L'avatar di @Alex
    @Alex non Ŕ in linea Very Important Person
    Post
    16,107
    Parli di controllo popolato in modalitÓ Elenco Valori... e poi i dati sono in una tabella...?
    Personalmente lo assocerei al RowSource... Non mi tornano nemmeno le impostazioni della combo... ma lascio a te questo...

    Detto questo... Non fai prima a limitare i caratteri digitati invece di fare quel macello dopo...?
    KEYDOWN o KEYPRESS controlli il tasto premuto che sia tra a¸Z in chr(..) equivalente... e ti togli tutto quel malloppone
    @Alex
    Il CROSSPOST Ŕ VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  4. #4
    L'avatar di Diego1966
    Diego1966 non Ŕ in linea Scolaretto
    Luogo
    Palermo
    Post
    131
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Parli di controllo popolato in modalitÓ Elenco Valori... e poi i dati sono in una tabella...?
    Personalmente lo assocerei al RowSource... Non mi tornano nemmeno le impostazioni della combo... ma lascio a te questo...

    Detto questo... Non fai prima a limitare i caratteri digitati invece di fare quel macello dopo...?
    KEYDOWN o KEYPRESS controlli il tasto premuto che sia tra a¸Z in chr(..) equivalente... e ti togli tutto quel malloppone
    Buona sera Alex, in effetti la combo non era settata per bene: L'origine riga Ŕ questa:
    codice:
    SELECT TblMittenti.ID, TblMittenti.Mittente FROM TblMittente ORDER BY TblMittenti.Mittente;
    le impostazioni : Solo in Elenco =SI ; Consenti miodifiche ad elenco valori=NO; Eredita elenco valori=NO; Mostra solo valori origine riga=SI.

    Il malloppone come ben dici, me lo vorrei evitare, altrochÚ, ma purtroppo molte persone usano accentare le vocali con l'apostrofo, e se dovessi limitare i caratteri per l'inserimento del nuovo record nella combo, dovrei per forza di cose inibire l'apostrofo, cosa che andrebbe benissimo, ma poi siccome chi dovrebbe utilizzare il form magari non controlla cosa ha inserito, mi va ad inserire solo la vocale, per questo avrei voluto che anche se inserisce la vocale con l'apostrofo in fase di salvataggio record quest'ultima fosse sostituita dalla lettere accentata corretta, per intenderci se inserisce un cognome con la A accentata finale, magari scriverebbe A', nel salvare il record quella A' verrebbe salvata correttamente come └, ecco il mio problema, per˛ se tu dici che limitando i caratteri su gli eventi sopracitati risolvo in ogni caso, posso provarci, ma devo considerare che se devo inibire la digitazione di vocali con gli apostrofi, mi viene da pensare che sono da inibire combinazioni di due caratteri per esempio la A + l'apostrofo o apice .

  5. #5
    L'avatar di @Alex
    @Alex non Ŕ in linea Very Important Person
    Post
    16,107
    @Alex
    Il CROSSPOST Ŕ VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  6. #6
    L'avatar di Diego1966
    Diego1966 non Ŕ in linea Scolaretto
    Luogo
    Palermo
    Post
    131
    Ti ringrazio

  7. #7
    L'avatar di @Alex
    @Alex non Ŕ in linea Very Important Person
    Post
    16,107
    Ti Ŕ chiaro come circoscrivere ai soli caratteri UTILI...?
    @Alex
    Il CROSSPOST Ŕ VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  8. #8
    L'avatar di Diego1966
    Diego1966 non Ŕ in linea Scolaretto
    Luogo
    Palermo
    Post
    131
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Ti Ŕ chiaro come circoscrivere ai soli caratteri UTILI...?
    Grazie Alessandro, presumo di si:

    codice:
    Private Sub ComboMittente_KeyPress(KeyAscii As Integer)
    
         If KeyAscii = Numero Or KeyAscii = Numero Then
               MsgBox "Il nome non pu˛ contenere il carattere  " & Chr(KeyAscii)
                  KeyAscii = 0
                   Cancel = True
         else 
           exit sub
         end if
    
    End Sub
    o ancora meglio si potrebbe fare un ciclo con i soli caratteri da inserire, e di conseguenza se non rientrano nel ciclo si escludono automaticamente

  9. #9
    L'avatar di AntonioG
    AntonioG non Ŕ in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,258
    Blogs
    5
    else
    exit sub

    non hanno alcuna utilitÓ
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting Ŕ vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  10. #10
    L'avatar di Diego1966
    Diego1966 non Ŕ in linea Scolaretto
    Luogo
    Palermo
    Post
    131
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    else
    exit sub

    non hanno alcuna utilitÓ
    li tolgo

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi