Visual Basic.NET - Problemas al añadir registro con numero negativo

 
Vista:
sin imagen de perfil

Problemas al añadir registro con numero negativo

Publicado por Dolores (8 intervenciones) el 28/01/2016 13:04:57
Buenos días:
tengo un problema que no consigo solucionar. Necesito crear un registro en el que la cantidad es negativa, un numero entero sin decimales. El rpoblema es que me da error "La conversión de la cadena "" en el tipo 'Double' no es válida." en la linea del IF

El código es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        Dim A, B, D, G As String
        Dim C, F As Integer
        G = TextBox1.Text
        A = TextBox3.Text
        B = TextBox2.Text
        C = TextBox4.Text
        If A <> "" And B <> "" And C <> "" And G <> "" Then
            cmd.Connection = conexion
            cmd.CommandType = CommandType.Text
            cmd.CommandText = "INSERT INTO Polizas (DNI,Cliente,Ramo, Prima, Mes,Ano) VALUES ('" & G & "','" & A & "','" & B & "','" & C & "')"
            cmd.ExecuteNonQuery()
        Else
            MsgBox("INTRODUCE TODOS LOS DATOS")
 
        End If
 
    End Sub
End Class

Muchísimas gracias por intentar ayudarme,
Un saludo
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
sin imagen de perfil

Problemas al añadir registro con numero negativo

Publicado por omar (155 intervenciones) el 28/01/2016 19:03:37
tu campo de la base de datos de la tabla son 6 campos y tu en el codigo estas pasando solo 4 variables para 4 campos

te mandara error en la instruccion inserc
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
sin imagen de perfil

Problemas al añadir registro con numero negativo

Publicado por Dolores (8 intervenciones) el 29/01/2016 11:02:02
Buenos días Omar:

Muchísimas gracias por tu información, tienes razón, no me había dado cuenta, he creado un formulario nuevo para hacer pruebas y no fastidiar el formulario en el que realmente va este código, que antes me funcionaba sin problemas y después de enredar ya no me funciona.
Antes me grababa sin problemas las cantidades en positivo fallaba con los negativos y ahora ni lo uno ni lo otro.
Este es el código tal cual lo tengo en el formulario original.

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
30
31
32
33
34
35
36
37
38
39
Private Sub BtValidar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtValidar.Click
        Dim A, B, D, G As String
        Dim C, F As Integer
        G = TbDni.Text
        A = TbAsegurada.Text
        B = CbRamo.GetItemText(CbRamo.SelectedItem)
        C = Val(TbPrima.Text)
        D = CbMes.GetItemText(CbMes.SelectedItem)
        F = TbAno.Text
        If A <> "" And CbRamo.SelectedIndex = -1 And C <> "" And CbMes.SelectedIndex = -1 And G <> "" Then
            If Val(TbPrima.Text) < 0 Then
                TbBaja.Text = 0
            End If
            cmd.Connection = conexion
            cmd.CommandType = CommandType.Text
            cmd.CommandText = "INSERT INTO Polizas (DNI,Cliente,Ramo, Prima, Mes,Ano) VALUES ('" & G & "','" & A & "','" & B & "','" & C & "','" & D & "','" & F & "')"
            cmd.ExecuteNonQuery()
            TbDni.Text = ""
            TbAsegurada.Text = ""
            CbRamo.Text = "Seleccione Ramo"
            TbPrima.Text = ""
            CbMes.Text = "Seleccione Mes"
        Else
            MsgBox("INTRODUCE TODOS LOS DATOS")
            If G = "" Then
                TbDni.Select()
            ElseIf D = "" Then
                CbMes.Select()
            ElseIf A = "" Then
                TbAsegurada.Select()
            ElseIf B = "" Then
                CbRamo.Select()
            Else
                TbPrima.Select()
            End If
 
        End If
 
    End Sub
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 Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problemas al añadir registro con numero negativo

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 29/01/2016 20:10:35
Esas concatenaciones son peligrosas, hay maneras mas seguras de hacerlas, podrías por ejemplo usar String.format(), ya que así como lo expones estás abriendo la puerta para que te inyecten código.

Saludos cordiales,
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
sin imagen de perfil

Problemas al añadir registro con numero negativo

Publicado por Dolores (8 intervenciones) el 31/01/2016 14:44:14
Muchísimas gracias Wilfredo:

He revisado el código teniendo en cuenta tu advertencia y la he modificado por el siguiente código:
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
30
31
32
33
34
35
Private Sub BtValidar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtValidar.Click
        Dim G, A, B, C, D, F, H As String
        B = TbDni.Text
        C = TbAsegurada.Text
        D = CbRamo.GetItemText(CbRamo.SelectedItem)
        F = TbPrima.Text
        G = CbMes.GetItemText(CbMes.SelectedItem)
        H = TbAno.Text
        A = TbBaja.Text
 
        For Each caja As Object In Me.Controls
            If caja.GetType Is GetType(TextBox) Then
                If caja.text = "" Then
                    MsgBox("INTRODUCE TODOS LOS DATOS")
                End If
            End If
            If caja.GetType Is GetType(ComboBox) Then
                If caja.SelectedIndex = -1 Then
                    MsgBox("INTRODUCE TODOS LOS DATOS")
                End If
            End If
        Next
        cmd.Connection = conexion
        cmd.CommandType = CommandType.Text
        cmd.CommandText = "INSERT INTO Polizas (Baja_Alta,DNI,Cliente,Ramo, Prima, Mes,Ano) VALUES ('" & A & "','" & B & "','" & C & "','" & D & "','" & F & "','" & G & "','" & H & "')"
        cmd.ExecuteNonQuery()
        TbBaja.Text = ""
        CbMes.Text = "Seleccione Mes"
        TbDni.Text = ""
        TbAsegurada.Text = ""
        CbRamo.Text = "Seleccione Ramo"
        TbPrima.Text = ""
        TbAno.Text = ""
 
End Sub

El problema es que se trata de que cuando vea un Textbox o un ComboBox sin rellenar que saque el mensaje pero que si todo está completado ejecute la SQL y lo que hace es sacarme el mensaje pero seguido ejecuta la SQL sin esperar a que todos los campos estén completados.
Si pudieras decirme dónde está el error???

Una vez mas muchísimas gracias.
Un saludo,
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 Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problemas al añadir registro con numero negativo

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 31/01/2016 18:15:14
Eso te pasa porque no estás teniendo un control de errores adecuado, la parte de tus inserciones deberías tenerlo dentro de un
Try Catch

Bueno, no soy partícipe de ese tipo de programación, sino mas bien de orientado a objetos, pero si ya tienes hecho todo ni modo.

Deberías hacer las validaciones antes de llegar a ese punto , ya que si te fijas, primero asignas los valores a las variables, luego compruebas si están vacíos, entonces creo que sería mejor primero comprobaras y luego asignaras, con eso sería mucho mas legible tu código inclusive.

Yo preferiría validar uno por unos esos controles, antes de hacer ese For Each, ya que así como está si tienes 100 controles, se los recorre todos para buscar los textboxes, luego todos para los comboboxes, y así sucesivamente para todos los que quieras validar, por lo tanto como verás que crees que sea mas lento?.

Haber si con esto te ayuda:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
.
.
.
 
 
For Each caja As Object In Me.Controls
If caja.GetType Is GetType(TextBox) Then
If caja.text = "" Then
MsgBox("INTRODUCE TODOS LOS DATOS")
exit for
exit sub
me.caja.focus
End If
End If
If caja.GetType Is GetType(ComboBox) Then
If caja.SelectedIndex = -1 Then
MsgBox("INTRODUCE TODOS LOS DATOS")
exit for
exit sub
End If
End If
Next
 
B = TbDni.Text
C = TbAsegurada.Text
D = CbRamo.GetItemText(CbRamo.SelectedItem)
F = TbPrima.Text
G = CbMes.GetItemText(CbMes.SelectedItem)
H = TbAno.Text
A = TbBaja.Text
 
Try
cmd.Connection = conexion
cmd.CommandType = CommandType.Text
cmd.CommandText = "INSERT INTO Polizas (Baja_Alta,DNI,Cliente,Ramo, Prima, Mes,Ano) VALUES (@A,@B ,@C,@D,@F,@G,@H)"
cmd.Parameters.Add("@A",SqlDbType.Varchar).Value=A
cmd.Parameters.Add("@A",SqlDbType.Varchar).Value=B
cmd.Parameters.Add("@A",SqlDbType.Varchar).Value=C
cmd.Parameters.Add("@A",SqlDbType.Varchar).Value=D
cmd.Parameters.Add("@A",SqlDbType.Varchar).Value=F
cmd.Parameters.Add("@A",SqlDbType.Varchar).Value=G
cmd.Parameters.Add("@A",SqlDbType.Varchar).Value=H
dim Correcto as integer=cmd.ExecuteNonQuery()
if Correcto>0 then
  messagebox.Show("Datos grabados correctamente","Aviso")
endif
TbBaja.Text = ""
CbMes.Text = "Seleccione Mes"
TbDni.Text = ""
TbAsegurada.Text = ""
CbRamo.Text = "Seleccione Ramo"
TbPrima.Text = ""
TbAno.Text = ""
catch (Exception ex)
  messagebox.show(ex.Message,"Error")
End Try
.
.
 
hasta llegar al
End Sub


Faltan algunas cosas por ajustar, pero lo dejo para que te entretengas un rato.

En los parámetros, cambias los tipos de datos respectivos a cada valor o variable que estás pasando.

Cualquier cosa nos escribes.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Problemas al añadir registro con numero negativo

Publicado por Dolores (8 intervenciones) el 01/02/2016 17:18:07
Muchísimas gracias Wilfredo por el trabajo que has hecho, impresionante!!!!,
Ahora mismo me pongo con ello, no dudo que me irá genial.
Un saludo,
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
sin imagen de perfil

Problemas al añadir registro con numero negativo

Publicado por Dolores (8 intervenciones) el 01/02/2016 17:59:08
Wilfredo:

Con dos retoques de poca importancia, funciona perfectamente, justo lo que yo quería.

Muchísimas gracias de todo corazón, me has ayudado un montón y te agradezco el esfuerzo.

un saludo,
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 Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problemas al añadir registro con numero negativo

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 01/02/2016 18:27:13
Pues de nada hombre!!

Para eso estamos por acá.

Gracias y a seguir valorando las respuestas.

Saludos cordiales,
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