Totalizadores y Contadores en una tabla de mi BD

Algunos de vosotros estáis preguntando como es posible totalizar ciertos valores ya sea de estadística o control en una de las tablas de nuestra aplicación.


Aquí os propongo una de las formas de implementarlo :
(Aunque no olvideis que existen otras formas de realizarlo, eso si quizas no tan accesibles :-))


En el lado de SQL podéis ejecutar este ‘script’ para generar la tabla…


CREATE TABLE [dbo].[Contadores](


      [Peras] [int] NOT NULL DEFAULT ((0)),


      [Naranjas] [int] NOT NULL DEFAULT ((0)),


      [Manzanas] [int] NOT NULL DEFAULT ((0))


) ON [PRIMARY]


Ahora solo tendréis que realizar el correspondiente ‘Update’ desde vuestra aplicación incrementando la columna que deseáis contabilizar. Esta pregunta es frecuente cuando se realizan aplicaciones tipo albaranes/facturas u otro tipo, en la que se requiere seguir o registrar una numeración aunque en ese caso no debéis olvidar bloquear el registro y más a lo sumo en aplicaciones que varios usuarios estén utilizando esa numeración.


    Private cn As New SqlClient.SqlConnection( _


          “Data Source=MiSrv\SQLEXPRESS;” + _


          “Initial Catalog=MiBd;” + _


          “Integrated Security=True”)


    Private da As New SqlClient.SqlDataAdapter( _


          “Select * from Contadores”, cn)


 


    Private Sub Button1_Click() Handles Button1.Click


        ‘En este caso simulamos incrementar el contador de Manzanas


        da.UpdateCommand = New SqlClient.SqlCommand( _


          “Update Contadores SET Manzanas = Manzanas + 1″, cn)


        cn.Open()


        da.UpdateCommand.ExecuteNonQuery()


        cn.Close()


    End Sub


 


Espero que os sea útil,
Buen fin de semana.
Pep Lluis,

3 thoughts on “Totalizadores y Contadores en una tabla de mi BD”

  1. ¿Podrías ser más concreto en lo referente a “…no debéis olvidar bloquear el registro y más a lo sumo en aplicaciones que varios usuarios estén utilizando esa numeración…”?.Es decir, ¿como efectuamos dicho bloqueo? Me interesa bastante, pues me hallo en un escenario multiusuario.

    Gracias

    Lluis Pérez.

  2. ¿Qué has querido decir con eso de “…no debéis olvidar bloquear el registro y más a lo sumo en aplicaciones que varios usuarios estén utilizando esa numeración.”? Podrías aclarar como se debería hacer en dicho caso, pues ese es el escenario en el que debo desarrollar.

    Un saludo

    Lluis

  3. Hola Luis Perez,
    El comentario viene a rueda de cuando realizamos lecturas en modo compartido usando el valor de los contadores para generar una nueva entrada o valor unico, en esa situacion debemos evitar la simultanedad… puesto que si dos procesos intentan obtener el proximo numero de albaran o factura (por ejemplo) ambos procesos obtendran la misma numeracion y por su puesto seran incorrectos.

    Una forma podria ser Bloqueando antes del update…
    Select Manzanas From Contadores FOR UPDATE
    UPDATE Contadores SET Manzanas = Manzanas + 1

    Espero que esto conteste tu pregunta.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>