Aggiornare campo tabella database

martedì 10 febbraio 2009 - 16.41

rematto Profilo | Newbie

Un saluto a tutti
il mio quesito è il seguente, volendo gestire l'IDCliente con dati ricavati dal cognome e nome, ho creato il codice in VBA che funziona correttamente, ma solo per tutti i nuovi inserimenti di clienti. Come faccio ad aggiornare i record già inseriti?
Grazie a chi vorrà o potrà aiutarmi.

lbenaglia Profilo | Guru

>il mio quesito è il seguente, volendo gestire l'IDCliente con
>dati ricavati dal cognome e nome, ho creato il codice in VBA
>che funziona correttamente, ma solo per tutti i nuovi inserimenti
>di clienti. Come faccio ad aggiornare i record già inseriti?

Ciao Pietro,

Che DBMS utilizzi?
Cosa intendi con "gestire l'IDCliente con dati ricavati dal cognome e nome"?
Cosa fa il codice VBA?
Qual è il risultato che vuoi ottenere?

>Grazie a chi vorrà o potrà aiutarmi.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

rematto Profilo | Newbie

ti ringrazio per la risposta, scusa l'imprecisione ma sono un nuovo utente del forum ..... uso access 2003, vorrei ottenere l'ID cliente da una estrapolazione parziale dal nome e cognome del cliente, non ti nascondo che ho importato il codice da northwind (applicativo allegato ad access) e siccome mi sembrava ottimo che il codice cliente fose costruito dall'insieme di 2 campi, l'ho adottato come sistema. solo che ora non so come aggiornare 650 record che ho già nella tabella clienti, difatti il codice non aggiorna i record già inseriti, ma solo i nuovi record. ecco il codice come l'ho importato:

'Crea variabili per contenere il nome, il cognome
' e l'ID cliente.
Dim fName As String
Dim lName As String
Dim cID As String

'Assegna il testo della casella di testo cognome
' alla variabile lName.
lName = Forms!Clienti!Cognome.Text

'Occorre impostare il focus o stato attivo a una casella di testo
' per poter leggere il suo contenuto.
Forms!Clienti!Nome.SetFocus
fName = Forms!Clienti!Nome.Text

'Combina porzioni del nome e del cognome
' per creare l'ID cliente.
cID = UCase(Left(lName, 3) & Left(fName, 2))

'Non memorizzare l'ID se non è di 5 caratteri (questo
' indicherebbe che non sono stati immessi entrambi i nomi).
If Len(cID) = 5 Then
Forms!Clienti!IDCliente.SetFocus

'Non cambiare l'ID se è già stato immesso
' ...potrebbe essere stato cambiato manualmente.
If Forms!Clienti!IDCliente.Text = "" Then
Forms!Clienti!IDCliente = cID
End If
End If

'Imposta il focus dove sarebbe normalmente
Forms!Clienti!Indirizzo.SetFocus
Grazie di nuovo

softdream Profilo | Newbie

Se ho capito bene vuoi aggiornare tutti i tuoi record.. Esatto ???

Bè non è difficile..
Creati questo codicino e fallo partire...

Dim s as string, T1 as recordset

S = "Select * From [Nome tabella Clienti]"
Set t1 = CurrentDb.openRecorset(S)
While Not T1.EOF
T1.edit
T1![campo codice] = UCase(Left(t1![nome Cliente], 3) & Left(t1![cognome Cliente], 2))
T1.update
T1.movenext
wend
T1.close

non fà altro che passare tutti i codici dei clienti e modificarli.

lbenaglia Profilo | Guru

>ti ringrazio per la risposta, scusa l'imprecisione ma sono un
>nuovo utente del forum ..... uso access 2003, vorrei ottenere
>l'ID cliente da una estrapolazione parziale dal nome e cognome
>del cliente

Osservando il codice VBA che hai postato mi sembra di capire che vuoi costruire un IDCliente di 5 caratteri prendendo i primi 3 del nome e i primi 2 del cognome.
OK, puoi aggiornare tutte le righe già presenti in tabella utilizzando un comando di UPDATE simile a:

UPDATE Clienti SET IDCLiente = UCASE(LEFT(Nome, 3) + LEFT(Cognome, 2)) WHERE LEN(LEFT(Nome, 3) + LEFT(Cognome, 2)) = 5 AND IDCliente IS NULL;

Modifica opportunamente il nome della tabella e delle colonne in base al tuo database.
Come vedi andrò ad aggiornare solo le righe che soddisfano la condizione LEN(LEFT(Nome, 3) + LEFT(Cognome, 2)) = 5 con IDCliente non valorizzato (NULL).

> Grazie di nuovo
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lbenaglia Profilo | Guru

>Bè non è difficile..
>Creati questo codicino e fallo partire...
Quel codice aggiorna TUTTE le righe della tabella spazzolandole dalla prima all'ultima, infischiandosene di quelle con IDCliente già valorizzato e della regola di business che prevede una lunghezza di esattamente 5 caratteri.
Non voglio affrontare il tema complessità/prestazioni perché sono buono

>non fà altro che passare tutti i codici dei clienti e modificarli.
Vero

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

softdream Profilo | Newbie

Con qualche accorgimento si sistemava...
Mi sembrava di capire che voleva fare solo quello, infischiandosene di tutto...

rematto Profilo | Newbie

..... ora è tutto ok.
grazie di nuovo e buon lavoro.
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5