none
Non funciona ninguna consulta insert , update. RRS feed

  • Pregunta

  • Ejecuto las consultas desde el codigo, le asigono el executeNonQuery a una variable int para ver si devuelve algo y siempre un 1 pero en la BBDD no cambia ningun registro. Creo que se trata de la propiedad de la BBDD Copiar en el directorio de resultados pero al cambiarala y ponerla en No copiar me dice que la BBDD esta en uso y no me deja ejecutar el codigo. Soy incapaz de arreglarlo. Haciendo consultas alamacenadas podria ser¿? Tengo en cada form una conexion propia y en cada form la abro y la cierro, puede que haciendo solo una conexion y llamandole a esa todo el rato puede que funcione¿?

    Alguna idea por favor, gracias de antemano un saludo!

    Tximas

    viernes, 12 de febrero de 2016 7:34

Todas las respuestas

  • Cuando hago la consulta y hago el

    .ExecuteNonQuery();

    y entro a la BBDD la connsulta deberia verse?

    viernes, 12 de febrero de 2016 7:41
  • Sí, deberían verse los datos actualizados.

    Ten en cuenta que si la BBDD la tienes en la carpeta de proyecto y se está copiando a la carpeta de compilación, el archivo de base de datos que deberías consultar para ver los cambios es el que se encuentra en la carpeta bin/debug.

    Siempre que tomes la ruta del archivo de base de datos relativa a la carpeta de ejecución. Supongo que ya lo habrás puesto en alguno de los posts pero ¿cómo defines la cadena de conexión?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    viernes, 12 de febrero de 2016 7:48
  • ¿Qué consulta es la que estás ejecutando?

    ExecuteNonQuery devuelve el nº de filas afectadas por la consulta ejecutada.


    Saludos, Javier J

    viernes, 12 de febrero de 2016 7:50
  • public static string cadena = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\BBDD.accdb; Jet OLEDB:Database Password=123456789";

    Asi tengo la cadena de conexion, y lo que dices es cierto, en tiempo de ejecucion en la carpeta bin/debug en la BBDD

    salen todos los cambios correctamente.

    Que puedo hacer para arreglarlo? Colocar la BBDD de datos en otro sitio?

    viernes, 12 de febrero de 2016 7:59
  • En la Cadena de conexión deberia hacer referencia a la BBDD de la carpeta /bin/debug en vez de a la BBDD

    que esa en el directorio? Asi yo creo que funcionaria bien.

    viernes, 12 de febrero de 2016 8:22
  • Cuando utilizas ese tipo de comando muy importante poner arriba esto:

    Imports System.Data
    Imports System.Data.OleDb

    Te dejo un ejemplo que a mi me funciona a la perfección... 

    Dim connDB As New OleDbConnection
            Dim cmd As New OleDbCommand
            Try
                Dim conString As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|\Listado_Material.accdb; Persist Security Info = False "
                connDB = New OleDb.OleDbConnection(conString)
                connDB.Open()
                cmd = New OleDb.OleDbCommand("INSERT INTO ListadoElectrico ( Cantidad, Descripcion, NumeroParte, Marca, Proveedor, CantidadUnitaria, CostoTotal) VALUES (" & CantidadTextBox.Text & ",'" & DescripcionTextBox.Text & "','" & NumeroParteTextBox.Text & "','" & MarcaTextBox.Text & "','" & ProveedorTextBox.Text & "'," & CantidadUnitariaTextBox.Text & "," & CostoTotalTextBox.Text & ")", connDB)
                cmd.ExecuteNonQuery()
                connDB.Close()
                MsgBox("Dato Insertado")
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try

    En caso de que estés usando Community 2015 existe una manera mucho mas sencilla de hacer conexiones sin usar los comandos OLEB.

    Dale un vistazo a este vídeo:

    https://www.youtube.com/watch?v=_4D6_j_JGes

    viernes, 12 de febrero de 2016 22:36
  • Hola:

     Copiar en el directorio de resultados pero al cambiarala y ponerla en No copiar me dice que la BBDD esta en uso y no me deja ejecutar el codigo

     Asegúrate no tener el archivo Access abierto cuando intentes hacer ese cambio. 

    En la Cadena de conexión deberia hacer referencia a la BBDD de la carpeta /bin/debug en vez de a la BBDD

    Es lo mismo, lo que haces en tu cadena de conexion actual usando en Data directory es tomar siempre el path desde donde se esta ejecutando tu aplicación, cuando debugueas normalmente es la carpeta bin/debug

     Si no recibes ningún mensaje de excepción entonces las consultas si se estan ejecutando y el problema esta en la propiedad de tu base de datos, podrías hacer una prueba moviendola a la unidad C:/test y luego apuntas tu cadena de conexión a ese directorio:

    public static string cadena = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test\BBDD.accdb; Jet OLEDB:Database Password=123456789";
    Has esa prueba y nos informas.


    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 12 de febrero de 2016 23:29