none
Inserto datos fantasma en la BBDD RRS feed

  • Pregunta

  • Inserto en la BBDD a traves de un Insert asi:

    OleDbCommand cmdOperarios = new OleDbCommand("INSERT INTO Averias(CodAveria, CodInstalacion, NomInstalacion, CodAFO, NomAFO, CodTecnologia, NomTecnologia, CodProblema, NomProblema, Opcion, HoraInicio) VALUES ('" + codAv + "'," + CodInstalacion + ",'" + NomInstalacion + "', '" + CodAFO + "','" + NomAFO + "','" + CodTecnologia + "','" + NomTecnologia + "','" + CodTProblema + "','" + NomProblema + "'," + opcion + ",'" + HoraInicioAv + "')", conexion);
                       

    cmdOperarios.ExecuteNonQuery();

    Pero despues de quiero mostrarlos en una etiqueta pero me dice que en esa posicion no hay nada.

     CargarAveria en FlowLayoutPanel
    
                string query = "SELECT * FROM Averias ORDER BY HoraInicio";
                OleDbDataAdapter adapter = new OleDbDataAdapter(query, conexion);
                //Vacio el datatable para evitar duplicados y vuelco los datos cargados en el
                //adaptador en el DataTable, haciendo que se muestren en el DataRepeater.
                    adapter.Fill(dtAA);
                //Recopilamos la informacion necesaria para pasarla al User Control 'UCEtiqueta'.
                string Instalacion = Convert.ToString(dtAA.Rows[dtAA.Rows.Count - 1]["NomInstalacion"]);
                string Afo = Convert.ToString(dtAA.Rows[dtAA.Rows.Count - 1]["NomAFO"]);
                string Tecnologia = Convert.ToString(dtAA.Rows[dtAA.Rows.Count - 1]["NomTecnologia"]);
                string CodTecnologia = Convert.ToString(dtAA.Rows[dtAA.Rows.Count - 1]["CodTecnologia"]);
                string Averia = Convert.ToString(dtAA.Rows[dtAA.Rows.Count - 1]["CodAveria"]);
                int opcion = Convert.ToInt32(dtAA.Rows[dtAA.Rows.Count - 1]["Opcion"]);
                string problema = Convert.ToString(dtAA.Rows[dtAA.Rows.Count - 1]["CodProblema"]);
                Nueva = true;
                HA = DateTime.Now;
                //Iniciamos 'UCEtiqueta' pasandole la infromacion necesaria.
                UCEtiqueta nuevaEtiqueta = new UCEtiqueta(this, Instalacion, Afo, Tecnologia, TMando, TJefe, HA, Averia, numR, opcion, problema, CodTecnologia);
                //mostramos la averia con aspecto de etiqueta.
                nuevaEtiqueta.Show();            
                nuevaEtiqueta.Parent = FlowPanel;
                //añdimos la averia a una lista de etiquetas.
                listaEtiquetas.Add(nuevaEtiqueta);
                nuevaEtiqueta.Width = 773;                      

    Me dice que no tengo ningun valor, nose porque.

    Se que las consultas hay que hacerlas con parametros y no con variables directamente

    pero he probado mil veces y no hay manera... ;)

    Un saludo, gracias

    jueves, 11 de febrero de 2016 6:45

Todas las respuestas

  • No se ve ningún problema a simple vista. Tendrás que recurrir a usar el Debugger. Primero aísla el problema para ver si lo que falla es la grabación o la lectura. Para eso, ejecuta el INSERT y luego vete a ver la base de datos y comprueba si el registro entró. Si está ahí pero la SELECT no te lo muestra, entonces el problema está en la lectura, pero si no está, entonces te falla la inserción. Después, en la parte pertinente (lectura o inserción) pon un punto de ruptura y sigue la ejecución paso a paso con el debugger examinando los valores de las variables hasta que encuentres el punto exacto en el que los valores no son los que deberían ser. Llegados hasta aquí, es probable que resulte obvio qué es lo que falla, pero si sigues sin poder determinarlo, ponnos aquí los resultados del experimento y trataremos de ayudarte a resolverlo.
    jueves, 11 de febrero de 2016 7:20
  • Si abriendo la BBDD deberia estar el registro, falla el insert porque no aparece nada. Aunque viendo el codigo

    las variables contienen todas el valor correspondiente y el insert lo hago en el acces con los valores de las variables

    y funciona perfectamente.

    jueves, 11 de febrero de 2016 7:30
  • He probado con esta consulta en la misma BBDD copiando el valor de las variables y funaciona perfectamente.

    INSERT INTO Averias(CodAveria, CodInstalacion, NomInstalacion, CodAFO, NomAFO, CodTecnologia, NomTecnologia, CodProblema, NomProblema, Opcion, HoraInicio)
     VALUES ('AV160211001',131,'Pasorruedas Anterior Izquierdo - F1', '190','190- AFO 190','SEG','Escaner Sick Robot 5112','ELE','Electrico',3,'11/02/2016 08:32:32');

    jueves, 11 de febrero de 2016 7:37
  • El método ExecuteNonQuery te devuelvo el número de registros afectados.

    Para acotar el problema (ver si está en la propia INSERT o en otro lugar del código) recupera ese valor y comprueba que es 1 (indicando que se ha insertado correctamente un registro):

    int numRegistrosInsertados = cmdOperarios.ExecuteNonQuery();


    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, ...

    jueves, 11 de febrero de 2016 8:16
  • Me devuelve 1 en un messageBox. Eso quiere decir que ha indexado la un registro, voy a la BBDD y veo que nada.

    No entiendo porque, me esta volviendo loco.

    Gracias.

    jueves, 11 de febrero de 2016 8:50
  • [...] quiere decir que ha indexado la un registro, voy a la BBDD y veo que nada.

    A ver si has caído en el clásico problema de la doble base de datos. A lo mejor tienes configurado Visual Studio para que al depurar copie la base de datos original desde la carpeta de los fuentes a la carpeta del ejecutable. El ejecutable inserta un registro en ésta última, pero lógicamente ese registro no aparece si examinas la otra copia de la base de datos (la que está en la carpeta del código fuente). La siguiente vez que lo ejecutas vuelve a copiar la BD de origen sobre la carpeta del ejecutable, con lo que se pierde el registro insertado la vez anterior, y el Select no muestra nada.

    jueves, 11 de febrero de 2016 9:50
  • http://ltuttini.blogspot.com.es/2012/11/visual-studio-base-de-datos-integradas.html

    Sigo estos pasos pero me sigue sin funcionar. Me dice que la BBDD ya se esta utilizando a la hora que ejecuto:

    Error 4 Existe un problema al generar el manifiesto. El proceso no puede obtener acceso al archivo 'C:\Users\XXXXX\Documents\Proyectos Visual Studio 2010\Proyecto\1.1.4.1\Proyecto\BBDD.accdb' porque está siendo utilizado en otro proceso.

    Hay que cambiar la BBDD de carpeta? sin que este dentro del proyecto?

    Un saludo, gracias

    jueves, 11 de febrero de 2016 10:11