none
ingreso de una clave primaria en otra tabla RRS feed

  • Pregunta

  • Estimados amigos...

    tengo una gran duda..

    tengo :

    2 tablas en la bd

    tabla 1 = codrev_datosprueba. esta tabla tiene un PK llamado codrev (int auto incrementable)

    tabla 2 = respuestasalumnos. esta tabla tiene un valor llamado codrev(int)

    y 1 consulta con 2 metodos que me ingresa datos a estas 2 tablas.

      Public Sub EnviaDatosPrueba()
            'conectar a BD remota y cargar datos
            Dim i As Integer
            Dim nal As Integer
            Dim sCnn As New MySqlConnection("server=localhost;database=BDResultados;user id=root;password=0p3r4d0r;port=3306")
    
            NumPreg = Me.NumericUpDown1.Value
            If sCnn.State = ConnectionState.Closed Then sCnn.Open()
            nal = DatosPruebaOMR.NumeroAlumnos
            'Para eliminar datos
            'Dim cmd1 As New MySqlCommand("Delete From RespuestasAlumnos Where CodRev = '1'", sCnn)
            'cmd1.ExecuteNonQuery()
    
            Dim cmd As New MySqlCommand("Insert into CodRev_DatosPrueba  (IdColegio, IdCurso, IdAsignatura, IdProfesor, NPreguntas, NAlumnos, FechaIngreso, Estado) values (@IdColegio, @IdCurso, @IdAsignatura, @IdProfesor, @NPreguntas, @NAlumnos, @FechaIngreso, @Estado) ", sCnn)
    
            Try
                cmd.CommandType = CommandType.Text
                cmd.Parameters.AddWithValue("@IdColegio", DatosPrueba.IdColegio)
                cmd.Parameters.AddWithValue("@IdCurso", DatosPrueba.Id_Curso)
                cmd.Parameters.AddWithValue("@IdAsignatura", DatosPrueba.Id_Asignatura)
                cmd.Parameters.AddWithValue("@IdProfesor", DatosPrueba.Id_Profesor)
                cmd.Parameters.AddWithValue("@NPreguntas", DatosPrueba.NumeroPreguntas)
                cmd.Parameters.AddWithValue("@NAlumnos", DatosPruebaOMR.NumeroAlumnos)
                cmd.Parameters.AddWithValue("@FechaIngreso", DatosPrueba.FechaIngreso)
                cmd.Parameters.AddWithValue("@Estado", 1)
                cmd.ExecuteNonQuery()
    
            Catch ex As Exception
                MsgBox("Error: " & ex.Message)
            End Try
    
        End Sub

    entonces en esta consulta se tiene que ingresar el codrev de la otra tabla.

    Public Sub EnviaDatosAlumnos()
            'conectar a BD remota y cargar datos
            Dim i As Integer
            Dim sCnn As New MySqlConnection("server=localhost;database=BDResultados;user id=root;password=0p3r4d0r;port=3306")
            NumPreg = Me.NumericUpDown1.Value
            If sCnn.State = ConnectionState.Closed Then sCnn.Open()
    
            With Me.PB_viared
                .Visible = True
                .Maximum = Me.GridHojasProcesadas.RowCount * NumPreg
            End With
    
            Dim countpb As Integer = 0
            For na = 1 To Me.GridHojasProcesadas.RowCount
    
    
                For i = 1 To NumPreg
                    countpb += 1
                    Me.PB_viared.Value = countpb
    
                    Dim cmd As New MySqlCommand("Insert into RespuestasAlumnos (CodRev, Rut, NumeroPregunta, Alternativa) values (@CodRev, @Rut, @NumeroPregunta, @Alternativa)", sCnn)
    
                    Try
                        cmd.CommandType = CommandType.Text
                        'cmd.Parameters.AddWithValue("@CodRev", ) 'aca esta el problema.
                        cmd.Parameters.AddWithValue("@Rut", Alumno(na).Rut)
                        cmd.Parameters.AddWithValue("@NumeroPregunta", i)
                        cmd.Parameters.AddWithValue("@Alternativa", Alumno(na).AlterMarcada(i))
                        cmd.ExecuteNonQuery()
    
                    Catch ex As Exception
                        MsgBox("Error: " & ex.Message)
                    End Try
                Next
            Next
            Me.PB_viared.Visible = False
    
        End Sub

    de ante mano muchas gracias.


    Mario Valderrama

    Ingeniero De Ejecucion En Informatica

    Santiago, Chile

    ----------------------------------------

    Si mi respuesta te parecio util, has click en proponer como respuesta y/o dar un boto como respuesta util.

    miércoles, 10 de abril de 2013 21:05

Todas las respuestas

  • hola

    para tomar el id que se genera al insertar debes usar

    SELECT LAST_INSERT_ID();

    aqui respondo sobre el mismo tema

    http://social.msdn.microsoft.com/Forums/en-US/vcses/thread/f0689e4f-469c-4891-9315-5ca86331dab1

    une las dos queries y utiliza el ExecuteScalar() pata tomar el id generado

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina



    miércoles, 10 de abril de 2013 21:10
  • leandro.

    agradesco mucho tu ayuda.. . pero no entendi lo que tendria que hacer..

    saludos.


    Mario Valderrama

    Ingeniero De Ejecucion En Informatica

    Santiago, Chile

    ----------------------------------------

    Si mi respuesta te parecio util, has click en proponer como respuesta y/o dar un boto como respuesta util.

    miércoles, 10 de abril de 2013 21:27
  • leandro.

    agradesco mucho tu ayuda.. . pero no entendi lo que tendria que hacer..

    saludos.


    Mario Valderrama

    Ingeniero De Ejecucion En Informatica

    Santiago, Chile

    ----------------------------------------

    Si mi respuesta te parecio util, has click en proponer como respuesta y/o dar un boto como respuesta util.

    miércoles, 10 de abril de 2013 23:26
  • no querias recuperar el id que se genera por medio del campo identity ? bueno si es asi lo recuperas ejecutando el

    SELECT LAST_INSERT_ID();

    el cual lo haces despues del insert

    ---

    Dim query As String ="Insert into CodRev_DatosPrueba  (IdColegio, IdCurso, IdAsignatura, IdProfesor, NPreguntas, NAlumnos, FechaIngreso, Estado) values (@IdColegio, @IdCurso, @IdAsignatura, @IdProfesor, @NPreguntas, @NAlumnos, @FechaIngreso, @Estado); SELECT LAST_INSERT_ID(); "
    
     Dim cmd As New MySqlCommand(query , sCnn)
    
    'aqui parametros
    
    Dim id As Integer = CInt(cmd.ExecuteScalar())


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 11 de abril de 2013 0:25
  • Leandro..

    pero el codrev que quiero ingresar es en la otra tabla..


    Mario Valderrama

    Ingeniero De Ejecucion En Informatica

    Santiago, Chile

    ----------------------------------------

    Si mi respuesta te parecio util, has click en proponer como respuesta y/o dar un boto como respuesta util.

    jueves, 11 de abril de 2013 1:23
  • claro

    tieens que recuperar el id aqui dentro EnviaDatosPrueba() devolverlo como respeusta y luego pasarselo a  EnviaDatosAlumnos() para que lo use en el parametro


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 11 de abril de 2013 1:42
  • Leandro..

    de ser asi como lo devuelvo como respuesta para pasárselo al otro método??

    saludos.


    Mario Valderrama

    Ingeniero De Ejecucion En Informatica

    Santiago, Chile

    ----------------------------------------

    Si mi respuesta te parecio util, has click en proponer como respuesta y/o dar un boto como respuesta util.

    jueves, 11 de abril de 2013 17:43
  • de ser asi como lo devuelvo como respuesta para pasárselo al otro método??

    tienes que definir un Function, o sea

    Public Function EnviaDatosPrueba() As Integer

        'aqui codigo

       Return valor

    End Function


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 11 de abril de 2013 18:41
  • Leandro..

    en resumen.. parece que no me explique bien.

    tengo 2 Métodos que envían información a la BD

    EnviaDatosPrueba()

    que almacena todos sus datos.

    tiene un id llamado codrev que es un integer autoincrementable.

    y en este otro metodo (EnviaDatosAlumnos()) que tambien envia datos a la bd

    tiene que llevar el Id que esta en el otro metodo.

    por lo que tu me explica anteriormente tengo que utilizar Select last_insert_id() en el primer metodo(EnviaDatosPrueba).

    y mi gran duda es como llamar a ese id desde el otro metodo(EnviaDatosAlumnos())

    saludos y disculpa mi torpeza. 


    Mario Valderrama

    Ingeniero De Ejecucion En Informatica

    Santiago, Chile

    ----------------------------------------

    Si mi respuesta te parecio util, has click en proponer como respuesta y/o dar un boto como respuesta util.

    jueves, 11 de abril de 2013 21:15
  • te explciaste perfecto y es justamente eso que menciono lo que debes hacer

    desde EnviaDatosPrueba() insertas y devuelves el valor definiendo una function

    en el otro metodo recibes el dato por parametro y lo usas en la query para relacionar los registros

    es tal cual lo explique

    por lo que tu me explica anteriormente tengo que utilizar Select last_insert_id() en el primer metodo(EnviaDatosPrueba).

    exacto

    y mi gran duda es como llamar a ese id desde el otro metodo(EnviaDatosAlumnos())

    usarias

    Dim id As integer = EnviaDatosPrueba()

    EnviaDatosAlumnos(id)

    en el metodo  EnviaDatosAlumnos define un parametro para tomar el valor que le asignas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    jueves, 11 de abril de 2013 21:20
  • Leandro..

    seria algo asi ??.. 

     Dim cmd As New MySqlCommand("Insert into RespuestasAlumnos (CodRev, Rut, NumeroPregunta, Alternativa) values (@CodRev, @Rut, @NumeroPregunta, @Alternativa)", sCnn)
                    Dim id As Integer = EnviaDatosPrueba()
                    Try
                        cmd.CommandType = CommandType.Text
                        cmd.Parameters.AddWithValue("@CodRev", id)
                        cmd.Parameters.AddWithValue("@Rut", Alumno(na).Rut)
                        cmd.Parameters.AddWithValue("@NumeroPregunta", i)
                        cmd.Parameters.AddWithValue("@Alternativa", Alumno(na).AlterMarcada(i))
                        cmd.ExecuteNonQuery()
    
                    Catch ex As Exception
                        MsgBox("Error: " & ex.Message)
                    End Try


    Mario Valderrama

    Ingeniero De Ejecucion En Informatica

    Santiago, Chile

    ----------------------------------------

    Si mi respuesta te parecio util, has click en proponer como respuesta y/o dar un boto como respuesta util.

    viernes, 12 de abril de 2013 20:46
  •  me parece que no

    seria

    Dim id As Integer = EnviaDatosPrueba()

    EnviaDatosAlumnos(id)

    despues deberias hacer

    Public Sub EnviaDatosAlumnos(id as Integer)

    'resto del codigo

      cmd.Parameters.AddWithValue("@CodRev", id)

    End Sub


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 12 de abril de 2013 21:20