AdoDatasource: varias cosas
Publicado: Jue Nov 26, 2009 4:42 pm
Hola,
En AdoDatasource:Query (y familia) no se está haciendo bien el tema de
las propiedades después de haber creado el recordset. Las propiedades
nCursorLocation, nCursorType y nLockType solo son asignables _antes_ de
crear el recordset. Este código
METHOD Query( cCommand, cProcess ) CLASS XAdoDataSource
LOCAL oDataSet
DEFAULT cProcess TO ::cProcess
IF ! ::CheckConnection()
RETURN .F.
ENDIF
WITH OBJECT oDataSet := TSQLQuery():Create( ::oParent, Self,
cCommand, Upper( cProcess ) )
:nCursorLocation := adUseClient
:nCursorType := adOpenStatic
:nLockType := adLockOptimistic
END WITH
RETURN oDataSet
Yo lo cambiaría por este otro:
METHOD Query( cCommand, cProcess, nLockType, nCursorLocation,
nCursorType ) CLASS XAdoDataSource
LOCAL oDataSet
DEFAULT cProcess TO ::cProcess
DEFAULT nLockType TO adLockOptimistic
DEFAULT nCursorLocation TO adUseClient
DEFAULT nCursorType TO adOpenStatic
IF ! ::CheckConnection()
RETURN .F.
ENDIF
WITH OBJECT oDataSet := TSQLQuery():New( )
:nCursorLocation := nCursorLocation
:nCursorType := nCursorType
:nLockType := nLockType
:Create( ::oParent, Self, cCommand, Upper( cProcess ) )
END WITH
RETURN oDataSet
Por cierto... habría que revisar todos los métodos QueryXXX para que se
devuelva siempre un objeto tDataset (tal como indica la ayuda).
Creo que
IF ! ::CheckConnection()
RETURN .F.
ENDIF
Debería ser
IF ! ::CheckConnection()
RETURN tDataset():New()
ENDIF
O similar... Más que nada para mantener coherencia con lo que se devuelve.
Saludos,
José Luis Capel
En AdoDatasource:Query (y familia) no se está haciendo bien el tema de
las propiedades después de haber creado el recordset. Las propiedades
nCursorLocation, nCursorType y nLockType solo son asignables _antes_ de
crear el recordset. Este código
METHOD Query( cCommand, cProcess ) CLASS XAdoDataSource
LOCAL oDataSet
DEFAULT cProcess TO ::cProcess
IF ! ::CheckConnection()
RETURN .F.
ENDIF
WITH OBJECT oDataSet := TSQLQuery():Create( ::oParent, Self,
cCommand, Upper( cProcess ) )
:nCursorLocation := adUseClient
:nCursorType := adOpenStatic
:nLockType := adLockOptimistic
END WITH
RETURN oDataSet
Yo lo cambiaría por este otro:
METHOD Query( cCommand, cProcess, nLockType, nCursorLocation,
nCursorType ) CLASS XAdoDataSource
LOCAL oDataSet
DEFAULT cProcess TO ::cProcess
DEFAULT nLockType TO adLockOptimistic
DEFAULT nCursorLocation TO adUseClient
DEFAULT nCursorType TO adOpenStatic
IF ! ::CheckConnection()
RETURN .F.
ENDIF
WITH OBJECT oDataSet := TSQLQuery():New( )
:nCursorLocation := nCursorLocation
:nCursorType := nCursorType
:nLockType := nLockType
:Create( ::oParent, Self, cCommand, Upper( cProcess ) )
END WITH
RETURN oDataSet
Por cierto... habría que revisar todos los métodos QueryXXX para que se
devuelva siempre un objeto tDataset (tal como indica la ayuda).
Creo que
IF ! ::CheckConnection()
RETURN .F.
ENDIF
Debería ser
IF ! ::CheckConnection()
RETURN tDataset():New()
ENDIF
O similar... Más que nada para mantener coherencia con lo que se devuelve.
Saludos,
José Luis Capel