none
Problema a la hora de insertar datos con datagridview RRS feed

  • Pregunta

  •  

    Tengan un buen día. Soy un novato en ADO.NET y estoy desarrollando una aplicación en la cual tengo un datagridview. El problema con este me surje cuando se agrega un nuevo registro, ya que me da un error, me arroja un error de llave foránea o algo por el estilo, ya que en la tabla donde se deben insertar los datos nuevos del datagridview tiene una llave foránea,  el error que me da es el siguiente:

     

    Cannot add or update a child row: a foreign key constraint fails (`dbcondeca/contactoaseguradora`, CONSTRAINT `contactoaseguradora_ibfk_1` FOREIGN KEY (`aseguradora`) REFERENCES `aseguradora` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

     

    Aquí tengo un dibujo de lo que es la tabla donde trato de meter nuevos registros y la tabla a la que se encuentra relacionada, de donde hereda la llave foránea:

     

    http://www.oscarcalderon.info/dibujoDB.jpg

     

    Y no se como puedo solucionar este problema, ya que solo me da a la hora de tratar de insertar un registro, porque al modificar un registro no ocurre ningun problema. La lógica es de la siguiente manera: En una clase tengo el código para conectarme, crear un MySQLDataAdapter (ya que es con una DB MySQL) con una instrucción SQL de consulta para que mediante un CommandBuilder que creo despues, pueda generar las otras sentencias SQL. Luego el método Update del DataAdapter en el cual le paso como parámetro un dataTable, este dataTable lo recibo desde el código del formulario, donde lo extraigo de la propiedad DataSource de un BindingSource que está conectado con un DataGridView. El código es el siguiente:

     

    Código de la clase (bueno, solo el método donde hay problema)

     

     

    Bloque de código

    public void updateData(DataTable tablaMod)

    {

    conectarme();

    adaptador = new MySqlDataAdapter("SELECT * FROM contactoaseguradora WHERE aseguradora =" + numAseguradora + ";", enlace);

    buildComando = new MySqlCommandBuilder(adaptador);

    adaptador.Update(tablaMod);

    desconectarme();

    }

     

     

    Código del formulario (en un evento que ocurre antes que el formulario se cierre)

     

    Bloque de código

    private void visorAseguradora_Load(object sender, EventArgs e)

    {

    //Aqui se llena el datagridview de los contactos con el método getContactos() el cual funciona bien

    gridContactos.DataSource = bndSrcContacto;

    bndSrcContacto.DataSource = datosAseg.getContactos();

    }

    private void visor_Cerrandose(object sender, FormClosingEventArgs e)

    {

    //Aqui lo que trato de hacer es enviar un dataTable a la clase para que haga el Update(), dicho dataTable es en realidad una conversion del bindingSource a DataTable

    datosAseg.updateData((DataTable)bndSrcContacto.DataSource);

    }

     

     

    He estado revisando un código de ejemplo de un blog y algo así está, pero no me sale. Por favor ayudenme.

    lunes, 19 de noviembre de 2007 21:54

Todas las respuestas

  • Holas,
    No es problema de ADO.net, puede que estés enviando un dato que no está en la otra tabla o estés enviando una fila vacía. Como está relacionada con la tabla Aseguradora, el Id de Aseguradora que envías en el contacto debe existir.. quiere dedir que deberías tener datos en Asegurdora.

    Espero haber ayudado,

    Saludos
    miércoles, 12 de diciembre de 2007 23:35