Access - Campo maiuscolo/minuscolo

martedì 04 dicembre 2007 - 10.00

biennio Profilo | Newbie

Salve a tutti.

Quesito da un utente poco esperto.

In una tabella [Dipendenti] ho i dati anagrafici nel campo [Nome] inseriti così: "BIANCHI Marcello", cioe' senza separare in campi diversi il cognome dal nome.
Come posso operare la separazione in una nuova tabella o in nuovi campi considerando che ho anche cognomi e nomi doppi, come BIANCHI ROSSI Aldo Mario, ma che il cognome è sempre in maiuscolo?

Grazie in anticipo.

Bi-Ennio

alpanix Profilo | Junior Member

ciao
dovrai crearti una routine che analizza il campo della tabella e operi di conseguenza

la prima cosa da fare è separare il campo ad ogni spazio mettendo i valori in variabili
dopodiché devi controllare la seconda lettera di ogni variabile e nel caso sia maiuscola la metti nella variabile cognome altrimenti nella variabile nome

è molto più semplice di quanto sembri
immagino sia una cosa che ti serve una tantum, giusto?
AlPanix

biennio Profilo | Newbie

>la prima cosa da fare è separare il campo ad ogni spazio mettendo
>i valori in variabili
>dopodiché devi controllare la seconda lettera di ogni variabile
>e nel caso sia maiuscola la metti nella variabile cognome altrimenti
>nella variabile nome
>
>immagino sia una cosa che ti serve una tantum, giusto?

Grazie per la risposta.

Si, la cosa è occasionale per sistemare il db.
Però essendo poco esperto non so come sistemare opportunamente le variabili.

Ho provato partendo da questo trovato in rete:
INSERT INTO [NomeTabella] (CampoCognome, CampoNome)
SELECT Left$([Nome],InStr(1,[Nome],' ')-1) AS Espr1, Mid$([Nome],InStr(1,[Nome],' ')+1) AS Espr2
FROM [Dipendenti];

ma il punto è che anziche' restituire "DI MARIO" nel campo cognome e "Aldo Franco" nel campo nome (come vorrei) restituisce "DI" nel cognome e "MARIO Aldo Franco" nel nome.

Come posso modificare l'SQL della query?

Ancora grazie


Bi-Ennio

alpanix Profilo | Junior Member

>Ho provato partendo da questo trovato in rete:
>INSERT INTO [NomeTabella] (CampoCognome, CampoNome)
>SELECT Left$([Nome],InStr(1,[Nome],' ')-1) AS Espr1, Mid$([Nome],InStr(1,[Nome],'
>')+1) AS Espr2
>FROM [Dipendenti];
>
>ma il punto è che anziche' restituire "DI MARIO" nel campo cognome
>e "Aldo Franco" nel campo nome (come vorrei) restituisce "DI"
>nel cognome e "MARIO Aldo Franco" nel nome.
>
>Come posso modificare l'SQL della query?

infatti la soluzione del problema è differente
devi intervenire da VBA, altrimenti ti tronca il tutto sempre al primo spazio

ti faccio l'esempio pratico:
nella tua maschera c'è il campo da spezzare txtCOGNOMEnome
devi inserire altre due caselle di testo non associate nominate txtCognome e txtNome
nell'evento Su corrente della maschera dovrai scrivere quanto segue:


Dim lngNominativo As Integer ' Lunghezza del campo txtCOGNOMEnome
Dim strOffset As Integer ' Indice di lettura del campo txtCOGNOMEnome

' Onde evitare errori di valorizzazione escludo i record vuoti
If IsNull(txtCOGNOMEnome) Then
txtCognome = ""
txtNome = ""
Exit Sub
End If

lngNominativo = Len(txtCOGNOMEnome)

' Inizio a controllare le lettere che compongono il campo a partire dal primo carattere fino all'ultimo
For strOffset = 1 To lngNominativo

' Se il codice ASCII del carattere indica un carattere minuscolo
If Asc(Mid(txtCOGNOMEnome, strOffset, 1)) >= 97 And Asc(Mid(txtCOGNOMEnome, strOffset, 1)) <= 122 Then
' Seleziono la stringa fino a 3 caratteri prima a quello che sto controllando,
' poiché il primo carattere minuscolo segue uno spazio ed un carattere maiuscolo,
' quindi devo tornare indietro di 1 carattere che è quello che sto analizzando,
' 1 carattere che è quello maiuscolo ed 1 carattere che è lo spazio
txtCognome = Left(txtCOGNOMEnome, strOffset - 3)
' Poi attribuisco alla casella di testo txtNome il restante testo
txtNome = Mid(txtCOGNOMEnome, strOffset - 1, lngNominativo - Len(txtCognome))
Exit Sub
End If

Next strOffset


>Ancora grazie
prego
AlPanix

biennio Profilo | Newbie

>infatti la soluzione del problema è differente
>devi intervenire da VBA,

Il punto è che in VBA sono una frana.

>nella tua maschera c'è il campo da spezzare txtCOGNOMEnome
>devi inserire altre due caselle di testo non associate nominate
>txtCognome e txtNome

Fatto.

>nell'evento Su corrente della maschera dovrai scrivere quanto
>segue:

Fatto. La routine inizia cosi':
Private Sub Form_Current()
Dim lngNominativo As Integer ' Lunghezza del campo txtNominativo

e termina con:
End If
Next strOffset
End Sub

ed in mezzo tutto cio' che mi hai suggerito.

Ora, e mi vergogno un po' a dirlo, come si deve operare per far partire la routine?
Se clicco su 'esegui sub' mi si apre una finestra 'macro'... e poi?

Grazie per la vostra pazienza


Bi-Ennio

alpanix Profilo | Junior Member

ho allegato un esempio
se clicchi su Annulla nel box che ti appare quando fai partire la maschera la tabella non viene toccata e puoi scorrere i records senza che siano stati valorizzati Nome e Cognome in modo corretto
se invece clicchi su OK il codice fa un giro su tutta la tabella e controlla se i campi Nome e Cognome sono valorizzati
se non lo sono esegue quanto sopra scritto, altrimenti salta il record e passa al successivo
alla fine della tabella, torna al primo e lo visualizza
se controlli i records a questo punto, i nomi e cognomi sono tutti al posto giusto
AlPanix

alpanix Profilo | Junior Member

>Ora, e mi vergogno un po' a dirlo, come si deve operare per far
>partire la routine?
>Se clicco su 'esegui sub' mi si apre una finestra 'macro'...
>e poi?

Non devi cliccare su Esegui Sub
La routine è eseguita automaticamente ogni volta che passi da un record all'altro in visualizzazione maschera
nel db di esempio che ho inviato c'è anche l'implementazione di aggiornamento per rendere effettive le modifiche

facci sapere
AlPanix

biennio Profilo | Newbie

>ho allegato un esempio

Sorry, ma ho Access2000 e WinXP.
Provo a guardare l'esempio a casa sotto Access2003 e mi faccio risentire.

Buona giornata
Bi-Ennio

alpanix Profilo | Junior Member

>Sorry, ma ho Access2000 e WinXP.

se vuoi posso mandarti l'esempio in formato 2000
AlPanix

alpanix Profilo | Junior Member

se la soluzione proposta ti aggrada, accetta la risposta, così chiudiamo la discussione

AlPanix

biennio Profilo | Newbie

>se la soluzione proposta ti aggrada, accetta la risposta, così
>chiudiamo la discussione
>
>AlPanix

Scusate ma sono stato lontano da Internet.
Vi ringrazio per gli interventi, sono piu' che soddisfatto.

Bi-Ennio
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5