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.
| |||
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: |
| |||
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 |
| |||
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. rodrigocubilla@hotmail.com |