Tema: Datagrid
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/11/2008, 23:41
franko1809
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 4 meses
Puntos: 10
Respuesta: Datagrid

Para crear una factura, es decir usar las tablas maestro-detalle utilizo un recordset temporal y lo igualo al datagrid, es decir acumulo las filas ó items del rsTemporal que se grabaran en la tabla Detalle en el datagrid, luego estas filas recien las grabo en la tabla detalle

Te dejo parte del codigo que utilizo para que tengas una idea de como hacerlo, si alguien tiene un codigo mas corto bacan por que hace tiempo busque y busque y solo encontre el ejemplo del rsTemporal para trabajar con facturas(maestro-detalle).

Código:
Dim rsTemporal As New Recordset

Sub ActivaTemporal()
    'Creando recordset temporal****************
    rsTemporal.CursorType = adOpenStatic
    rsTemporal.Fields.Append "NumProforma", adVarChar, 6, adFldIsNullable
    rsTemporal.Fields.Append "CodProd", adVarChar, 4, adFldIsNullable
    rsTemporal.Fields.Append "NomProd", adVarChar, 250, adFldIsNullable
    rsTemporal.Fields.Append "PrecioVenta", adDouble, 10.2, adFldIsNullable
    rsTemporal.Fields.Append "cantidad", adInteger, adFldIsNullable
    rsTemporal.Fields.Append "Subtotal", adDouble, 10.2, adFldIsNullable
    rsTemporal.Open
    '*****************************************************
    Set Datagrid1.DataSource = rsTemporal
End Sub

Private Sub Form_Load()
  Call ActivaTemporal
End Sub

Private Sub AgregarItem()
'AGREGAR ITEM
     If Val(Txtcantidad) = 0 Then MsgBox "Debe ingresar una cantidad mayor a cero", vbCritical, "Sistema de Facturacion": Exit Sub
     With rsTemporal 'Actualizamos la columna del CodProd para evitar duplicidad de codigo     
     If Not .BOF Then 'Si no esta al inicio
        .MoveFirst 'nos movemos al primer registro
        .Find "CodProd='" + Trim(dtcProducto.BoundText) + "'" 'Buscamos el CodProd
        If .EOF = False Then 'Si llega al final y encuetra algo
           Datagrid1.Columns(2) = Val(Txtcantidad) 'Actualizamos esos campos en
           Datagrid1.Columns(3) = Val(TxtSubTotal) 'el datagrid
           rsTemporal.Update 'Actualizamos el recordset
           Datagrid1.Refresh 'Actualizamos el datagrid
        Else
           Graba_Temporal
        End If
     Else
        Graba_Temporal
    End If
    End With
    CmdOpciones(1).Enabled = True 'habilita boton Eliminar
    cmdGrabar.Enabled = True
    ' *************************************
    Call Calculos
    Datagrid1.Refresh
    'Formato al campo TOTAL de la boleta
    TxtTotal = Format(TxtTotal, "####.00")
End Sub

Sub Graba_Temporal()
    rsTemporal.AddNew
    rsTemporal.Fields(0) = Trim(txtBoleta)
    rsTemporal.Fields(1) = Trim(dtcProducto.BoundText) 'CodProd
    rsTemporal.Fields(2) = Trim(dtcProducto.Text)
    rsTemporal.Fields(3) = Trim(TxtPrecio)
    rsTemporal.Fields(4) = Trim(Txtcantidad)
    rsTemporal.Fields(5) = Trim(TxtSubTotal)
    rsTemporal.Update
End Sub

Private Sub cmdGrabar_Click()
'*****************************************************
'GRABAR DETALLE DE LA PROFORMA
Dim rsDetalleProforma As New Recordset
rsDetalleProforma.Open "SELECT * FROM DetalleProforma", dbConex, adOpenStatic, adLockOptimistic
rsTemporal.MoveFirst
'*****************************************************
Do While Not rsTemporal.EOF
   rsDetalleProforma.AddNew
   rsDetalleProforma.Fields("NumProforma") = txtBoleta
   rsDetalleProforma.Fields("CodProd") = rsTemporal.Fields("CodProd")
   rsDetalleProforma.Fields("PrecioVenta") = rsTemporal.Fields("PrecioVenta")
   rsDetalleProforma.Fields("Cantidad") = rsTemporal.Fields("Cantidad")
   rsDetalleProforma.Fields("SubTotal") = rsTemporal.Fields("subtotal")
   rsDetalleProforma.Update
   rsTemporal.MoveNext
Loop
End Sub