Visual Basic.NET - Dónde control de errores

 
Vista:

Dónde control de errores

Publicado por Miguel Ángel casalisanchez@gmail.com (20 intervenciones) el 27/06/2019 22:12:28
Tengo una base de datos,dónde se realiza la inserción y edición de los datos en un formulario enlazados a un BindingNavigator. Tengo varios campos donde hay clave única y el otro no puede permitir tampoco puedo permitir valores NULL.
en qué evento del BindingNavigator debo hacer el control de errores para evitar que se repita el campo identificación de un trabajador(qué es la clave única) y en ambos campos no se admitan valores nulos.
Dónde debo hacer el control de errores, en qué evento o objeto

Try

Catch

Ene Try

Muchísimas gracias por vuestra colaboración.
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: 1.827
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Dónde control de errores

Publicado por Phil Rob (440 intervenciones) el 29/06/2019 18:35:40
Hola,

Propongo de crear tu navegador personal (sé que no este la pregunta).

Ejemplo :

La base de datos contiene los registros productos. Despues la abertura de la DB y la lectura de la tabla TLosProductos (SELECT * FROM TLosProductos), ato los heramientas del formulario a los registros :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
' Algunos componentes tienen uno  DataSource, y aquellos que solo pueden presentar un campo de registro tienen
' uno DisplayMember. Este es el caso de un ListBox, entonce :
' LaListBox.DataSource = MisExistencias.Tables("TLosProductos") ' es ejemplo
' LaListBox.DisplayMember = "Producto" ' es ejemplo
 
DGVExistencias.DataSource = MisExistencias.Tables("TLosProductos")   ' Algunos componentes, como DataGridView, tienen DataSource
 
DGVExistencias.Columns("Identificador").ReadOnly = True              ' No modificación manual del Identificador
 
' Algunos componentes no tienen DataSource pero tienen une colección de Bindings en los que
' agregar el nombre de la propiedad afectada, el DataSet quien produce los datos, y el campo a afectar a la propiedad
' Ejempl0 : TProducto.DataBindings.Add("Text", MisExistencias.Tables("TLosProductos"), "Producto")
' Enlacamos el campo "Producto" de los registros de "TLosProductos" a la propiedad "Text" de la TextBox "TProducto"
 
TIdentificador.DataBindings.Add("Text", MisExistencias.Tables("TLosProductos"), "Identificador")  ' Algunos componentes no tienen DataSource
 
TIdentificador.ReadOnly = True                                 ' No modificación manual del Identificador
TProducto.DataBindings.Add("Text", MisExistencias.Tables("TLosProductos"), "Producto")
TTipo.DataBindings.Add("Text", MisExistencias.Tables("TLosProductos"), "Tipo")
TReferencia.DataBindings.Add("Text", MisExistencias.Tables("TLosProductos"), "Referencia")
'... ... ...

Para ir ente los registros, pongo botones en el formulario y uso el código evento siguiente :

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
' El bloque de gestión de lectura. Un solo procedimiente evento responde a 4 fuentes de Click : BPrimero, BAnterior, BSiguiente y BUltimo
Private Sub LecturaCircular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BUltimo.Click, BAnterior.Click, BSiguiente.Click, BPrimero.Click
    ' No es necesario intentar un movimiento si el DataSet no contiene ninguna tabla.
    If MisExistencias.Tables.Count > 0 And LecturaIterativaPermitida Then
        ' El BindingContext pertenece a un contenedor, el formulario en este caso.
        With Me.BindingContext(MisExistencias.Tables("TLosProductos"))
            ' Modificación de la propiedad Position según el botón seleccionado.
            Select Case sender.Name
                Case "BPrimero"
                    .Position = 0
                Case "BAnterior"
                    If .Position = 0 Then
                        .Position = .Count - 1              ' Lectura circular (como un reloj pero al revés)
                    Else
                        .Position -= 1
                    End If
                Case "BSiguiente"
                    If .Position = .Count - 1 Then
                        .Position = 0                       ' Lectura circular (como un reloj)
                    Else
                        .Position += 1
                    End If
                Case "BUltimo"
                    .Position = .Count - 1
            End Select
        End With
    End If
End Sub

Mi algoritmo no permito de registrar los datos a cada moviente pero creo que este es posible de programar la modificación de Position en un Try ... End Try.

Espero darte una buena idea ...

Navigador
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

Dónde control de errores

Publicado por Raúl Mejía rmejia153@msn.com (23 intervenciones) el 29/06/2019 19:47:24
Estimado Miguel Angel, lo que yo hago para grabar un registro nuevo en una tabla, es lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Try
    Using cnx As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dSn)
        cnx.Open()
        sSql = "SELECT * FROM VENTAS WHERE FOLIO = (SELECT MAX(FOLIO) FROM VENTAS)"
        Dim cmd As New OleDbCommand(sSql, cnx)
        cmd.CommandType = CommandType.Text
        'cmd.Parameters.AddWithValue("FOLIO", txtRow.Text)
        Dim rstVENTAS As OleDbDataReader = cmd.ExecuteReader()
        If rstVENTAS.Read = True Then
            intFolio = CStr(rstVENTAS(0)) + 1
        Else
            intFolio = 1
        End If
        cnx.Close()
        rstVENTAS.Close()
    End Using
Catch ex As Exception
    MessageBox.Show("Error : " + ex.Message + "", "¡Ocurrio el siguiente Error!", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

Asi grabo en la variable IntFolio el resultado de mi consulta sql + 1, podrías hacer lo mismo y asi no capturarías el campo de identificación del trabajador, nunca sería nulo y tampoco tendrías un duplicado.

Saludos cordiales, espero que te sirva de algo mi consejo.
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

Dónde control de errores

Publicado por Miguel Ángel (20 intervenciones) el 30/06/2019 00:35:08
Muchas gracias por su ayuda!!!
Y le agradezco lo super elaborada la respuesta y con la suma claridad de sus aclaraciones.
Al final lo que he hecho ha sido utilizar las ventajas que ofrece el BindingNavigator, y he realizado el control de errores en el evento click

Try
....... EndEdit
.......

Catch
Dim Ex as excepton
MsgBox (Ex, vbCritical,"Se ha producido el siguiente error:)
EndTry

Así he conseguido la rapidez que ofrece este objeto para programar formularios detalle, de las bases de datos.
Pero permítame decirle, que era una posibilidad que había manejado, de controlar los errores creando directamente los botones anterior, posterior, inicio y final de registros.
Me quedo con su respuesta como la mejor.
Gracias de corazón !!!
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