Alguien que me ayude con DataGrid

Muchos saludes. Espero que alguien me ayude con una dificultad que tengo con un DataGrid pues casi no tengo experiencia con este objeto. Resulta que estoy haciendo un formulario de factura en el que debe introducir el detalle de la factura y es para esto que utilizo el DataGrid. Lo que quiero es que cuando introduzca en el detalle de la factura el código de un item entonces se me actualice el nombre del item y el precio en la misma fila. Cuando utilizaba un DBGrid con DAO se me ejecutaba perfectamente, pero ahora con ADO no lo puedo hacer. Para quien desee ayudarme aquí le pongo el código que estoy usando:
Option Explicit
Dim RS as Recordset, RS2 as Recordset
Dim StrSQL as String
?Cuando cargo el formulario:
Private Sub Form_Load()
StrSQL = "Select Factura.num_factura, Factura.paciente, Factura.observacion, Factura.modo_pago, " & _
"Factura.fecha_factura, Factura.subtotal, Factura.total, Factura.saldo, Factura.anulada, " & _
"Factura.descuento From Factura Order by Factura.num_factura;"
Set RS = Conexion.ExecuteQuery(StrSQL) ?donde ExecuteQuery es una function en una clase llamada ConexionADO y que tambien la pongo.
If RS.RecordCount <= 0 Then
LngNumTemp = 0
Else
RS.MoveLast
LngNumTemp = RS!num_factura
End If
RS.AddNew
RS!num_factura = LngNumTemp + 1
RS!modo_pago = 2
RS.UpdateBatch adAffectCurrent
Me.num_factura.Text = LngNumTemp + 1
Me.fecha_factura.Text = Date
Call ActualizaDetalle
End Sub
? Este es un procedimiento que le asigna a la propiedad datasource del DataGrid un recordset
Private Sub ActualizaDetalle()
StrSQL = SELECT Detalle.num_factura, Detalle.cod_examen, examen.nombre_examen,Detalle.precio, examen.precio_examen FROM Factura INNER JOIN (examen INNER JOIN Detalle ON examen.cod_examen Detalle.cod_examen) ON
Factura.num_factura = Detalle.num_factura WHERE Detalle.num_factura like
'" & Me.num_factura.Text & "' Order by Factura.num_factura;
Set RS2 = Conexion.ExecuteQuery(StrSQL)
Set Me.SubFormulario.DataSource = RS2
End Sub
?Aquí le asigno a la columna de numero de factura el valor que tiene en el formulario
Private Sub SubFormulario_BeforeColEdit(ByVal ColIndex As Integer, ByVal KeyAscii As Integer, Cancel As Integer)
If Me.SubFormulario.Col = 0 Then
Me.SubFormulario.Columns(1).Value = CLng(Me.num_factura.Text)
End If
?En un modulo de declariones
Public Conexion As ConexionADO
?Clase ConexionADO por athrarn
Option Explicit
Private Conexion As ADODB.Connection
Dim innerRS As ADODB.Recordset
Private Sub Class_Initialize()
On Error GoTo FalloConexion
Set Conexion = New ADODB.Connection
Conexion.ConnectionString = strMontarCad()
Conexion.Open
Exit Sub
FalloConexion:
MsgBox Err.Description
End Sub
Private Function strMontarCad() As String
Dim mCadenaConex As String
mCadenaConex = "Provider =Microsoft.Jet.OLEDB.4.0;Data Source=c:\Data\Data.mdb;"
strMontarCad = mCadenaConex
End Function
Public Function ExecuteQuery(SQL As String) As ADODB.Recordset
Set innerRS = New ADODB.Recordset
innerRS.CacheSize = 30
innerRS.CursorLocation = adUseClient
innerRS.Open SQL, Conexion.ConnectionString, adOpenDynamic, adLockBatchOptimistic, adAsyncFetch
Set ExecuteQuery = innerRS
End Function
Public Sub ExecuteSQL(SQL As String)
Conexion.BeginTrans
Conexion.Execute SQL
Conexion.CommitTrans
DoEvents
End Sub
Private Sub Class_Terminate()
If (Conexion.State <> adStateClosed) Then
Conexion.Close
End If
End Sub
Entonces le agradecería mucho a quien me ayudara. Si necesitan la aplicación completa díganme a que correo se las envío. Muchas gracias por anticipado.

1 Respuesta

Respuesta
Enviame la aplicación completa si quieres [email protected]
Umm yo en particular no hago las transacciones así, para empezar no uso recordsets pero si el objeto Connection que tu también utilizas y pues lo que hago es en vez de un datagrid es usar un mshflexgrid y utilizo las propiedades textmatrix(fila, columna) para mandar los valores a la grilla y cuando ya voy a guardar previa confirmación lo que hago es iniciar una transacción y si no falla en la ejecución termino la transacción sino hago un roleo o regreso al estado antes de iniciar la transacción. Es algo así:
on error goto ErrorTrans
Conec. Begintrans
Conec.execute "instrucion sql de cabecera"
fila=1
do while mhsflexgrid.textmatrix(fila,columna)
conec.execute "instruccion sql de detalle la cual se repite por cada item"
fila=fila +1
loop
cn.commitrans
msgbox "todo bien
exit sub
ErrorTrans:
Con. Rollbacktrans
msgbox err.description
Cualquier cosa avisame ok

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas