Sie sind auf Seite 1von 4

GESTIN ALMACN-ADENDA1

INTRODUCCIN
La idea de la aplicacin <gestin almacn> es realizar el
clculo del stock a travs de una consulta. Ese dato (el
stock) no se guarda en tablas porque se supone que es una
informacin altamente variable.
Otro de los motivos de no guardarlo en tablas es porque, si
los guardsemos en una tabla, necesitaramos recurrir a
algn tipo de actualizacin cada vez que quisiramos
consultar los datos.
Lo anterior nos obligara a estar pendientes de saber si se ha realizado dicha actualizacin o
no para constatar que tenemos los stocks al da en la tabla, cosa que no ocurre cuando
funcionamos por consultas (la consulta empieza vaca y se llena con los datos que haya en
ese preciso momento), lo que implica que podemos estar seguros de que la consulta nos
devuelve siempre los datos actualizados.
Y ni que decir tiene que realizar actualizaciones constantes consume recursos, lo que implica
un decremento del rendimiento de nuestra aplicacin.
Sin embargo, y pese lo anterior, se me ha solicitado que desarrollara un ejemplo de cmo se
podran almacenar los datos de inventario en la tabla. Y de ah que haya aparecido esta
adenda.
Ni que decir tiene que es necesario haber desarrollado el ejemplo principal antes de seguir
este ejemplo, pues todo lo que se explicar se basa en los elementos y metodologa que se
especific en dicho ejemplo.
En definitiva, que si no habis seguido antes el ejemplo lo podis encontrar aqu.
Dicho lo anterior... manos a la obra.

MODIFICANDO NUESTRA TABLA


Vamos a situar la tabla TProductos en vista diseo y vamos a aadirle un campo, que ser el
que recoger las existencias. Nos debera quedar una cosa as:

CREANDO NUESTRO MDULO PERSONALIZADO


Vamos a crearnos un mdulo que realizar la funcin de actualizacin de datos. Para ello
1

La BD de ejemplo os la podis bajar aqu.

Vistame en http://siliconproject.com.ar/neckkito/

haremos lo siguiente:
1.- Abriremos el editor de VB (ALT+F11 o men Herramientas de base de datos Botn de
Visual Basic).
2.- En el men del VBE nos vamos a Insertar Mdulo
3.- Guardamos
mdlActualizaExist

ese

mdulo

con

el

nombre

de

Aunque os voy a poner el cdigo ampliamente comentado os


explico, en abstracto, lo que vamos a hacer:

Recorrer uno a uno los registros de la tabla TProductos, capturando el cdigo del
producto (a travs del campo [Id]).

Buscar, a travs de DLookup, sobre la consulta CStock, filtrando por el producto que
estamos examinando en cada momento, para saber su nivel de existencias.

Una vez obtenido el nivel de existencias, actualizar dicha informacin en TProductos.


El cdigo sera2:

Public Sub actStock()


On Error GoTo sol_err
'Declaramos las variables
Dim miSql As String
Dim idProd As Long
Dim vStock As Long
Dim rst As DAO.Recordset
'Definimos el recorset sobre la tabla TProductos
Set rst = CurrentDb.OpenRecordset("TProductos", dbOpenTable)
'Nos situamos en el primer registro
rst.MoveFirst
'Comenzamos el proceso
Do Until rst.EOF
'Capturamos el cdigo del producto
idProd = rst.Fields("Id").Value
'Buscamos las existencias de ese producto en CStock
vStock = DLookup("[Stock]", "CStock", "[Id]=" & idProd)
'Pasamos el valor a la tabla TProductos
With rst
.Edit
.Fields("Existencias").Value = vStock
.Update
End With
'Nos movemos al siguiente registro
rst.MoveNext
Loop
'Cerramos conexiones y liberamos memoria
rst.Close
Set rst = Nothing
Salida:
Exit Sub
sol_err:
MsgBox "Se ha producido el error " & Err.Number & " - " & Err.Description
2

Si utilizamos Access 2003 debemos comprobar que tenemos registrada la librera Microsoft DAO 3.6 Object Libray (en el VBE
men Herramientas Referencias...)

Vistame en http://siliconproject.com.ar/neckkito/

Resume Salida
End Sub

Ya tenemos la informacin actualizada en TProductos. Ahora


slo nos queda llamar al procedimiento cuando lo
necesitemos.
Por ejemplo, podramos hacerlo de estas dos maneras,
segn la operativa que necesitemos. La primera realiza el
proceso porque nosotros somos conscientes de que lo
realiza, con lo que, al acabar, nos lanza un aviso; la
segunda realiza un proceso oculto, con lo que el usuario no
se da cuenta del proceso:
A) Actualizacin consciente:
Creamos un botn de comando y, simplemente, al evento Al hacer click le asignamos el
siguiente cdigo:

Private Sub cmdActualizaStock_Click()


Call actStock
MsgBox "Actualizacin realizada correctamente", vbInformation, "OK"
End Sub

B) Actualizacin oculta:
Vamos a suponer que tenemos, en FMenu, un botn de comando que abre el formulario
FProductos para consultar/modificar los productos (en el ejemplo yo he creado un nuevo
formulario que he llamado FProductos2, con lo cual veris que el cdigo, lo que abre es,
precisamente, FProductos2).
Simplemente el cdigo de ese botn sera el siguiente:

Private Sub cmdAbreFProductos2_Click()


'Actualizamos la tabla antes de abrir el formulario
Call actStock
'Abrimos el formulario
DoCmd.OpenForm "FProductos2", , , , acFormEdit
End Sub

Como vemos, lo importante es la lnea de cdigo


Call actStock
que nos llama a la ejecucin del cdigo de nuestro mdulo.
Lo anterior se podra haber hecho tambin, por ejemplo, asignando al evento Al cargar del
formulario FProductos2 el cdigo (lgicamente el cdigo del botn que abre FProductos2 ya no
debera llevar la llamada al procedimiento):
Es decir:

Vistame en http://siliconproject.com.ar/neckkito/


Private Sub Form_Load()
Call actStock
End Sub

En definitiva, que cada vez que necesitemos la


actualizacin, sea en el objeto de Access, sea en el control
que utilicemos, debemos realizar la llamada a actStock.
Y eso es todo.
Un saludo, y...
Suerte!

Vistame en http://siliconproject.com.ar/neckkito/

Das könnte Ihnen auch gefallen