Objectiu:
Donada una taula en Access, actualitzar un camp amb VBA. El que vull és que el camp PROVINCIA afegeixi al principi el dos dígits INE del codi provincial, es a dir:
Fins ara ho feia amb n consultes (en aquest cas 5 consultes) a les que accedia des de una macro. Era efectiu però una mica pessat montar les consultes i tenir-les donant voltes per la base. Total que ho volia fer des d'un formulari amb VBA.
Li he estat donant voltes i voltes, consultant manuals, veient videos,... no podia ser tan difícil. Semblava que calia establir una connexió, etc. Al final, gràcies a aquest video
http://www.youtube.com/watch?v=WZFBHQWZpQo
he trobat el sistema.
Fem la primera consulta d'actualització, per exemple la de Barcelona i ens guardem el codi SQL
(aquesta consulta l'eliminarem tan bon punt ens guardem el codi)
UPDATE Listado SET Listado.PROVINCIA = "08 " & [Listado]![PROVINCIA]WHERE (((Listado.PROVINCIA)="Barcelona"));
En el meu cas:
la taula es diu Listado
el camp on volem fer els canvis es diu PROVINCIA
el codi INE que volem afegir és 08
Creem un formulari i un botó. Farem les coses dignament. Al formulari li diem frmActualitzador i al botó cmdActProv
Al polsar generar evento escollim generador de código i entrem en VBA.
Al botó -fent bé les coses- li hem dit cmdActProv. Dins el seu evento clik declarem una variable tipus string i li anem a assignar la sentència SQL. De moment sols escrivim:
Prov = "
Al afegir-li el SQL quedarà fet un desastre per culpa de les cometes. Les arreglem:
Tal com queda al afegir el SQL:
Prov = "UPDATE Listado SET Listado.PROVINCIA = "08 " & [Listado]![PROVINCIA] WHERE (((Listado.PROVINCIA)="Barcelona"));
Ho arreglem així (atenció a les dobles cometes i a les cometes del final)
Prov = "UPDATE Listado SET Listado.PROVINCIA = ""08 "" & [Listado]![PROVINCIA] WHERE (((Listado.PROVINCIA)=""Barcelona""));"
Ara, simplement afegim
DoCmd.RunSQL Prov
Al executar el codi, sols ens canviarà Barcelona i, a banda, ens apareixerà un missatge d'advertència. Simplement afegirem una línia per evitar aquest missatge (DoCmd.SetWarnings False ) i afegirem les altres 4 línies necessaries. Per no liar-nos, canviarem Prov per Prov08, Prov37, etc.
Finalment ens quedarà:
Option Compare Database
Option Explicit
Private Sub cmdActProv_Click()
DoCmd.SetWarnings False
'08 Barcelona,27 Lugo,28 Madrid, 37 Salamanca, 48 Bizkaia
Dim Prov08$, Prov27$, Prov28$, Prov37$, Prov48$
Prov08 = "UPDATE Listado SET Listado.PROVINCIA = ""08 "" & [Listado]![PROVINCIA] WHERE (((Listado.PROVINCIA)=""Barcelona""));"
Prov27 = "UPDATE Listado SET Listado.PROVINCIA = ""27 "" & [Listado]![PROVINCIA] WHERE (((Listado.PROVINCIA)=""Lugo""));"
Prov28 = "UPDATE Listado SET Listado.PROVINCIA = ""28 "" & [Listado]![PROVINCIA] WHERE (((Listado.PROVINCIA)=""Madrid""));"
Prov37 = "UPDATE Listado SET Listado.PROVINCIA = ""37 "" & [Listado]![PROVINCIA] WHERE (((Listado.PROVINCIA)=""Salamanca""));"
Prov48 = "UPDATE Listado SET Listado.PROVINCIA = ""48 "" & [Listado]![PROVINCIA] WHERE (((Listado.PROVINCIA)=""Bizkaia""));"
DoCmd.RunSQL Prov08
DoCmd.RunSQL Prov27
DoCmd.RunSQL Prov28
DoCmd.RunSQL Prov37
DoCmd.RunSQL Prov48
End Sub
Cap comentari:
Publica un comentari a l'entrada