none
Campo Autoincrementable en Mysql con vb.net 2010 RRS feed

  • Pregunta

  • Hola.

    Tengo una duda con un campo que tengo en mi BD les explico, este campo no es primary key y tiene la funcion de enumerar la totalidad de registros que se llevan, lo habia colocado como autoincrementable pero asi no me funciona ya que si elimino un registro el numero que poseia este lo salta al ingresar un nuevo registro.. Ahora una de las cosas que hace mas dificil llevar este control del total de registros es que los ingreso de 2 maneras:

    1- A diario importo registros por lotes desde excel  traves de un datagrid a la BD

    2- Puedo insertar los registros tambien de forma individual a traves de un formulario con los diferentes textbox

    Ahora mi pregunta es la siguiente como puedo llevar un control del total de los registros que ingreso en la BD?

    Existe alguna forma de que pueda generar un contador desde un nuevo formulario que al insertar los registros este automaticamente vaya enumerandolos y si elimino el registro 15 en un momento el registro 16 tome ese valor y asi poder llevar un control sobre el total de los registros?

    Muchas Gracias

    viernes, 7 de diciembre de 2012 14:28

Todas las respuestas

  • Ahora mi pregunta es la siguiente como puedo llevar un control del total de los registros que ingreso en la BD?

    puedes usar el

    SELECT Max(Id) As MaxId FROM Tabla

    para tener el ultimo id creado

    y

    SELECT COUNT(*) As Cant FROM Tabla

    para sber la cantidad de registros

    Existe alguna forma de que pueda generar un contador desde un nuevo formulario que al insertar los registros este automaticamente vaya enumerandolos y si elimino el registro 15 en un momento el registro 16 tome ese valor

    la verdad no recomendaria ir usando los huecos de los registros si se elimina registros deja lo y sigue con el proximo

    el control del total lo controlas por otro lado con el count() y no con el id

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 7 de diciembre de 2012 14:39
  • Muchas Gracias Leandro por la respuesta...

    Ahora mi consulta es la siguiente. El campo que lleva el control del total de registros no es un ID como tal, es decir, el campo solo tiene la funcion de llevar la enumeracion total de los registros, xq en algunos casos tengo que imprimir algunos reportes en pdf y necesito mostrar en ese pdf el total de registros almacenados.

    viernes, 7 de diciembre de 2012 15:02
  • Hola,

    Yo noto dos puntos:

    1.No estas entendiendo el concepto de los autonumericos. El uso que pretendes darle al autonumerico no es para el cual fue pensado.

    Lo que te garantiza el motor de la base de datos es que la asignacion del autonumerico nunca va a fallar, siempre y cuando no violes la numeracion actual. Lo que no te va a garantizar nunca el motor es que no existan huecos.

    Mi consejo es que leas la documentacion de la base de datos para entender el funcionamiento de este tipo de campo. 

    2.Para que guardar informacion duplicada en la base de datos. Al guardar informacion duplicada significa mantenerla a ambas actualizada y sincronizada, es decir doble trabajo con la probabilidad que se desincronicen. 

    La solucion a tu problema pasa por la respuesta que te dio Leandro, consultarle a la base de datos la cantidad de registros usando la sentencia SELECT COUNT(*) As Cant FROM Tabla.

    Victor Koch

    viernes, 7 de diciembre de 2012 15:16
  • Hola Victor

    Yo entiendo lo que uds me comentan sobre el campo autonumerico y por eso no lo quiero colocar asi... Ahora con respecto al query SELECT COUNT(*) As Cant FROM Tabla no me sirve ya que el solo me da el total de registros, no me enumera cada uno de los registros... ya que necesito que los registros esten enumerados desde el primer registro hasta el ultimo registro al momento de hacer el reporte en PDF...

    viernes, 7 de diciembre de 2012 15:41
  • el campo solo tiene la funcion de llevar la enumeracion total de los registros

    el objetivo de un id es hacer posible la identificacion de form inequivoca de una entidad

    no es la de enumerar ningun total

    en algunos casos tengo que imprimir algunos reportes en pdf y necesito mostrar en ese pdf el total de registros almacenados.

    para eso existe el

    SELECT Count(*) ...

    que comente en la primer respuesta


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 7 de diciembre de 2012 16:06
  • Bueno no pude resolver mi duda pero de todas maneras muchas gracias y esten siempre atentos ya que les tendra muchas dudas mas ;D

    Saludos.

    viernes, 7 de diciembre de 2012 20:33
  • Bueno no pude resolver mi duda

    Pero las respuestas te las han proporcionado al menos las que deberias de considerar sobre el planteamiento de tu caso.

    Lo que si deberias de analizar con mas detenimiento es esto que plateas, por que para que quieres bytes de mas en la BD si lo unico que hara sera llevar el "NUMERO DE FILA", si lo que quieres es que en tus reportes aparescan esa filas enumeradas y en Orden, entonces todo dependera de como vayas a llenar ese reporte, pero facilmente puedes hacer un Buble For Each para que por cada Registro devuelto te genere el numero de fila, pero esto lo harias afuera de la BD no dentro de la tabla. De esta manera si eliminar agregas, actualizas, tu enumeracion la tendras siempre que llenes tu reporte ya que se generaria por cada linea que recuperes.

    Suerte!


    Saludos desde Monterrey, Nuevo León, México!!!


    sábado, 8 de diciembre de 2012 0:33
  • Muchas gracias por tu ayuda Luis

    Pero en si como se haria eso desde vb.net?... El problema es que yo no soy el que quiere que los registros esten enumerados, eso es un requisito que me estan pidiendo para el sistema como tal...

    lunes, 10 de diciembre de 2012 15:55
  • Hola:
    En un Form con 1 DataGridView, copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form1
        Private msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Pubs;Integrated Security=True"

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim loDataTable As New DataTable()
            Dim lsQuery As String = "Select Count(*) As SECUENCIA, A.AU_LNAME, A.AU_FNAME From AUTHORS A JOIN AUTHORS B On ( A.AU_LNAME >= B.AU_LNAME ) Group By A.AU_LNAME, A.AU_FNAME"
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear adaptadores
                    Dim loDataAdapter As New SqlDataAdapter(lsQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                End Using
                Me.DataGridView1.DataSource = loDataTable
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    End Class

    P.D.
    Como veras con este ejemplo se crea una columna llamada SECUENCIA que esta numerada desde el 1 hasta el n.
    Este Datatable es el que tendras que usar para generar el reporte en PDF

    Un saludo desde Bilbo
    Carlos

    martes, 11 de diciembre de 2012 9:08