Foros del Web » Programación para mayores de 30 ;) » Programación General »

Formulario Maestro/Detalle

Estas en el tema de Formulario Maestro/Detalle en el foro de Programación General en Foros del Web. Necesito hacer un formulario Maestro/Detalle, por ejemplo de una factura en la cual como maestro muestro el encabezado de la misma y como detalle los ...
  #1 (permalink)  
Antiguo 04/11/2003, 10:52
 
Fecha de Ingreso: febrero-2003
Mensajes: 40
Antigüedad: 21 años, 3 meses
Puntos: 0
Formulario Maestro/Detalle

Necesito hacer un formulario Maestro/Detalle, por ejemplo de una factura en la cual como maestro muestro el encabezado de la misma y como detalle los items.
Pero con un dgbrid.
Si alguien me puede ayudar desde ya muchas gracias.
__________________
Yayi :adios:
  #2 (permalink)  
Antiguo 12/11/2003, 11:09
 
Fecha de Ingreso: noviembre-2003
Mensajes: 38
Antigüedad: 20 años, 6 meses
Puntos: 0
hola yayita1502, si estas utilizando Visual Basic 6.0:

1. Primero debes tener dos tablas de uno a muchos. Ej. Tabla Factura, Tabla DetalleFactura: una factura tiene muchos detalles de factura.

2. Insertas dos Adodc, los dos los conectas a la base de datos, el primero que seria de MAESTRO lo conectas directamente en la tabla factura, lo cual lo hace un Ado Estático: el segundo lo conectas con una consulta SQL y le pones algo parecido a SELECT * FROM DetalleFactura, lo cual lo hace un Ado Dinámico.

3. Inserta un Datagrid, le pones en la propiedad DataSource el AdoDetalle, en el que te aparecerian todos los detalles de la factura.

4. (Condicional) Si queres hacer el MAESTRO con un Datagrid, Inserta otro Datagrid y le asignas el AdoMAESTRO, que contiene la tabla factura. Si lo queres hacer con textbox, Ej: textboxIdFactura, textboxDescripcion,etc. a cada textbox le asignas el AdoFactura en la propiedad DataSource y en DataField el campo al que pertenece.

5. (Importante) En el evento MoveComplete del AdoFactura escribi lo siguiente:

[Misma Linea] If adreason= adreasonMoveFirst or adreason= adreasonMoveLast or adreason= adreasonMovePrevious or adreason= adreasonMoveNext or adreason= adreasonUpdate or adreason= adreasonDelete or adreason= adreasonMove then
[Siguiente Linea]
[Formato Igual]If AdoMaestro.Recordset.BOF then
AdoMaestro.Recordset.MoveFirst
Elseif AdoMaestro.Recordset.EOF then
AdoMaestro.Recordset.MoveLast
Endif
[Misma Linea] AdoDetalle.RecordSource = "SELECT * FROM DetalleFactura WHERE IdFactura='" & AdoMaestro.Recordset.Fields("IdFactura") & "'"
[Siguiente Linea]AdoDetalle.Refresh
[Siguiente Linea]End If 'termina la condicion adreason

Para que verifiques que esta bueno, llena las tablas con registros, corre el programa y movete dentro del AdoMaestro, veras que se cambian los registro del DataGrid detalle automaticamente.

pdt:si tenes alguna duda acerca de los pasos hacemelo saber por este foro.

Espero que te sirva. Atte: Usecas

"Di Sí al Software Libre (GNU)" Managua, Nicaragua
  #3 (permalink)  
Antiguo 24/11/2003, 10:49
 
Fecha de Ingreso: noviembre-2003
Ubicación: Asuncion
Mensajes: 1
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola te cuento que estoy deseando saber como realizar un form ABM de Maestro detalle y encontre tu ayuda que me sirvio bastante pues lo segui al pie de la letra y por lo menos ya logro traer datos de ambas tablas en el mismo Form.
Mi problema es que el detalle trae todos los registros y no solamente los relacionados al maestro igual aunque coloque el codigo como lo indicaste. Que estoy haciendo mal, sera que podrias ayudarme pues esto me esta trabando avanzar con un sitemita.
Te copio el codigo que utilizo en el form:

Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If adReason = adreasonMoveFirst Or adReason = adreasonMoveLast Or adReason = adreasonMovePrevious Or adReason = adreasonMoveNext Or adReason = adreasonUpdate Or adReason = adreasonDelete Or adReason = adreasonMove Then
If Adodc1.Recordset.BOF Then
Adodc1.Recordset.MoveFirst
ElseIf Adodc1.Recordset.EOF Then
Adodc1.Recordset.MoveLast
End If
MsgBox Adodc1.Recordset.Fields("IdMovimiento")
Adodc2.RecordSource = "SELECT * FROM DetalleMovimientos WHERE IdMovimiento='" & Adodc1.Recordset.Fields("IdMovimiento") & "'"
Adodc2.Refresh
End If 'termina la condicion adreason
End Sub

Private Sub Form_Load()
Adodc2.RecordSource = "SELECT * FROM DetalleMovimientos WHERE IdMovimiento = '" & Adodc1.Recordset.Fields("IdMovimiento") & "'"
Adodc2.Refresh
End Sub

coloque este codigo en el form_load pues quiero que ya se inicie el form con la relacion correspondiente pero alli me da un error que dice "ERROR en el FROM de la consulta" y no entiendo porque.

Gracias.
[email protected]
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 22:28.