none
Introducir DNi RRS feed

  • Pregunta

  • Hola, tengo una agenda de contactos, conectada a una base de datos acess.

    El dni se introducen en campos distintos los numeros y las letas.

    ¿Como puedo hacer para que luego formen un unico campo en la base de datos?¿Algo asi?

        Conexion.Open()
    
                'Asiganamos la cadena sql para la eliminacion del registro
    
                query = "INSERT INTO Contactos(Nombre,Apellidos,DNI,Telefono,Movil,Direccion,CP,Ciudad,[Correo Electronico],Notas,Cita) " & _
        "VALUES(@Nombre,@Apellidos,@DNI,@Telefono,@Movil,@Direccion,@CP,@Ciudad,@Correo,@Notas,@Cita)"
    
                'Asignamos los parametros
    
                Dim CMD As New OleDb.OleDbCommand(query, CType(Conexion, OleDb.OleDbConnection))
    
                CMD.Parameters.AddWithValue("@nombre", TextNombre.Text)
                CMD.Parameters.AddWithValue("@Apellidos", TextApellido.Text)
                CMD.Parameters.AddWithValue("@DNI", TextDni.Text '%" TextLetra)
                CMD.Parameters.AddWithValue("@Telefono", (TextTelefono.Text))
                CMD.Parameters.AddWithValue("@Movil", (TextMovil.Text))
                CMD.Parameters.AddWithValue("@Direccion", TextDireccion.Text)
                CMD.Parameters.AddWithValue("@CP", (TextCP.Text))
                CMD.Parameters.AddWithValue("@Ciudad", TextCiudad.Text)
                CMD.Parameters.AddWithValue("@Correo", TextCorreo.Text)
                CMD.Parameters.AddWithValue("@Notas", TextNotas.Text)
                CMD.Parameters.AddWithValue("@Cita", Convert.ToDateTime(DateTimePicker.Text))
    
                CMD.ExecuteNonQuery()
                Conexion.Close()
                MsgBox(" Registro agregado")

    Gracias

    sábado, 31 de agosto de 2013 18:23

Respuestas

  • Leandro, el DNI o también conocido como NIF en España tiene números y una letra al final, por ejemplo el.mio es 50204877V. Lo que pasa es que esa letra es una letra de control que dado el numero, a traves de una formula, te devuelve una letra.

    la formula para validar la letra en vb sería

    Private Function CalculaNIF(ByVal strA As String) As String
        '----------------------------------------------------------------------
        ' Calcular la letra del NIF
        ' Código original adaptado a Visual Basic                   (13/Sep/95)
        ' Adaptado a Visual Basic .NET (VB 9.0/2008)                (09/May/08)
        ' y convertido en función que devuelve el NIF correcto
        '----------------------------------------------------------------------
        Const cCADENA As String = "TRWAGMYFPDXBNJZSQVHLCKE"
        Const cNUMEROS As String = "0123456789"
        Dim a, b, c, NIF As Integer
        Dim sb As New StringBuilder
    
        strA = Trim(strA)
        If Len(strA) = 0 Then Return ""
    
        ' Dejar sólo los números
        For i As Integer = 0 To strA.Length - 1
            If cNUMEROS.IndexOf(strA(i)) > -1 Then
                sb.Append(strA(i))
            End If
        Next
    
        strA = sb.ToString
        a = 0
        NIF = CInt(Val(strA))
        Do
            b = CInt(Int(NIF / 24))
            c = NIF - (24 * b)
            a = a + c
            NIF = b
        Loop While b <> 0
        b = CInt(Int(a / 23))
        c = a - (23 * b)
    
        Return strA & Mid(cCADENA, CInt(c + 1), 1)
    End Function
     

    Esta función la he cogido de la página de elguille.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    sábado, 31 de agosto de 2013 22:01
  • Para responder la pregunta, el campo DNI en la base de datos debe ser de tipo cadena para ello, simplemente harias

    CMD.Parameters.AddWithValue("@DNI", TextDni.Text  & TextLetra.Text)


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    sábado, 31 de agosto de 2013 22:04

Todas las respuestas

  • hola

    desde cuando un DNI tiene numerios y letras, el dni solo tiene numeros, o apuntas al tipo de documento y su numero?

    ademas en tu db deberias grabarlo en capos separados, no es correcto poner datos compuestos en un solo campo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    sábado, 31 de agosto de 2013 20:48
  • Leandro, el DNI o también conocido como NIF en España tiene números y una letra al final, por ejemplo el.mio es 50204877V. Lo que pasa es que esa letra es una letra de control que dado el numero, a traves de una formula, te devuelve una letra.

    la formula para validar la letra en vb sería

    Private Function CalculaNIF(ByVal strA As String) As String
        '----------------------------------------------------------------------
        ' Calcular la letra del NIF
        ' Código original adaptado a Visual Basic                   (13/Sep/95)
        ' Adaptado a Visual Basic .NET (VB 9.0/2008)                (09/May/08)
        ' y convertido en función que devuelve el NIF correcto
        '----------------------------------------------------------------------
        Const cCADENA As String = "TRWAGMYFPDXBNJZSQVHLCKE"
        Const cNUMEROS As String = "0123456789"
        Dim a, b, c, NIF As Integer
        Dim sb As New StringBuilder
    
        strA = Trim(strA)
        If Len(strA) = 0 Then Return ""
    
        ' Dejar sólo los números
        For i As Integer = 0 To strA.Length - 1
            If cNUMEROS.IndexOf(strA(i)) > -1 Then
                sb.Append(strA(i))
            End If
        Next
    
        strA = sb.ToString
        a = 0
        NIF = CInt(Val(strA))
        Do
            b = CInt(Int(NIF / 24))
            c = NIF - (24 * b)
            a = a + c
            NIF = b
        Loop While b <> 0
        b = CInt(Int(a / 23))
        c = a - (23 * b)
    
        Return strA & Mid(cCADENA, CInt(c + 1), 1)
    End Function
     

    Esta función la he cogido de la página de elguille.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    sábado, 31 de agosto de 2013 22:01
  • Para responder la pregunta, el campo DNI en la base de datos debe ser de tipo cadena para ello, simplemente harias

    CMD.Parameters.AddWithValue("@DNI", TextDni.Text  & TextLetra.Text)


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    sábado, 31 de agosto de 2013 22:04