Perdão se ainda não fui suficientemente claro.
Não conheço a função ADOSkipper() que vc mencionou. Como faço para ter acesso a ela?
Vou tentar ser bastante claro. O que pretendo é bastante simples: apenas posicionar o cursor no primeiro registro do browse que atenda à condição (campo marcacao sem marca). Note bem: não quero excluir registros do browse, nem filtrar o browse. Apenas posicionar o cursor.
A título de exemplo, imagine um browse assim:
id marcacao tarefa
1 * xxx
2 * yyy
3 * zzz
4 www
5 * aaa
6 bbb
...
Quero apenas que, ao abrir o browse, o cursor fique já posicionado sobre o id 4. Entende?
Vou postar o código inteiro:
Código: Selecionar todos
novaconsado("select * from tarsequencias where id>0",,,,,,,,55,"[ENTER] - marca *; [DEL]-apaga registro","fu_tarsequencias")
function fu_tarsequencias
local nId :=oRs:Fields("id"):Value
local cTar, conf
nVez++
if nVez=1
* oRs:Find("marcacao<>'*'")
/*
do while !oRs:eof()
if oRs:Fields("marcacao"):Value="*" .or. oRs:Fields("marcacao"):Value="-"
oRs:movenext()
else
keyb chr(5)
exit
endif
enddo
*/
endif
if nkey ==13
if oRs:Fields("marcacao"):Value="*"
exqado("update tarsequencias set marcacao=' ' where id="+alltrim(str(nId)),3)
else
exqado("update tarsequencias set marcacao='*' where id="+alltrim(str(nId)),3)
endif
return 1
elseif nkey ==7 //Del
cTar=oRs:Fields("tarefa"):Value
conf="N"
@ 20,5 say "Confirma exclusão deste registro?"get conf pict "@!"
read
if conf="S"
exqado("delete from tarsequencias where id="+alltrim(str(nId)),3)
if pegadado("tarefa","tarsequencias","id="+alltrim(str(nId+1)))="Bíblia" .and. pegadado("marcacao","tarsequencias","id="+alltrim(str(nId+1)))#"*"
exqado("delete from tarsequencias where id="+alltrim(str(nId+1)),3)
endif
do while .t.
nId=pegadado("id","tarsequencias","id>"+alltrim(str(nId))+" and tarefa='"+cTar+"'")
if hb_isnumeric(nId)
exqado("delete from tarsequencias where id="+alltrim(str(nId)),3)
if pegadado("tarefa","tarsequencias","id="+alltrim(str(nId+1)))="Bíblia" .and. pegadado("marcacao","tarsequencias","id="+alltrim(str(nId+1)))#"*"
exqado("delete from tarsequencias where id="+alltrim(str(nId+1)),3)
endif
else
exit
endif
enddo
endif
return 1
endif
return 0
function novaconsado(sql,or,modo,coluna,prov,nTop1,nTop2,nBottom1,nBottom2,cRodape,func_usuario)
#include "tbrowse.ch"
LOCAL retorno, oColumn, nProvAqui, nLen, nLen2, nFieldlen, I // I está em fields(i) abaixo, não sei do que se trata
local nCursor :=setCursor(0)
Local Vez :=0
local cSair :="N"
local rw :=row()
local cl :=col()
private conexao, nkey, oRs, oTBrowse
cls
if Vez=0
@ maxrow()-1,15 say "Abrindo consulta"
endif
if prov=NIL
prov=3
endif
if nTop1=NIL
nTop1=2
endif
if nTop2=NIL
nTop2=2
endif
if nBottom1=NIL
nBottom1=maxrow()-5
endif
if nBottom2=NIL
nBottom2=maxcol()-1
endif
keysec(27,1500,-1,.t.)
if Vez=0
@ maxrow()-1,15 say "Conectando "
endif
do while .t.
bError := ErrorBlock( {|e| Break(e) } )
begin sequence
oRs=ConexaoMySQL(prov)
oRs:open()
recover using e
Vez++
if us="I"
?"Não abriu a conexão; tentando de novo"
inkey(1)
endif
if Vez>3
?"Não abriu a conexão; tente novamente mais tarde"
inkey(1)
cSair="S"
else
loop
endif
endsequence
ErrorBlock( bError )
if cSair="S"
return .f.
endif
Vez=0
if !AdoConecta(prov,7)
@ 12,15 say "Não conseguiu conectar; tente novamente mais tarde"
inkey(5)
return .f.
else
if Vez=0
@ maxrow()-1,15 say "Executando a consulta"
endif
if "FROM ATIV"$upper(sql) .and. prov#18
oRs := Conexao:Execute("SET MAX_JOIN_SIZE=1111111111111")
endif
oRS := Conexao:Execute( sql )
endif
if oRS:Eof()
@ 12,15 say "Não há nenhum item "
inkey(11)
inkey(11)
return .f.
endif
cls
oTBrowse := TBrowseDB():new( nTop1, nTop2, nBottom1, nBottom2 )
if cRodape#NIL
@ maxrow()-2,1 say substr(cRodape,1,maxcol()-5)
@ maxrow()-1,1 say substr(cRodape,maxcol()-4)
endif
oTBrowse:goTopBlock := { || oRs:moveFirst() }
oTBrowse:goBottomBlock := { || oRs:moveLast() }
oTBrowse:skipBlock := { | n | ADORecordSetSkipper( oRs, n ) }
oTBrowse:HeadSep := Chr(196)
oTBrowse:ColSep := Chr(179)
oTBrowse:FootSep := ""
nLen := oRs:fields():count() - 1
if procname(1)="LEITURA"
nLen2=nLen
elseif "FROM TAREXTRAS"$upper(sql)
nLen2=nLen-2
else
nLen2=nLen-1
endif
FOR i := 0 TO nLen2
if ("FROM TARDIVIDAS" $ upper(sql)) .and. (upper(oRs:fields(i):name)="MINIMO" .or. upper(oRs:fields(i):name)="OCULTAR")
nFieldlen=oRs:fields(i):definedSize +6
elseif upper(oRs:fields(i):name)="KM"
nFieldlen=10
elseif upper(oRs:fields(i):name)="DATA"
nFieldlen=10
elseif upper(oRs:fields(i):name)="IPCAD"
nFieldlen=15
elseif upper(oRs:fields(i):name)="VLDESP"
nFieldlen=16
elseif upper(oRs:fields(i):name)="LOCAL"
nFieldlen=55
else
nFieldlen=oRs:fields(i):definedSize
endif
oColumn := TBColumnNew( oRs:fields(i):name(), ADORecordSetFieldBlock( oRs, i ) )
ocolumn:Width := Max( nFieldLen, Len( oRs:fields(i):name ) ) // maior valor entre nFieldlen e nome do campo
oTBrowse:addColumn( oColumn )
NEXT
if vez=0 .and. (procname(1)="ADOTARPRINC" .or. procname(2)="ADOTARPRINC")
rw=0
do while .t.
if oRs:Fields("marcacao"):Value="*" .or. oRs:Fields("marcacao"):Value="-"
oRs:movenext()
rw++
else
exit
endif
enddo
endif
DO WHILE .T.
vez++
nCol=oTbrowse:colPos()
oTBrowse:forceStable()
oTBrowse:refreshCurrent()
setCursor(nCursor)
set cursor on
nKey := Inkey(0)
retorno=&(func_usuario)(sql)
if retorno=1
exit
endif
IF oTBrowse:applyKey( nKey ) == TBR_EXIT
cSair="S"
EXIT
ENDIF
ENDDO
if cSair="S"
exit
endif
enddo
oRs:Close()
Conexao:Close()
if cSair="S" .and. procname(1)#"CONSEXPR" .and. procname(2)#"CONSEXPR"
return .f.
endif
return .t.