none
enviar las llaves foraneas al momento de hacer el registro RRS feed

  • Pregunta

  • hola !ayuda! !help! porfavor tengo una duda, 

    tengo 10 tablas y las 10 tablas tienen  llaves foráneas, hago el registro de las 10 tablas desde un mismo formulario , lo  que quiero es que al momento del registro se envíen las llaves foráneas a una tabla..

    donde con base a esa tabla tengo que aser una consulta para poder modificar

     

    este es el scrip de mi base de datos

    create table personal(
    curp varchar(18) not null,
    nombre char(35) not null,
    area char(35) not null,
    cargo char(35) not null,
    primary key(curp));

    create table usuario(
    iduser int auto_increment not null,
    usuario char(50) not null,
    password varchar(8) not null,
    curp varchar(18) not null,
    primary key(iduser),
    foreign key(curp) references personal(curp))engine=innodb;

    create table cpu_laptop(
    marca char(24) null,
    modelo varchar(50) not null,
    serien varchar(30) not null,
    namepc varchar(50) not null,
    maceth varchar(40) null,
    macwifi varchar(30) null,
    primary key(serien));


    create table printer(
    marca_printer char(24) null,
    modelo_printer varchar(50) not null,
    serien_printer  varchar(30) not null,
    maceth_printer varchar(40) null,
    macwifi_printer varchar(30) null,
    primary key(serien_printer));


    create table accesorios(
    idacces int auto_increment not null,
    descripcion varchar(600) not null,
    primary key(idacces));


    create table monitor_smartTv(
    marca_monitor char(24) null,
    modelo_monitor varchar(50) not null,
    serien_monitor varchar(30) not null,
    maceth_monitor varchar(40) null,
    macwifi_monitor varchar(30) null,
    primary key(serien_monitor));


    create table teclado(
    marca_teclado char(24) null,
    modelo_teclado varchar(50) not null,
    serien_teclado varchar(30) not null,
    primary key(serien_teclado));


    create table mouse(
    marca_mouse char(24) null,
    modelo_mouse varchar(50) not null,
    serien_mouse varchar(30) not null,
    primary key(serien_mouse));


    create table celular(
    marca_celular char(24) null,
    modelo_celular varchar(50) not null,
    serien_celular varchar(30) not null,
    macwifi_celular varchar(30) null,
    nombre_celular varchar(50) not null,
    primary key(serien_celular));

    create table telefono(
    marca_telefono char(24) null,
    modelo_telefono varchar(50) not null,
    serien_telefono varchar(30) not null,
    extencion_telefono int null,
    primary key(serien_telefono));

    //esta es la tabla donde quiero que se envie las llaves foraneas

    create table asignacion(
    idasigna int auto_increment not null,
    fecha date not null,
    curpuser varchar(18) not null,
    seriecpulap varchar(30) not null,
    seriepantalla varchar(30) not null,
    serieteclado varchar(30) not null,
    seriemouse varchar(30) not null,
    serieprinter varchar(30) not null,
    seriecel varchar(30) not null,
    serietel varchar(30) not null,
    idacces int not null,
    status char not null,
    primary key(idasigna),
    foreign key(curpuser) references personal(curp),
    foreign key(seriecpulap) references cpu_laptop(serien),
    foreign key(seriepantalla) references monitor_smartTv(serien_monitor),
    foreign key(serieteclado) references teclado(serien_teclado),
    foreign key(seriemouse) references mouse(serien_mouse),
    foreign key(serieprinter) references printer(serien_printer),
    foreign key(seriecel) references celular(serien_celular),
    foreign key(serietel) references telefono(serien_telefono),
    foreign key(idacces) references accesorios(idacces))engine=innodb;



    viernes, 7 de julio de 2017 17:04

Todas las respuestas

  • Lo que necesitas por ahora es solo registrar? las 10 tabla en 1  o solo la asignacion ?

    viernes, 7 de julio de 2017 17:29
  • necesito registrar y enviar las foreign keys.. envio los datos a sus tablas correspondientes
    viernes, 7 de julio de 2017 18:04
  • necesito registrar y enviar las foreign keys.. envio los datos a sus tablas correspondientes

    Pero si te das cuenta tus variables son not null, no permitirian hacer lo que dices . En cambio si vas a registrar todos los campos tendrias que hacerlo por hilos creo yo.

    viernes, 7 de julio de 2017 20:00
  •  create PROCEDURE insPrueba
        @curpuser  char(30) ,
        @seriecpulap   char(30) ,
        @seriepantalla char(30)
    	//ect....
    AS
    /* aqui agregar los demas inserts y manejarlos dentro de transacciones en caso de errores*/
    INSERT  INTO asignacion
            ( curpuser ,
              seriecpulap ,
              seriepantalla
            )
    VALUES  ( @curpuser ,
              @seriecpulap ,
              @seriepantalla
            );

    Por lo que pude entender tus pks las cargas de forma manual y no con un auto_increment identity lo que te propongo seria crear un sp que realice las 10 inserciones y la ultima que es la de asignacion le pasas los mismos parametros que en los inserts anteriores ya que tienes los datos.

    Espero te sirva.

    Saludos.



    • Editado osrol miércoles, 12 de julio de 2017 22:06
    viernes, 7 de julio de 2017 20:47
  • gracias lo intentare

    viernes, 7 de julio de 2017 22:51
  • y en español eso significa jajaja, disculpa es k ando muy novato con eso
    martes, 11 de julio de 2017 23:12
  • create PROCEDURE insPrueba
        @curp  varchar(18) , --variable que recibe codigo o pk para personal
        @nombre char(35) ,
        @area char(35),
        @cargo char(35),
        @marca char(24),
        @modelo varchar(50),
        @serien varchar(30),--variable que recibe codigo o pk para cpu_laptop
        @namepc varchar(50),
        @maceth varchar(40),
        @macwifi varchar(30)
    	--etc ya solo falta agregar las variables para las demas tablas
    	
    AS
    		    BEGIN
            BEGIN TRY
    		
    		INSERT  INTO personal
            ( curp,
              nombre,
              area,
    	  cargo
    
            )
    VALUES  ( @curp ,---este codigo o pk que asignas al personal lo utilizaras para la asignacion la misma variable 
              @nombre ,
              @area,
    	  @cargo
            );
    
    	INSERT  INTO cpu_laptop
            ( marca,
              modelo,
              serien,
    	  namepc,
    	  maceth,
    	  macwifi
            )
    VALUES  ( @marca ,
              @modelo ,
              @serien,---este codigo o pk que asignas al cpu_laptop lo utilizaras para la asignacion seria la misma variable 
    	  @namepc,
    	  @maceth,
    	  @macwifi
            );
    
    --ya solo falta agregar los demas insert
    
    	INSERT  INTO asignacion
            ( curpuser ,
              seriecpulap ,
             --etc
            )
    VALUES  ( @curp ,-- esta es la variable que contiene el codigo de personal
              @serien,-- esta es la variable que contiene el codigo de cpu_lapto
              --etc ya solo falta agregar las demas variables de los codigos
            );
    
    		 COMMIT TRANSACTION;
            END TRY
            BEGIN CATCH
          ROLLBACK TRANSACTION;
                DECLARE @ErrorMensaje NVARCHAR(4000);
                SELECT  @ErrorMensaje = ERROR_MESSAGE();
                RAISERROR (@ErrorMensaje,16,1);
            END CATCH;	
        END;

    Te recomiendo que leas sobre los procedimientos de almacenados si es que aun no tienes experiencia en su uso https://technet.microsoft.com/es-es/library/ms190669(v=sql.105).aspx

    y como ejecutar el procedimiento de almacenado desde c# 

    https://social.msdn.microsoft.com/Forums/es-ES/7a4fe0d6-3e1c-448f-8b44-317fbb932d2b/ejecutar-procedimiento-almacenado-en-c?forum=vcses

    Espero te ayude.

    Saludos.


    • Editado osrol miércoles, 12 de julio de 2017 22:07
    miércoles, 12 de julio de 2017 22:06