Usuario
ingreso de una clave primaria en otra tabla

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.
- Cambiado Enrique M. Montejo lunes, 22 de abril de 2013 17:20 Acceso a datos
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
- Editado Leandro TuttiniMVP 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.
-
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.
-
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 -
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.
-
-
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.
-
-
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.
-
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- Editado Leandro TuttiniMVP jueves, 11 de abril de 2013 21:22
-
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.
-
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