- Code: Select all Expand view
FUNCTION ADODB_CLOSE()
// oConnection STATIC VAR that mantains te adodb connection the same for all recordsets
//this is to enable transactions in several recordsets because transactions is per connection
//this it to be called within an exit proc of the application
// or whnever we dont need it anymore.
IF ! Empty( oConnection )
IF oConnection:State != adStateClosed
IF oConnection:State != adStateOpen
oConnection:Cancel()
ELSE
oConnection:Close()
ENDIF
ENDIF
ENDIF
RETURN .T.
STATIC FUNCTION ADO_CLOSE( nWA )
LOCAL aWAData := USRRDD_AREADATA( nWA )
LOCAL oRecordSet := USRRDD_AREADATA( nWA )[ WA_RECORDSET ]
//dont close connection as mugh be used by other recorsets
// need to have all recordsets in same connection to use transactions
IF !EMPTY( oRecordSet)
IF oRecordSet:State = adStateOpen
oRecordSet:Close()
ENDIF
ENDIF
DO WHILE oRecordSet:State != adStateClosed ; ENDDO
oRecordSet := NIL
RETURN UR_SUPER_CLOSE( nWA )
Antonio lo que he puesto no lo entiendo muy bien...
Para que sirve FUNCTION ADODB_CLOSE()...
Si alguien la usa, y lo puede hacer porque no es una función staic se cargaría el control de la RDD ya que el array interno USRRDD_AREADATA no estaría actualizado y cualquier función DB...() funcionaría de una manera herrática.
Por otro lado esta línea de código no se convertiría en un bucle infinito si oRecordSet:Close() falla?
DO WHILE oRecordSet:State != adStateClosed ; ENDDO
salvo que el atributo State fuera realmente un método. Recuerda que en los objetos binarios como los antiguas ActiveX, ole dole y por tabto ADO no debería de usarse los atributos directamente sino los métodos SET GET que proporciona el objeto binario ADO...
Sólo son apreciaciones para mejorar pero sin ninguna otra pretensión ya que no he entrado en más interioridades de ADO.
Saludos y gracias por tu gran esfuerzo.
PD. No sé de qué parte de Protugal eres, pero temgo previsto visitarla, así que si tenemos tiempo nos podríamos saludar en vivo