Visual Basic.NET - ¿Cómo generar un ID personalizado en Visual Studio (visual Basic ) y SQL Server?

 
Vista:
Imágen de perfil de Richard

¿Cómo generar un ID personalizado en Visual Studio (visual Basic ) y SQL Server?

Publicado por Richard (2 intervenciones) el 23/11/2021 05:28:02
¿Cómo sería una función que me genere un ID personalizado?

Ejemplo: En una tabla que se llame Servicios, con los campos ;

Id_Servicio Dsc_Servicio

S-00001 Oftalmología

S-00002 Cirugía

Que cada vez que requiera almacenar un servicio nuevo, me genere un ID_Servicio nuevo.

Así mismo que si se eliminan registros intermedios en la tabla, no se genere un ID duplicado.

La siguiente función efectúa la generación del ID, pero me genera también ID's duplicados: ¿Cómo puedo evitar que genere los ID's duplicados cuando se eliminan ID's intermedios en la tabla?


Generacion-Codigo-automatico
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
'Función genera código automático para la tabla SERVICIOS
 
    Function GenerarCodigoServicios()
        Dim strCodigo As String = ""
        Dim intTotal As Integer = 1
 
        Try
 
            Cmd = New SqlCommand("SELECT COUNT(*) AS TotalRegistros FROM SERVICIOS", Conn)
            dr = Cmd.ExecuteReader
            If dr.Read Then
                intTotal = CInt(dr.Item("TotalRegistros") + 1)
            End If
            dr.Close()
 
            If intTotal < 10 Then
                strCodigo = "S-0000" + intTotal.ToString
            ElseIf intTotal < 100 Then
                strCodigo = "S-000" + intTotal.ToString
            ElseIf intTotal < 1000 Then
                strCodigo = "S-00" + intTotal.ToString
            ElseIf intTotal < 10000 Then
                strCodigo = "S-0" + intTotal.ToString
            End If
        Catch ex As Exception
            MessageBox.Show("Error al generar el código de SERVICIOS: " + ex.ToString)
        End Try
        Return strCodigo
    End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo generar un ID personalizado en Visual Studio (visual Basic ) y SQL Server?

Publicado por Phil Rob (1554 intervenciones) el 23/11/2021 10:50:13
Hola,

No es una buena idea pero si lo quieres ...

Tu código parece me bien pero debes verificar el tipo del campo llave en la tabla. Por defecto, un llave es numérico y para utilizar un tipo alfanumérico, el campo debe ser alfanumérico (VARCHAR(10) por ejemplo).

El tipo puede ser cambiado en las propiedades de la DB con "SQL Server Management".

Siempre he pensado que es mejor de utilizar un llave numérico (Auto Increment o no). Si es necesario de escribir el tipo de tabla, agregaría un campo técnico "TipoEstaTabla" (de tipo CHAR o VARCHAR(1), por ejemplo) y escribiría en este campo S en la tabla "SERVICIO", P en la tabla "PACIENTES", ...

...

SQLServ
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Richard

¿Cómo generar un ID personalizado en Visual Studio (visual Basic ) y SQL Server?

Publicado por Richard (2 intervenciones) el 23/11/2021 15:16:56
Saludos estimado profesor Rob.

Comúnmente utilizo ID's numéricos para las llaves primarias, sin embargo en éste caso, por requerimiento es necesario que sea así, ya que el código es Alfanumérico.

Tomaré en cuenta las recomendaciones.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo generar un ID personalizado en Visual Studio (visual Basic ) y SQL Server?

Publicado por Phil Rob (1554 intervenciones) el 23/11/2021 15:57:14
Muy bien.
Para el formato, es posible escribir una funcion más simple.
Miraré pronto y te la enviará.
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Cómo generar un ID personalizado en Visual Studio (visual Basic ) y SQL Server?

Publicado por Phil Rob (1554 intervenciones) el 23/11/2021 16:56:31
Continuacion ...

Supongo que si utilizas S para la tabla de los servicios, también utilizas otra letra para otra tabla.
Te propongo de utilizar mi función FormatarMiLlave(). Es suficiente de lo dar la letra y el valor, la función da el formato que quieres.

Este es su codigo :
1
2
3
Private Function FormatarMiLlave(Letras As String, ValorLlave As Long) As String
        Return Letras & "-" & String.Format("{0:D6}", ValorLlave)  ' 6 es la cuantidad de chifras que te gusta
    End Function

En tu código, este debería ser como :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Function GenerarCodigoServicios() As string ' Siempre escribir el tipo del resultado
        Dim strCodigo As String = ""
        Dim intTotal As Integer = 1
 
        Try
 
            Cmd = New SqlCommand("SELECT COUNT(*) AS TotalRegistros FROM SERVICIOS", Conn)
            dr = Cmd.ExecuteReader
            If dr.Read Then
                intTotal = CInt(dr.Item("TotalRegistros") + 1)
            End If
            dr.Close()
 
strCodigo = FormatarMiLlave("S", intTotal)
 
        Catch ex As Exception
            MessageBox.Show("Error al generar el código de SERVICIOS: " + ex.ToString)
        End Try
        Return strCodigo
    End Function

Mira el video : https://www.dropbox.com/s/ozguc0gy5f2fd4v/Llave.mp4?dl=0

Buenas tardes ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar