Visual Basic.NET - Realizar un insert en Visual 2017

 
Vista:
sin imagen de perfil
Val: 4
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Realizar un insert en Visual 2017

Publicado por 5elemento (2 intervenciones) el 07/09/2018 18:06:24
Hola no tengo muchos conocimientos de programación y estoy intentando hacer un formulario para ingresar, eliminar y modificar datos con una BBDD access y visual basic 2017

Ya me quede parado en el insert. Me da un error de "salto o operador "... No me acuerdo bien que ponia porque le di sin querer a "si" y se ha deshabilitado.

El caso es que no me funciona correctamente. Espero que me puedan indicar donde tengo el error. Gracias.

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
//CODIGO
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 
    Dim IdNombre As Integer
    Dim comando As New OleDbCommand ' para el comando
 
    FechaRegistroGuardado = String.Format("{0:G}", DateTime.Now)
 
    Try
        Cadena.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:\BBDDGestionEmpleados.accdb"
        Cadena.Open()
 
        'Sacamos el ultimo ID
        Dim cmd As OleDbCommand = Cadena.CreateCommand
        cmd.CommandText = "SELECT @@IDENTITY;"
        IdNombre = cmd.ExecuteScalar()
 
        If IdNombre = Nothing Then
            IdNombre = 1
        End If
 
        'Ejecutamos insert
comando = New OleDbCommand("Insert into Registros(IdNombre, Nombre, Tipo Registro, Dia/Fecha Evento, Numero dias, Horas, Fecha Registro Guardado, Papel Justificante, Comentarios)" &
"VALUES (IdNombre,TxtNombre TipoRegistro,FechaEvento,NDias,Horas,FechaRegistroGuardado,PapelJustificante,Comentarios)", Cadena)
 
        comando.Parameters.Clear()
        comando.Parameters.AddWithValue("@IdNombre", IdNombre.ToString)
        comando.Parameters.AddWithValue("@Nombre", TxtNombre.Text)
        comando.Parameters.AddWithValue("@Tipo Registro", TipoRegistro.SelectedItem)
        comando.Parameters.AddWithValue("@Dia/Fecha Evento", FechaEvento)
        comando.Parameters.AddWithValue("@Numero dias", NDias.Text)
        comando.Parameters.AddWithValue("@Horas", Horas.Text)
        comando.Parameters.AddWithValue("@Fecha Registro Guardado", FechaRegistroGuardado)
        comando.Parameters.AddWithValue("@Papel Justificante", PapelJustificante)
        comando.Parameters.AddWithValue("@Comentarios", Comentarios.Text)
 
        comando.ExecuteNonQuery()
        MsgBox("Registro Guardado Correctamente", vbInformation, "Aviso")
 
 
    Catch ex As Exception
        MsgBox("Error al guardar el registro", vbCritical, "Error")
 
    End Try
 
    Cadena.Close()
 
End Sub
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 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

Realizar un insert en Visual 2017

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 09/09/2018 18:51:34
El error está en varias partes, y sobre todo, en no documentarte bien.

Vamos a ver el asunto punto por punto.

Primer punto.

No necesitas traer ese IdNombre, ya que ese campo lo puedes declarar como autonumérico, y la base de datos se encargaría de generarlo.

Segundo punto.

Los nombres de los campos. En principio no deberían tener espacios en los nombres, pero en el caso de tener espacios, se debería especificar entre corchetes por ejemplo: (Tipo Registro, debería ir así: [Tipo Registro]).

Tercer punto.

FechaRegistroGuardado, no necesitas declararlo y darle formato para guardarlo, eso es una pérdida de tiempo, bastaría con insertar directamente el datetime.now, y ese tipo de dato debería ser date o datetime y no string.

Cuarto punto.

Tu sentencia INSERT, está mal armada por diferentes motivos.
Primero.- El tema de los nombres de campos con espacios, que ya te dije como solucionarlo.
Segundo.- En los VALUES, estás poniendo nombres de objetos, un ejemplo claro de eso es TxtNombre, como verás TxtNombre es un objeto que no tiene nada que ver con el valor que contiene, para lo cual deberías en todo caso especificar el valor que está llevando, como sería TxtNombre.text.

Quinto punto.

Estás pasando parámetros y nunca funcionarán, porque por ningún lado veo que se estén especificando en la instrucción INSERT, y eso se soluciona fácilmente, especificando un @ al inicio de cada uno de los Values, para lo cual tu sentencia debería quedar mas o menos así:

Dim Comando as new OleDBCommand

Comando.CommandText="INSERT INTO Registros(Nombre,[Tipo Registro]) VALUES (@Nombre,@TipoRegistro)"
Comando.CommandType=CommandType.Text
Comando.Connection=cadena
Comando.Parameters.Add("@Nombre",OleDBType.Varchar,50).value=TxtNombre.Text
Comando.Parameters.Add("@TipoRegistro",OleDBType.Integer).Value=ConvertToInt32(TipoRegistro.SelectedValue)

Dim Correcto as Integer=Comando.ExecuteNonquery
If Correcto=0 then
Mesagebox.Show("Error al insertar datos")
Else
MessageBox.Show("Registro guardado satisfactoriamente")
End If

Mas o menos esa es la idea de como debería estar tu 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
Val: 4
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Realizar un insert en Visual 2017

Publicado por 5elemento (2 intervenciones) el 10/09/2018 20:44:30
Lo primero de todo Muchas Gracias por dedicarme tu tiempo.

Como bien dices no controlo muchos aspectos. Pero poco a poco leyendo y preguntando algunos conceptos espero ir mejorando.

He realizado todas las modificaciones que me has indicado, como puedes ver he intentado seguir la estructura que tenia pero con tus maravillosas indicaciones.

Ahora mismo me inserta correctamente y perfecto.

voy a practicar con los espacios en los campos y utilizando corchetes.

Y después seguiré con eliminar y modificar registros.

Otra vez te doy las gracias.


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
Dim comando As New OleDbCommand ' para el comando
 
        Try
            Cadena.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:\Alberto\Trabajo\Base de datos\BBDDGestionEmpleados.accdb"
            Cadena.Open()
 
            'Ejecutamos insert
 
            comando = New OleDbCommand("Insert into Registros(Nombre,TipoRegistro,FechaEvento,NumeroDias,Horas,FechaRegistroGuardado,PapelJustificante,Comentarios)" &
                                       "VALUES (@TxtNombre,@TipoRegistro,@FechaEvento,@NDias,@Horas,@FechaRegistroGuardado,@PapelJustificante,@Comentarios)", Cadena)
 
            comando.Parameters.Clear()
            comando.Parameters.Add("@Nombre", OleDbType.VarChar, 50).Value = TxtNombre.Text
            comando.Parameters.Add("@TipoRegistro", OleDbType.VarChar, 25).Value = TipoRegistro.SelectedItem
            comando.Parameters.Add("@FechaEvento", OleDbType.Date).Value = FechaEvento.Text
            comando.Parameters.Add("@NumeroDias", OleDbType.Integer).Value = NDias.Text
            comando.Parameters.Add("@Horas", OleDbType.Integer).Value = Horas.Text
            comando.Parameters.Add("@FechaRegistroGuardado", OleDbType.Date).Value = DateTime.Now
            comando.Parameters.Add("@PapelJustificante", OleDbType.Boolean).Value = PapelJustificante.Checked
            comando.Parameters.Add("@Comentarios", OleDbType.LongVarChar).Value = Comentarios.Text
 
            comando.ExecuteNonQuery()
            MsgBox("Registro Guardado Correctamente", vbInformation, "Aviso")
 
 
        Catch ex As Exception
            MsgBox("Error al guardar el registro", vbCritical, "Error")
 
        End Try
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

Realizar un insert en Visual 2017

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 11/09/2018 18:33:15
Que bueno que hayas podido solucionar tu problema.

Tengo una observación a tu código que acabas de enviar.

VALUE (@TxtNombre

Y en los parámetros estás pasando @Nombre, entonces, o es @TxtNombre o es @Nombre.

Ten cuidado con eso, ya que si pones Option Strinct al inicio de todo o si lo seteas estricto, tendrás muchos errores.

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
0
Comentar