Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

¿Como insertar datos en 2 o 3 tablas al mismo tiempo??

Estas en el tema de ¿Como insertar datos en 2 o 3 tablas al mismo tiempo?? en el foro de Visual Basic clásico en Foros del Web. Hola amigos , eh estado rompiendome la cabeza itentando y a lo máximo fue a nada xq el visual se me vuelve loco y me ...
  #1 (permalink)  
Antiguo 24/11/2010, 23:41
 
Fecha de Ingreso: junio-2008
Mensajes: 58
Antigüedad: 15 años, 10 meses
Puntos: 0
¿Como insertar datos en 2 o 3 tablas al mismo tiempo??

Hola amigos , eh estado rompiendome la cabeza itentando y a lo máximo fue a nada xq el visual se me vuelve loco y me tira errores por doquier...

A lo que quiero llegar es a lo siguiente.

Mi botón guardar hace ésto:

Código:
Command4_Click
Call Asignar_Datos
rs1.Update
MsgBox " Registro guardado", vbInformation, "Grabar"
Command4.Enabled = False
End Sub
Mi asignar datos hace ésto:

Código:
Private Sub Asignar_Datos() 
With rs1
If rs1.State = 1 Then rs1.Close
rs1.Open "select * from alumnos", cn, adOpenDynamic, adLockOptimistic

rs1.AddNew
rs1("dni") = dni.Text
rs1("fecha matr") = Mfecha.Text
rs1("apellido") = ape.Text
rs1("nombre") = nom.Text
.......
end with
end sub
Me guarda perfecto , todo en la tabla de Alumnos...y los campos de "dni, fecha_matr, apellido, nombre"

Bien lo que ahora quiero hacer es lo siguiente:


Quiero que se me guarde ése dni , en las tablas llamadas --> libretas , y matriculas....

Como debo hacerlo??

....
Intente haciendo despues del end with del primer rs1


Código:
rs2.Open "Insert into libretas (dni) values ('dni') 
select * from alumnos", cn, adOpenDynamic, adLockOptimistic
rs2.AddNew
rs2("dni") = dni
Ya vi la mayoría de tutoriales en internet, y llegue a la conclusión de ponerlo de esa forma...pero no pasa nada... Alguien tiene alguna idea..para aportarme??

Muchas gracias desde ya!
  #2 (permalink)  
Antiguo 25/11/2010, 04:07
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: ¿Como insertar datos en 2 o 3 tablas al mismo tiempo??

Hola

Para hacer una insert directamente en una tabla no tienes que utilizar el recordset, tienes que hacerlo directamente con la conexión a la bd, algo como:

Código:
Dim bdmail As New ADODB.Connection

bd.Open .... (cadena conex)

bd.execute "Insert into libretas(dni) values('" & dni.text & "')"
La cadena de conexión depende de la bd utilizada.

--Saludos--
  #3 (permalink)  
Antiguo 25/11/2010, 08:44
 
Fecha de Ingreso: junio-2008
Mensajes: 58
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: ¿Como insertar datos en 2 o 3 tablas al mismo tiempo??

Bien al hacer lo que usted me dice me sale éste error:



en



Y lo raro es que las relaciones las tengo de ésta manera:



Que supuestamente está bien...
  #4 (permalink)  
Antiguo 25/11/2010, 20:53
 
Fecha de Ingreso: junio-2008
Mensajes: 58
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: ¿Como insertar datos en 2 o 3 tablas al mismo tiempo??

Alguien más desea ayudarme??... :((
  #5 (permalink)  
Antiguo 25/11/2010, 23:22
Avatar de Gakex  
Fecha de Ingreso: enero-2009
Mensajes: 137
Antigüedad: 15 años, 3 meses
Puntos: 4
Respuesta: ¿Como insertar datos en 2 o 3 tablas al mismo tiempo??

Antes de abrir otro recorset tienes que cerrar el que ya usaste.

En tu proyecto haces tres operaciones a la base de datos en un solo procedimiento, es decir guardas un registro en tres tablas diferentes al mismo tiempo, pero para eso abres el recorset a la primera y ya que terminaste lo cierras con rs1.close, esto debe ser para cada peracion, es lo que veo que te falto.
  #6 (permalink)  
Antiguo 26/11/2010, 02:18
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: ¿Como insertar datos en 2 o 3 tablas al mismo tiempo??

Hola

Tienes introducido el campo dni en la tabla alumnos antes de introducirla en libretas?

De todas formas (no se si realmente influye) no mezclaría formas de introducir datos, es decir, realizaría todas las inserciones de datos (por lo menos en este apartado) utilizando la clausula insert. Algo como:

Código:
bd.execute "INSERT INTO alumnos(dni, fecha matr, apellido, nombre) VALUES('" & dni.text & "','" & fecha matri.text & ...
bd.execute "INSERT INTO libretas(dni) VALUES('" & dni.text & "')"
.
P.D. Ahora que lo pienso, igual tienes que refrescar el recordset antes de realizar el segundo insert, de todas formas prueba a realizar todos los inserts sin el recordset.

--Saludos--
  #7 (permalink)  
Antiguo 26/11/2010, 09:06
 
Fecha de Ingreso: junio-2008
Mensajes: 58
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: ¿Como insertar datos en 2 o 3 tablas al mismo tiempo??

Cita:
Iniciado por Insomnia Ver Mensaje
Hola

Tienes introducido el campo dni en la tabla alumnos antes de introducirla en libretas?

De todas formas (no se si realmente influye) no mezclaría formas de introducir datos, es decir, realizaría todas las inserciones de datos (por lo menos en este apartado) utilizando la clausula insert. Algo como:

Código:
bd.execute "INSERT INTO alumnos(dni, fecha matr, apellido, nombre) VALUES('" & dni.text & "','" & fecha matri.text & ...
bd.execute "INSERT INTO libretas(dni) VALUES('" & dni.text & "')"
.
P.D. Ahora que lo pienso, igual tienes que refrescar el recordset antes de realizar el segundo insert, de todas formas prueba a realizar todos los inserts sin el recordset.

--Saludos--
Ya tengo introducidos los campos "dni" y "DNI" en alumnos y libretas...

Sabes por q no puse el primer insert en la tabla alumnos de esa forma, por q tengo varios checks y options , donde voy guardando valores con "IF = 1 then ..." EJEMPLO:

Código:
If Document4 = 1 Then
rs1("acta_nac") = "Ya presentó"
Else
rs1("acta_nac") = "No presentó"
End If
Yo voy a poder guardar 1 solo value "Presentó"...y el otro ya nó...O hay alguna forma de hacerlo?

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

Para que se den una idea éste es mi botón de guardar sin usar insert, y usando recordset (rs1):


Código:
With rs1
If rs1.State = 1 Then rs1.Close
rs1.Open "select * from alumnos", cn, adOpenDynamic, adLockOptimistic

rs1.AddNew
rs1("dni") = dni.Text
rs1("fecha matr") = Mfecha.Text
rs1("apellido") = ape.Text
rs1("nombre") = nom.Text

If Sex1.Value = True Then
rs1("sexo") = "masculino"
End If
If Sex2.Value = True Then
rs1("sexo") = "femenino"
End If

rs1("fecha nac") = Nd.Text & "/" & Nm.Text & "/" & Na.Text
rs1("id_localidades") = id_loc.Text

rs1("nacionalidad") = Nacion.Text
rs1("id_establecimiento") = id_esc.Text

rs1("monto_libre") = Text2.Text
rs1("monto_coop") = monto.Text


If Document1 = 1 Then
rs1("foto_titulo") = "Ya presentó"
Else
rs1("foto_titulo") = "No presentó"
End If


If Document2 = 1 Then
rs1("foto_dni") = "Ya presentó"
Else
rs1("foto_dni") = "No presentó"
End If

If Document3 = 1 Then
rs1("foto_perfil") = "Ya presentó"
Else
rs1("foto_perfil") = "No presentó"
End If

If Document4 = 1 Then
rs1("acta_nac") = "Ya presentó"
Else
rs1("acta_nac") = "No presentó"
End If

Dim status As String
If Document1.Value = 1 And Document2.Value = 1 And Document3.Value = 1 And Document4.Value = 1 Then
status = "si"
Else
status = "no"
End If

rs1("status") = status

If titu.Value = True Then
rs1("id_titulo") = "1"
End If

If consta.Value = True Then
rs1("id_titulo") = "2"
End If

If adeu.Value = True Then
rs1("id_titulo") = "3"
End If

End With
Ahora , le agrego lo que uds me dicen....con otro recordset :


Código:
rs1.Close
rs2.Open "INSERT INTO libretas(dni) VALUES('" & dni.Text & "')"
rs2.AddNew
rs2("DNI") = dni.Text
rs2.Update
rs2.Close

Y me salta error en rs1.close

me dice " La operación no está permitida en éste contexto."

Muchas gracias por intentar ayudar !!

Última edición por gohanjaja; 26/11/2010 a las 09:18
  #8 (permalink)  
Antiguo 27/11/2010, 02:44
Avatar de Gakex  
Fecha de Ingreso: enero-2009
Mensajes: 137
Antigüedad: 15 años, 3 meses
Puntos: 4
Respuesta: ¿Como insertar datos en 2 o 3 tablas al mismo tiempo??

creo que porque despues de cerrar el rs1 haces otra operacion con el en otro contexto que es el del boton que llamas "guardar"

Cita:
Command4_Click
Call Asignar_Datos
rs1.Update
MsgBox " Registro guardado", vbInformation, "Grabar"
Command4.Enabled = False
End Sub
es decir primero llamas a la funcion Asignar_Datos y ahi, al final, imagino que pones el rs1.close, pero si te fijas al terminar el contexto de la funcion haces uso del rs1 con rs1.Update, trata de hacerlo todo en un solo procedimiento y paso por paso.
si es que sirbe de algo hay una forma de escapar de los errores
tienes que utilizar:

"On Error resume next"

antes de donde ocurre el error, o al inicio de todo,
  #9 (permalink)  
Antiguo 27/11/2010, 08:22
 
Fecha de Ingreso: junio-2008
Mensajes: 58
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: ¿Como insertar datos en 2 o 3 tablas al mismo tiempo??

Cita:
Iniciado por Gakex Ver Mensaje
creo que porque despues de cerrar el rs1 haces otra operacion con el en otro contexto que es el del boton que llamas "guardar"



es decir primero llamas a la funcion Asignar_Datos y ahi, al final, imagino que pones el rs1.close, pero si te fijas al terminar el contexto de la funcion haces uso del rs1 con rs1.Update, trata de hacerlo todo en un solo procedimiento y paso por paso.
si es que sirbe de algo hay una forma de escapar de los errores
tienes que utilizar:

"On Error resume next"

antes de donde ocurre el error, o al inicio de todo,
Ya resolvi el problema, antes de leer tu mensaje, y solo puedo decirte q tenias razón.
Mi código estaba perfecto , solamente que estaba haciendo el update en el envento y no el botón jajaja..por eso no me guardaba los datos y me marcaba error de tablas relacionadas.
Ya lo solucioné!!!
Mil gracias a todos x la ayuda !!

Un abrazo!

Última edición por gohanjaja; 27/11/2010 a las 08:43

Etiquetas: tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:34.