none
tesis de tecnico superior en programación RRS feed

  • Pregunta

  • hola estoy realizando mi tesis de mi carrera y es un aplicativo en winfor c# de ganaderia lo cual me esta complicando es hacer una tabla originar llamada hembras y una tabla historial lo que quiero hacer es al precionar el boton guardar que se guarde en ambas tabla y cuando modifique que lo buscare por el numero de caravana de cada animal y se precione el boton modificar tambien se guarde en la tabla historial.

    tengo echo esto para el agregar y modificar pero me estaria faltando para agregar a ambas tablas vaca/ historial

      //Esto se ejecuta si la funcion es agregar
                if (funcion == 1)
                {
                    Vaca a = new Vaca();
                    textBox1.Select(textBox1.Text.Length, 0);
                    a.caravana = Convert.ToInt32(textBox1.Text);
                    a.Nacimiento1 = Convert.ToDateTime(dateTimePicker1.Text);
                    a.Est_rep1 = Convert.ToString(comboBox1.Text);
                    textBox4.Select(textBox4.Text.Length, 1);
                    a.Cron_d1 = Convert.ToString(textBox4.Text);
                    a.Cond_c1 = Convert.ToString(comboBox2.Text);
                    textBox6.Select(textBox6.Text.Length, 2);
                    a.Cant_p1 = Convert.ToString(textBox6.Text);
                    a.Categoria1 = Convert.ToString(comboBox3.Text);



                    sesion = sesiones.OpenSession();


                    sesion.Save(a);
                    sesion.Flush();

                    MessageBox.Show("Se ha agregado correctamente");

                    IQuery query = sesion.CreateQuery("from Vaca c");
                    IList<Vaca> lista = query.List<Vaca>(); //Se crea una lista de la base de datos


                    textBox1.Clear();
                    comboBox1.ResetText();
                    textBox4.Clear();
                    comboBox2.ResetText();
                    textBox6.Clear();
                    comboBox3.ResetText();

                    //dataGridView1.DataSource = lista; //Se muestra la lista


                    sesion.Close();
                }
                //Esto se ejecuta si la funcion es modificar
                else if (funcion == 2)
                {
                    Vaca a = new Vaca();
                    a.caravana = Convert.ToInt32(textBox1.Text);
                    a.Nacimiento1 = Convert.ToDateTime(dateTimePicker1.Text);
                    a.Est_rep1 = Convert.ToString(comboBox1.Text);
                    a.Cron_d1 = Convert.ToString(textBox4.Text);
                    a.Cond_c1 = Convert.ToString(comboBox2.Text);
                    a.Cant_p1 = Convert.ToString(textBox6.Text);
                    a.Categoria1 = Convert.ToString(comboBox3.Text);

                    sesion = sesiones.OpenSession();

                    sesion.Update(a);
                    sesion.Flush();

                    MessageBox.Show("Se guardaron los cambios correctamente");

                    sesion.Close();

                    textBox1.Clear();
                    comboBox1.ResetText();
                    textBox4.Clear();
                    comboBox2.ResetText();
                    textBox6.Clear();
                    comboBox3.ResetText();
                }

    martes, 19 de septiembre de 2017 13:51

Respuestas

  • Vale, 

    Personalmente creo que el tema de las inserciones en el historico es mejor hacerlas con triggers (la aplicación ni se entera), de tal modo que te aseguras que se ejecute y no te tienes que preocupar de recuperar datos.

    Supongamos que tu tabla "Vaca" consta de 3 columnas, IDvacas, Marca, Peso, y tu table "historico" tiene otras 4, idhistorico, idvaca, fechaCambio,tipocambio.

    Para registrar el historico del insert, creas un trigger AfterInsert en la tabla "vaca" con lo siguiente

    CREATE DEFINER=`kabestrus`@`%` TRIGGER `entity`.`vacas_AFTER_INSERT` AFTER INSERT ON `vacas` FOR EACH ROW
    BEGIN
        declare lastID integer;
        Select max(idvacas) into lastID from vacas;
        insert into historico (idvaca, fechacambio,tipocambio) value (lastID, now(),'Insert');
    END



    Con ese trigger, vas a conseguir que cuando hagas un insert, se añada un registro a la tabla historico por cada row que insertes en la tabla vaca.

    Ahora, vamos al update,

    CREATE DEFINER=`turrado`@`%` TRIGGER `entity`.`vacas_AFTER_UPDATE` AFTER UPDATE ON `vacas` FOR EACH ROW
    BEGIN
        insert into historico (idvaca, fechacambio,tipocambio) value (new.idvacas, now(),'Update');
    END

    después de unos ciclos de insertar y actualizar, si hacemos un select a la tabla historicos, podemos ver algo asi

    Esto es una pequeña guía de como hacer, tendrás que adaptar las tablas y las columnas de los triggers a las necesidades de tu proyecto

    Coméntanos si tienes más dudas al respecto.

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!




    martes, 19 de septiembre de 2017 14:50

Todas las respuestas

  • Buenas,

    Por lo que entiendo, quieres que cuando se haga algún cambio, estos cambios se registren en un tabla historial no?

    Algún cambio se considera solo el update, o el insert también lo consideramos cambio?

    Pregunto esto porque tal vez, lo más fácil sea que crees un trigger en la tabla vaca, el cual haga el insert correspondiente a la tabla historial, en caso de que solo quieras añadir los cambios al historial (y no los nuevos registros), pondrías un trigger AfterUpdate, en caso de que quieras los dos, AfterInsert y AfterUpdate.

    Que motor de DB estas utilizando?

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    martes, 19 de septiembre de 2017 14:11
  • lo que quiero hacer es al guardar un nuevo animal se guarde en ambos y cuando se realiza una moficacion que quede guardado en animal con los datos anteriores y se cree una nueva fila con los datos nuevo esto en la tabla historial y en la tabla vaca solo se modique arriba de los datos anteriore

    estoy usando mysql queri brouser con php myadmin

    el problema es que cuando nos dieron programacion solo nos dieron lo basico por eso estoy recurriendo a estas fueste

    tu tambien vota
    martes, 19 de septiembre de 2017 14:20
  • Vale, 

    Personalmente creo que el tema de las inserciones en el historico es mejor hacerlas con triggers (la aplicación ni se entera), de tal modo que te aseguras que se ejecute y no te tienes que preocupar de recuperar datos.

    Supongamos que tu tabla "Vaca" consta de 3 columnas, IDvacas, Marca, Peso, y tu table "historico" tiene otras 4, idhistorico, idvaca, fechaCambio,tipocambio.

    Para registrar el historico del insert, creas un trigger AfterInsert en la tabla "vaca" con lo siguiente

    CREATE DEFINER=`kabestrus`@`%` TRIGGER `entity`.`vacas_AFTER_INSERT` AFTER INSERT ON `vacas` FOR EACH ROW
    BEGIN
        declare lastID integer;
        Select max(idvacas) into lastID from vacas;
        insert into historico (idvaca, fechacambio,tipocambio) value (lastID, now(),'Insert');
    END



    Con ese trigger, vas a conseguir que cuando hagas un insert, se añada un registro a la tabla historico por cada row que insertes en la tabla vaca.

    Ahora, vamos al update,

    CREATE DEFINER=`turrado`@`%` TRIGGER `entity`.`vacas_AFTER_UPDATE` AFTER UPDATE ON `vacas` FOR EACH ROW
    BEGIN
        insert into historico (idvaca, fechacambio,tipocambio) value (new.idvacas, now(),'Update');
    END

    después de unos ciclos de insertar y actualizar, si hacemos un select a la tabla historicos, podemos ver algo asi

    Esto es una pequeña guía de como hacer, tendrás que adaptar las tablas y las columnas de los triggers a las necesidades de tu proyecto

    Coméntanos si tienes más dudas al respecto.

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!




    martes, 19 de septiembre de 2017 14:50
  • mira tuve una idea de hacer para que se guarde pero no me salio tu me puedes decir donde lo coloco a lo que vos me pasaste en el codigo que yo pase al comienzo gracias y si tienes correo me encantaria poder hablar por ahi te dejo el mio 
    martes, 19 de septiembre de 2017 19:25
  • Buenas, 

    En primer lugar,  no te recomiendo poner datos de contacto en un foro público, nunca sabes quien lo va a leer. Misma razón por la que personalmente,  no envío ni facilito mis datos de contacto, lo siento. 

    Por otro lado,  si usas phpmyadmin, para añadir trigger, te dejo esta guía

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    martes, 19 de septiembre de 2017 19:49
  • me gustaria poder mostrarte mi tesis y que me des una idea

    martes, 19 de septiembre de 2017 20:58
  • Puedes subirla a algun sitio? dropbox? mega? wetransfer? o a algun sitio en general?

    Yo me lo descargo de ahi y te comento algo.

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    martes, 19 de septiembre de 2017 21:06