Buena tarde...
Las soluciones usadas hasta ahora.. tablas, TarrayData y rowSet... tienen metodos de navegacion y ordenaminento,,,,
Navigation:
Supports all methods of TDatabase like GoTop,GoBottom,GoTo,Skip,Eof,Bof,LastRec,
RecCount,KeyCount,KeyGoTo, etc
Also supports aliased methods compatible with ADO
MoveFirst,MoveLast,Move,BookMark,AbsolutePosition, etc
La t茅cnica que estoy usando para no cambiar mucho c贸digo es .. simular el dbsetorder y dbseek con los objetos mencionados...
con tablas temporales ya esta ok, con tarrayData solo falta el SetOrder(multiples columnas) ,, y como ultima opci贸n use el rowSet (la navegaci贸n y el setOrder .. est谩n ok),, pero mariaConnect... los trata como un espejo de la tabla sql... lo actualiza en l铆nea ... no me
sirve para manejo de temporales o primera consulta sql.
y asi los he usado con eagle1-... con hash tendria que desarrollarlos...
Uso los hash pero para procesos tipo variable : almacenar y recuperar un valor ... junto con json...
ejp. de un objeto tipo recordSet :
FUNCTION objectoSqlFwToDbf(oObjSql,cAliTab,cPatDes,cFilDes,lAbrTab)
聽 聽 LOCAL nNroCam := 0, II := 0 , nNroReg := 0
聽 聽 LOCAL cAliTem := "ART_XXX"
聽 聽 IF lAbrTab == NIL
聽 聽 聽 聽lAbrTab := .T.
聽 聽 ENDIF
聽 聽 IF lAbrTab //
聽 聽 聽 聽ABRETABLA(cAliTab)
聽 聽 聽 聽COPY_STRUC_A_DBF(cAliTab,cPatDes+cFilDes,"DBFCDX")
聽 聽 聽 聽CLOSE (cAliTab)
聽 聽 聽 聽IF !lUsaTab(cPatDes,cFilDes,cAliTem,{},.F.,NIL,"DBFCDX")
聽 聽 聽 聽 聽 RETURN .F.
聽 聽 聽 聽ENDIF
聽 聽 ELSE 聽// YA VIENE ABIERTA
聽 聽 聽 聽cAliTem := cAliTab 聽// LA TEMPORAL ES LA QUE VIENE
聽 聽 ENDIF
聽 聽 nNroReg := oObjSql:RecCount()
聽 聽 oObjSql:GoTop()
聽 聽 nNroCam := oObjSql:Fcount()
聽 聽 FOR II := 1 TO nNroReg
聽 聽 聽 聽 SELECT (cAliTem)
聽 聽 聽 聽 IF (cAliTem)->( lReglock( .T. ) )
聽 聽 聽 聽 聽 聽IF !__CREA_REG_DBF_OF_SQL(nNroCam,cAliTem,oObjSql)
聽 聽 聽 聽 聽 聽 聽 RETURN .F.
聽 聽 聽 聽 聽 聽ENDIF
聽 聽 聽 聽 ENDIF
聽 聽 聽 聽 oObjSql:Skip( 1 )
聽 聽 NEXT II
聽 聽 (cAliTem)->( DBCOMMIT() )
聽 聽 (cAliTem)->( DBUNLOCK() )
聽 聽 IF lAbrTab
聽 聽 聽 聽CLOSE (cAliTem)
聽 聽 ENDIF
RETURN .T.
//*****************************************************************
FUNCTION __CREA_REG_DBF_OF_SQL(nNroCam,xAliTab,oSqlTab)
LOCAL nPosCam, J := 0, cTipDat, xConCam
TRY
聽 聽 聽 聽 FOR J := 1 TO nNroCam
聽 聽 聽 聽 聽 聽 nPosCam := (xAliTab)->( FIELDPOS( oSqlTab:fieldname( J ) ) )
聽 聽 聽 聽 聽 聽 IF nPosCam > 0
聽 聽 聽 聽 聽 聽 聽 聽cTipDat := (xAliTab)->( VALTYPE( &( FIELDNAME( nPosCam ) ) ) )
聽 聽 聽 聽 聽 聽 聽 聽IF !EMPTY(oSqlTab:FieldGet( J ) )
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽DO CASE
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CASE cTipDat == "N"
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽xConCam := 聽oSqlTab:FieldGet( J )
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CASE cTipDat == "D"
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽xConCam := oSqlTab:FieldGet( J )
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CASE cTipDat == "M"
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CASE cTipDat == "C"
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽xConCam := 聽IF(oSqlTab:FieldGet( J )==NIL,"",oSqlTab:FieldGet( J ) )
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽// OJO REVISAR LONGITUD
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CASE cTipDat == "L"
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽xConCam := 聽IF(oSqlTab:FieldGet( J )=="1",.T.,.F.)
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 OTHERWISE
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽ALERT("Error. Tipo de dato desconocido")
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽ENDCASE
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽(xAliTab)->( FIELDPUT(nPosCam, xConCam) 聽)
聽 聽 聽 聽 聽 聽 聽 聽ENDIF
聽 聽 聽 聽 聽 聽 ENDIF
聽 聽 聽 聽 NEXT J
CATCH
聽 聽 聽 聽RETURN .F.
END
RETURN .T.