Problema sincronizando TreeView con base de datos
Publicado por Jose (1 intervención) el 10/10/2007 12:54:33
Hola, tengo el siguiente problema: Quiero sincronizar un TreeView con una base de datos, y para ello quiero que, al modificar un registro de la base de datos, de una tabla con la información de los nodos, el programa modifique automáticamente dicho nodo en el TreeView (lo añada, lo borre, le cambie el texto...). Es decir, que primero se actualice la base de datos y que ante una actualización de ésta, salte la rutina que modifica el TreeView.
Lo intento hacer de este modo: Utilizando un recordset con WithEvents, modifico el recordset con la nueva información y luego hago Update para actualizar los datos en la base de datos, y luego con el evento RecordChangeComplete trato de que después de realizarse el Update se ejecute la rutina que actualice el TreeView (la cual funciona utilizando un nuevo recordset que lee la base de datos).
Si queréis más detalles, viene a ser esto:
Set mrsNodes = New ADODB.Recordset
mrsNodes.Open mcmdNode, , adOpenForwardOnly, adLockPessimistic
mrsNodes.AddNew Array("Node", "Text", "Type", "Parent", "Indent", "Order"), _
Array(iNewId, Text, XType, Parent, iParentIndent + 1, iChildren + 1)
mrsNodes.Update
Private Sub mrsNodes_RecordChangeComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If adReason = adRsnUpdate Then
UpdateNodes
End If
End Sub
Sin embargo la cosa no funciona, porque al ejecutarse mi rutina para actualizar el TreeView (UpdateNodes en el ejemplo) se ve que la base de datos aún no ha sido completamente actualizada y aún no contiene los nuevos datos, y deben pasar unos segundos para que la rutina UpdateNodes si que actualice la base de datos correctamente.
¿Alguien me puede ayudar? Cómo puedo hacer que mi rutina UpdateNodes salte ya cuando la base de datos haya sido completamente actualizada.
Lo intento hacer de este modo: Utilizando un recordset con WithEvents, modifico el recordset con la nueva información y luego hago Update para actualizar los datos en la base de datos, y luego con el evento RecordChangeComplete trato de que después de realizarse el Update se ejecute la rutina que actualice el TreeView (la cual funciona utilizando un nuevo recordset que lee la base de datos).
Si queréis más detalles, viene a ser esto:
Set mrsNodes = New ADODB.Recordset
mrsNodes.Open mcmdNode, , adOpenForwardOnly, adLockPessimistic
mrsNodes.AddNew Array("Node", "Text", "Type", "Parent", "Indent", "Order"), _
Array(iNewId, Text, XType, Parent, iParentIndent + 1, iChildren + 1)
mrsNodes.Update
Private Sub mrsNodes_RecordChangeComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If adReason = adRsnUpdate Then
UpdateNodes
End If
End Sub
Sin embargo la cosa no funciona, porque al ejecutarse mi rutina para actualizar el TreeView (UpdateNodes en el ejemplo) se ve que la base de datos aún no ha sido completamente actualizada y aún no contiene los nuevos datos, y deben pasar unos segundos para que la rutina UpdateNodes si que actualice la base de datos correctamente.
¿Alguien me puede ayudar? Cómo puedo hacer que mi rutina UpdateNodes salte ya cuando la base de datos haya sido completamente actualizada.
Valora esta pregunta


0