Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Access - Campo maiuscolo/minuscolo
martedì 04 dicembre 2007 - 10.00
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
biennio
Profilo
| Newbie
7
messaggi | Data Invio:
mar 4 dic 2007 - 10:00
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
164
messaggi | Data Invio:
mar 4 dic 2007 - 10:23
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
7
messaggi | Data Invio:
mar 4 dic 2007 - 10:42
>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
164
messaggi | Data Invio:
mar 4 dic 2007 - 11:19
>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
7
messaggi | Data Invio:
mar 4 dic 2007 - 12:25
>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
164
messaggi | Data Invio:
mar 4 dic 2007 - 12:28
488_esempio.zip
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
164
messaggi | Data Invio:
mar 4 dic 2007 - 12:30
>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
7
messaggi | Data Invio:
mar 4 dic 2007 - 12:52
>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
164
messaggi | Data Invio:
mar 4 dic 2007 - 13:37
>Sorry, ma ho Access2000 e WinXP.
se vuoi posso mandarti l'esempio in formato 2000
AlPanix
alpanix
Profilo
| Junior Member
164
messaggi | Data Invio:
gio 6 dic 2007 - 10:59
se la soluzione proposta ti aggrada, accetta la risposta, così chiudiamo la discussione
AlPanix
biennio
Profilo
| Newbie
7
messaggi | Data Invio:
gio 6 dic 2007 - 12:05
>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
Torna su
Stanze Forum
Elenco Threads
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 !