3.8 Objectes especials: propietats i mètodes
Visual Basic és un llenguatge de programació orientat a objectes. Els objectes són un conjunt de dades i de procediments (en POO els procediments d'un objecte s'anomenen mètodes). La manera d'especificar un camp de l'objecte o un mètode és similar: nom_objecte.nom_camp_o_procediment.
Dels objectes ja definits en VBA anem a veure 2 que utilitzarem especialment.
Nota Important
Aquestos objectes pertanyen a la col·lecció d'objectes DAO (Data Access Objects). Depenent de la configuració particular de l'Access, podria ser que aquestos objectes no estigueren disponibles en primera instància. Per a que estiguen disponibles hauríem d'anar dis de l'editor de Visual Basic a Herramientas → Referencias i activar Microsoft DAO 3.6 Object Library o una similar.
DataBase
És un objecte que fa referència a una Base de Dades.
Operacions:
- Set variable_BD = CurrentDB per a que apunte a l'actual Base de Dades
- Set variable_BD = nothing per a que no apunte a res
Nota
Es pot fer que apunte a altres Bases de Dades que no siguen l'actual, però resulta més complicat d'estructurar. Per als objectius d'aquest curs tenim prou amb la Base de Dades actual (CurrentDB)
- OpenRecordSet(origen, mode)
L'origen pot ser una taula, una consulta o una sentència SQL.
El mode indica el mode d'obertura, només lectura, lectura-escriptura, ...
RecordSet
És un objecte que fa referència a un conjunt de registres
Operacions:
- Set variable_RS = variable_BD.OpenRecordSet(origen, mode)
- Close: per a tancar el RecordSet.
- Mètodes Move, per a desplaçar entre els registres: MoveFirst, MoveLast, MoveNext, MovePrevious.
- Mètodes Find, per a localitzar registres: FindFirst, FindNext, FindPrevious, ...
- Delete, per a esborrar el registre actual.
- Modificació, on s'hauria de preparar primer, fer la modificació al camp, i actualitzar
Nom_RS.Edit
Nom_rs!nom_camp=valor
Nom_RS.Update
- Inserció de registres, on també s'has de preparar primer, posar els valors als camps i per últim actualitzar:
Nom_RS.AddNew
Nom_rs!nom_camp_1=valor_1
...
Nom_rs!nom_camp_n=valor_n
Nom_RS.Update
- RecordCount: compta el nombre de registres del RecordSet (és convenient fer primer un MoveLast, per a recòrrer prèviament tot el RecorSet).
- BOF, EOF: propietats que indiquen respectivament principi i final de fitxer.
Exercici 3.15
Treure el nom de tots els empleats en una única finestra. Servirà per veure com recòrrer un recordset des del principi fins el final. Anirem acumulant els noms dels empleats en una variable (amb el caràcter de baixar de línia), per a mostrar al final aquesta variable.
Sub Noms_Empleats()
Dim bd As Database
Dim rs As Recordset
Dim s As String
Set bd = CurrentDb
Set rs = bd.OpenRecordset("Empleat")
rs.MoveFirst
s = ""
While Not rs.EOF
s = s & rs!Nom & Chr(10)
rs.MoveNext
Wend
MsgBox (s)
End Sub
Exercici 3.16 (voluntari)
Col·locar un botó en Menú Principal anomenat Pujada selectiva, que demane una quantitat (serà el que es pujarà als empleats) i després que vaja preguntant si es puja el sou a cadascun dels empleats. Només en el cas de contestar afirmativament s'ha de pujar (en cas contrari es deixa igual). La funció ha d'estar en el mòdul estàndard Funcions, i s'ha d'anomenar Pujada_selectiva.
Exercici 3.17
Posar un botó en el formulari Treballa anomenat Nou Projecte, de manera que aniríem al formulari Projecte per a introduir-ne un nou. És convenient obrir-lo en Mode diàleg (acDialog).
Quan tornem de la introducció del projecte s'haurà d'actualitzar la llista de projectes del quadre combinat Num_p (però observeu el nom que teniu en el vostre formulari Treballa). Es fa per mig d'un mètode del quadre combinat anomenat Requery, que torna a executar la consulta interna que omple la llista.
També estaria bé que aquest quadre combinat estiguera seleccionat i que es desplegara automàticament la llista adjunta (mètodes SetFocus i DropDown respectivament).
Exercici 3.18 (voluntari)
Fer acomplir la restricció externa que diu:
RexR1: El cap d'un departament ha de ser membre d'aquest
Per no complicar-nos la vida, ho farem en el formulari Departament, i en el quadre combinat on se selecciona el director, només traure els membres del departament (per tant, només heu de canviar la consulta associada al quadre combinat).
Tindrem una complicació, i és que quan s'executa la consulta que dóna els noms dels empleats del departament, se selaccionaran els del primer departament. Quan anem al següent registre, continuarem amb la mateixa llista. Solució: cada vegada que canviem de registre ("Al activar registro") obligar a fer una altra vegada la consulta. Com hem vist en l'exercici anterior, això és un mètode del mateix quadre combinat: Director.Requery (si és que Director és el nom del quadre combinat).
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial SenseObraDerivada 2.5