Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: lucius en Julio 14, 2012, 11:42:48 pm
-
Hola. Creo una tabla/recordset temporal osea todo en memoria y mediante un boton voy agregando registros a este recordset con metodo rs.addnew y rs.delete hasta ahi todo bien(Utilizo un datagrid).
Ahora aplicar el rs.delete previamente debo seleccionar el item del Datagrid(Si no lo hago me manda error pero se soluciona seleccioando una fila).
El gran problema esta en que quiero utilizar un MSHFlexgrid ya tengo todo listo pero logicamente el rs.delete no me funciona y me tira error ya que no estoy seleccionando nada ya que el grid herarquico solo muestra los registros y no tiene una conexion directa.
Como puedo aplicar un sentencia sql DELETE o UPDATE directamente a mi especie de recordset o tabla temporal o que debo hacer, intente buscando con el metodo .find pero hize bolas.
NOTA: el codigo actual todabia funciona por que utilizo el datagrid y si lo quito logicamente estaria tirando un rs.delete al aire.
Dim rsTemp As New Recordset
Sub TablaTemporal2()
rsTemp.CursorType = adOpenStatic
rsTemp.Fields.Append "IDn", adVarChar, 6, adFldIsNullable
rsTemp.Fields.Append "Nombre", adVarChar, 35, adFldIsNullable
rsTemp.Fields.Append "Marca", adVarChar, 35, adFldIsNullable
rsTemp.Open
Set DataGrid2.DataSource = rsTemp
Call Seteo_Grid_Herarquico(MSHFlexgrid1)
End Sub
Private Sub Form_Load()
Call TablaTemporal2
End Sub
Sub Seteo_Grid_Herarquico(Grid As MSHFlexGrid)
Dim i As Long
With Grid
Set .DataSource = Nothing
.Rows = 2
'.Clear
For i = 0 To .Cols - 1
.TextMatrix(1, i) = "" '<-- limpiar a mano la primera fila del flexgrid
Next
End With
If rsTemp.RecordCount > 0 Then
Set Grid.DataSource = rsTemp
End If
Grid.FormatString = "ID |NOMBRE |MARCA"
End Sub
Private Sub btnAgregar_Click()
rsTemp.AddNew
rsTemp.Fields(0) = Trim(txtIDn)
rsTemp.Fields(1) = Trim(txtNombre)
rsTemp.Fields(2) = Trim(txtMarca)
rsTemp.Update
Call Seteo_Grid_Herarquico(MSHFlexgrid1)
End Sub
Private Sub btnDelete_Click()
rsTemp.Delete
Call Seteo_Grid_Herarquico(MSHFlexgrid1)
End Sub
-
antes de borrar un registro de un recordset temporal , tenes que posicionarte en el registro que queres borrar, por ejemplo haciendo un .Find o un .Filter
el .Find encuentra el registro segun la condicion, por ejemplo si queres borrar el registro seleccionado de la grilla, primero cada registro debe tener un ID unico, este ID debe estar en alguna columna, ya sea visible o oculta, pero debe estar, y seria algo asi:
rsTemporal.MoveFirst
rsTemporal.Find ("idproducto ='" & flexgrid.TextMatrix(flexgrid.Row, 1) & "'")
If Not rsTemporal.EOF Then
rsTemporal.Delete
rsTemporal.Update
Call ActualizarFlexgrid ' aca llamas a la funcion que carga el flexgrid, asi se actualiza la grilla
End If
saludos.
-
Gracias neo es lo que estaba buscando, ah tambien espero el abm con clases de tu otro post, espero no tome muchos años jeje, saludos