dissabte, 5 de maig del 2012

Accedir a registres access amb VBA

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