rao,
este es mi prg de prueba, me ha funcionado como usted me indico, pero es de mi interés solamente usar una sola variable oRS, por que al igual que armando es una var estatica.
armando, usando tu logica que es la mas evidente me falla el browse al momento del cambio, es como indica rao.
![Sad :-(](./images/smilies/icon_sad.gif)
Code: Select all | Expand
oNRS := GetRecSet( "'2013-08-27'", "10" )
oBrw:GoTop()
oBrw:oRS := oNRS
oRS:Close()
oBrw:Refresh()
ejemplo completo, uso ado con ads. es rapidísimo, mas que la version dbf
Code: Select all | Expand
@ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
COLUMNS "REVISADO","APROBADO","NUM_CLIE", "NOMBRE", "FECHA_SOLI", "FECHA_DESE", "PLAZO", "MONTO_SOLI", "MONTO_APRO","CIUDAD","RUTA" ;
HEADERS "REVISADO","APROBADO","NUM_CLIE", "NOMBRE", "FECHA_SOLI", "FECHA_DESE", "PLAZO", "MONTO_SOLI", "MONTO_APRO","CIUDAD","RUTA" ;
DATASOURCE oRS ;
CELL LINES NOBORDER FOOTERS
WITH OBJECT oBrw
:MONTO_SOLI:nFooterType := AGGR_SUM
:MONTO_APRO:nFooterType := AGGR_SUM
:bKeyDown := {|nKey| Editar( nKey, oBrw ) }
:nStretchCol := 1
:MakeTotals()
END
oBrw:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED ON INIT oBrw:GoTop()
RELEASE FONT oFont
oRS:Close()
oCon:Close()
return
static function ConnectToAdsSrv()
local lConnect := .f.
local oError, xError, cError := ""
local cStrCon := "Provider=Advantage OLE DB Provider;"+;
"Data Source=\\CREDICOM.NO-IP.ORG:6263\DATOS\CREDICOM.ADD;"+;
"ServerType=ADS_AIS_SERVER;"+;
"TableType=ADS_ADT;"+;
"LockMode=ADS_COMPATIBLE_LOCKING;"+;
"User ID=MyUsuario;"+;
"Password=MyClave;"
if oCon == nil
oCon := TOleAuto():new("ADODB.Connection")
oCon:ConnectionString := cStrCon
TRY
oCon:Open()
lConnect := .t.
CATCH oError
IF oCon:Errors:Count()>0
FOR EACH xError IN oCon:Errors
cError += CStr( xError:Source ) + " / " + CStr( xError:Description ) + HB_OsNewLine()
NEXT
MsgAlert( cError, "Error en ADO" )
ENDIF
oCon := nil
MsgInfo('Connect Fail' + oError:description )
END
else
lConnect := .t.
endif
return lConnect
static function GetRecSet( cFecha, cCiudad )
local cStrSQL, oError, oRecSet
cSQL := "SELECT P.REVISADO, P.APROBADO, P.NUM_CLIE, P.NOMBRE, P.FECHA_SOLI, P.FECHA_DESE, P.PLAZO, P.MONTO_SOLI, P.MONTO_APRO, P.NUM_CIUD, P.ADESEMBOLSO, " + ;
"K.NOMCOR AS CIUDAD, J.NOMCOR AS RUTA " + ;
"FROM PROGRAMACION P " + ;
"LEFT OUTER JOIN CLIENTES AS C ON P.NUM_CLIE=C.NUM_CLIE " + ;
"LEFT OUTER JOIN CIUDADES AS K ON C.NUM_CIUD=K.NUM_CIUD " + ;
"LEFT OUTER JOIN RUTAS AS J ON C.NUM_RUTA=J.NUM_RUTA " + ;
"WHERE FECHA_SOLI=%1 AND P.NUM_CIUD=%2 AND P.ADESEMBOLSO<>TRUE "
cStrSQL := StrFormat( cSQL, cFecha, cCiudad )
if oCon != nil
oRecSet := TOleAuto():new( "ADODB.RecordSet" )
oRecSet:ActiveConnection := oCon
oRecSet:Source := cStrSQL
oRecSet:LockType := adLockOptimistic
oRecSet:CursorType := adOpenKeyset
oRecSet:CursorLocation := adUseClient
oRecSet:CacheSize := 100
TRY
oRecSet:Open()
oRecSet:Sort := "NOMBRE"
CATCH oError
oRecSet := NIL
MsgInfo('Access Table Open Failure - ' + oError:description )
END
endif
return oRecSet
procedure editar( nKey, oBrw )
local cDato, nPos
local cStrSQL
IF nKey == 13
nPos := oRS:AbsolutePosition
cDato := oRS:Fields( "NOMBRE" ):Value
IF MsgGet( "Titulo", "Text", @cDato )
oRS:Fields( "NOMBRE" ):Value := cDato
oRS:Update()
oRS:Requery()
oRS:AbsolutePosition := nPos
ENDIF
ELSEIF nKey == 65 // usuario presiono A
oNRS := GetRecSet( "'2013-08-27'", "10" )
oBrw:GoTop()
oBrw:oRS := oNRS
oRS:Close()
oBrw:Refresh()
ENDIF
return
init procedure PrgInit
SET DATE BRIT
SET CENTURY ON
SET TIME FORMAT TO "HH:MM:SS"
SET EPOCH TO YEAR(DATE())-50
SET DELETED ON
SET EXCLUSIVE OFF
RDDSETDEFAULT( "DBFCDX" )
return