Problema con tabla maestra y tabla detalle

Hola experto, antes que nada disculpas por molestarte nuevamente y saludarte, mi consulta es la siguiente:

Tengo dos tablas una llamada Pedidos (nro_pedido, mes,año,proveedor) y otra con Detalles_Pedido (nro_renglon,nro_pedido,producto,cantidad). Resulta que cuando cargo un pedido por primera vez (sin datos las tablas) lo hace perfecto, pero a partir de la segunda para delante me realzia las cargas en el programa pero en la base so me llena los datos de la tabla Detalles_Pedido y en la tabla Maestra solo esta el nro_pedido que es autonumérico, no entiendo porque se llena la tabla detalle y la tabla maestra no.

Mi código:

Private Sub Form_Load()
Call conectar
Call llenarcombo(Combo2, "Proveedor", 0)
If rspedido.State = 1 Then rspedido.Close
If rsdetalle.State = 1 Then rsdetalle.Close
sql1 = "select * from Pedidos"
rspedido.Open sql1, con, adOpenStatic, adLockOptimistic
sql = "select * from Detalle_pedido"
rsdetalle.Open sql, con, adOpenStatic, adLockOptimistic

End sub

Para el botón de cargar el pedido:

Private Sub XPButton3_Click()
If List1.ListCount > 0 And List2.ListCount > 0 Then
If rspedido.BOF = False And rspedido.EOF = False Then
rspedido.MoveFirst
End If
Call llenardatos
MsgBox "Pedido cargado", vbInformation, "Pedido cargado"
List1.Clear
List2.Clear
limpiar frmPedidosProveedor
Frame2.Enabled = False
Frame1.Enabled = False
Else
MsgBox "Introduzca productos a la lista", vbInformation, "Lista vacía"
End If
End Sub

Procedimiento para llenar datos y actualizar los recordset

Private Sub llenardatos()
'rspedido(0) = Text1
rspedido(2) = Combo1
rspedido(1) = Combo2
rspedido(3) = Text5
rspedido(4) = Text2
rspedido.Update
For i = 0 To List1.ListCount - 1
rsdetalle.AddNew
rsdetalle(1) = Text1
rsdetalle(2) = List1.List(i)
rsdetalle(3) = List2.List(i)
rsdetalle.Update
Next i
End Sub

No entiendo porque porque al primer registro lo hace perfecto y luego solo carga datos en la tabla detalles_pedido solamente, gracias y mil disculpas por las molestias!!!

1 respuesta

Respuesta
1

En esta parte del código:

...

rspedido(3) = Text5
rspedido(4) = Text2
rspedido.Update

Falta algo, debe ser así:

rspedido.AddNew

'rspedido(0) = Text1
rspedido(2) = Combo1
rspedido(1) = Combo2
rspedido(3) = Text5
rspedido(4) = Text2
rspedido.Update

...

Por eso en el detalle si lo hace, hace falta el .AddNew de la cabecera.

Hola experto, como siempre muchas gracias por tu respuesta, voy a tratar de realizarte mi interfaz con el nombre de los controles:

(cabecera) cmdGenerarPedido

nro_pedido

mes

año

proveedor

(detalles)

juego listaJuego listtaCantidad

cantidad

cmdañadir

cmdeliminar

cmdEfectuarPedido

Mi código de cmdGenerarPedido para habilitar el frame de la cabecera:

Private Sub XPButton4_Click()
Frame2.Enabled = True'habilita el frame de la cabecera
Combo1.SetFocus
rspedido.AddNew
Text1.Text = rspedido(0)
End Sub

Mi código del botón cmdEfectuarPedido para cargar el pedido en la base:

Private Sub XPButton3_Click()
If List1.ListCount > 0 And List2.ListCount > 0 Then
If rspedido.BOF = False And rspedido.EOF = False Then
rspedido.MoveFirst
End If
Call llenardatos 'llamo al procedimiento para cargar
MsgBox "Pedido cargado", vbInformation, "Pedido cargado"
List1.Clear
List2.Clear
limpiar frmPedidosProveedor
Frame2.Enabled = False
Frame1.Enabled = False
Else
MsgBox "Introduzca juegos a la lista", vbInformation, "Lista vacía"
End If
End Sub

Mi procedimiento llenarDatos:

Private Sub llenardatos()
rspedido(2) = Combo1
rspedido(1) = Combo2
rspedido(3) = Text5
rspedido(4) = Text2
rspedido.Update

'cargo detalle
For i = 0 To List1.ListCount - 1
rsdetalle.AddNew
rsdetalle(1) = Text1
rsdetalle(2) = List1.List(i)
rsdetalle(3) = List2.List(i)
rsdetalle.Update
Next i
End Sub

Mi addNew para rspedido lo declaro en el botón cmdGenerarPedido para que me de el valor autonumérico de la base en la caja nro_pedido.

En mi base de datos:

Tabla PedidoCabecera:

nro_pedido proveedor mes consola

1 magic enero xbox

2

Tabla Detalle

nro_pedido juego cantidad

1 Fifa 15

1 F1 15

2 Counter 15

2 NBA 15

Como veraz el primer registro se realiza en las dos tablas. El segundo solo registra el nro_pedido y todo en la tabla detalle.

Muchas gracias por tu respuesta!!

En llenardatos NUNCA haces un AddNew

Hola gracias por responder, o sea necesito dos addnew para el recordset de la tabla maestra?, uno en el botón cmdGenerarpedido y otro en el prcedimiento llenardatos?

Private Sub XPButton3_Click()

rspedido.AddNew

Private Sub llenardatos()

rspedido.AddNew

Gracias por tus respuestas!!

Se necesita un addnew (adicionar nuevo registro) para Cada Una de las tablas que quieras manejar

Yo ya hice el addnew para la tabla maestra (está en negrita):

Private Sub XPButton4_Click()
Frame2.Enabled = True'habilita el frame de la cabecera
Combo1.SetFocus
rspedido.AddNew
Text1.Text = rspedido(0)
End Sub


Mi código del botón cmdEfectuarPedido para cargar el detalle pedido en la base:


Private Sub XPButton3_Click()
If List1.ListCount > 0 And List2.ListCount > 0 Then
If rspedido.BOF = False And rspedido.EOF = False Then
rspedido.MoveFirst
End If
Call llenardatos 'llamo al procedimiento para cargar
MsgBox "Pedido cargado", vbInformation, "Pedido cargado"
List1.Clear
List2.Clear
limpiar frmPedidosProveedor
Frame2.Enabled = False
Frame1.Enabled = False
Else
MsgBox "Introduzca juegos a la lista", vbInformation, "Lista vacía"
End If
End Sub
Mi procedimiento llenarDatos:
Private Sub llenardatos()
rspedido(2) = Combo1
rspedido(1) = Combo2
rspedido(3) = Text5
rspedido(4) = Text2
rspedido.Update
'cargo detalle
For i = 0 To List1.ListCount - 1
rsdetalle.AddNew
rsdetalle(1) = Text1
rsdetalle(2) = List1.List(i)
rsdetalle(3) = List2.List(i)
rsdetalle.Update
Next i
End Sub

En negrita coloque el addnew de rspedidos y su correspondiente rsupdate, pero me carga solo el primer registro completo luego solo los detalles, gracias por responder!!!

Creo que el problema es la lógica que tienes para grabar, revísala.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas