Boa tarde...
Alguém pode postar um exemplo de como faz para posicionar a linha do browse no próximo item quando apaga um registro indexado?
Quando não está indexado e apaga um registro é normal, vai para o próximo, mas quando tá indexado o controle fica doido e normalmente para no ultimo registro.
Obrigado
Rubens
Posicionamento quando apaga registro indexado
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Posicionamento quando apaga registro indexado
Talvez após excluir, um SKIP, e invalidar todo tbrowse para que seja redesenhado por completo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Posicionamento quando apaga registro indexado
Eh eu pensei em fazer o seguinte
É mais ou menos isso que vocês fazem ?
Obrigado
Rubens
Código: Selecionar todos
se !eof()
dar um dbskip()
armazenar o recno() em proximoregistro
voltar registro anterior dbskip(-1)
se eof()
voltar 1 registro dbskip(-1)
armazenar o recno() em proximoregistro
dbskip()
fim se
apagar registro
depois de apagar, dar um dbgoto( proximoregistro)
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Posicionamento quando apaga registro indexado
Olá!
Veja se o código abaixo resolve o teu caso:
Veja se o código abaixo resolve o teu caso:
Código: Selecionar todos
dbDelete()
while deleted() .and. !oBrowse:hitTop()
oBrowse:up():forceStable()
enddo
oBrowse:refreshAll():forceStable()[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Posicionamento quando apaga registro indexado
Alxsts
Não entendi muito bem a lógica aí mas coloquei no código e não adiantou. Quando apago um registro o browse continua indo para o ultimo registro do arquivo.
AS linhas com * eh como eu uso, acrescentei os seus comandos no lugar delas...
Obrigado
Rubens
Não entendi muito bem a lógica aí mas coloquei no código e não adiantou. Quando apago um registro o browse continua indo para o ultimo registro do arquivo.
AS linhas com * eh como eu uso, acrescentei os seus comandos no lugar delas...
Código: Selecionar todos
IF lAPAGA
BEEP()
IF ALERT("Tem certeza que deseja apagar o registro ?",{'Sim','Nao'})==1
BEEP()
IF ALERT("Pergunto novamente; Tem certeza que deseja apagar o registro ?",{'Sim','Nao'})==1
MOSTRA("TENTANDO APAGAR REGISTRO !!!")
WHILE(.T.)
IF RECLOCK()
DELREC()
DBUnlock()
EXIT
ENDIF
ENDDO
ENDIF
ENDIF
ENDIF
ELSE
BEEP() ; MENSAGEM("Voce nao esta autorizado a executar esta operacao...")
ENDIF
IF ALIAS()="CP"
nTOTAL := TOTALCP()
ENDIF
while deleted() .and. !oTab:hitTop()
oTab:up():forceStable()
enddo
oTab:refreshAll():forceStable()
NIVEL := cNIVEL
*oTab:RIGHT()
*oTab:LEFT()
*oTab:REFRESHALL()
*DO WHILE ! oTab:stabilize()
*ENDDO
Rubens
"Eu e minha casa servimos ao Senhor e você
"
Posicionamento quando apaga registro indexado
Atualmente meu browse esta assim
Este fragmento de código é só uma orientação, você tem que adaptar no seu sistema
Este fragmento de código é só uma orientação, você tem que adaptar no seu sistema
Código: Selecionar todos
//coloca onde vc testa as teclas digitadas
CASE ( nKey == K_DEL ) .and. !noappend
IF ( !Eof() )
IF ( DELETED() )
IF AlertaSN( 'Confirma desmarcar registro marcado para Excluçao' ) = 1
IF RecLock()
EVAL( delete )
RECALL
oB:refreshAll()
WHILE ( !oB:stabilize() )
END
AtuaRel := .t. //caso tenha browse filho, relacionado
ENDIF
ENDIF
ELSEIF AlertaSN( 'Excluir Registro Corrente do Sistema' ) = 1
IF RecLock() .and. (Delete = NIL .or. EVAL( DELETE ) //executa Code Block antes se excluir
DELETE
IF SET( 11 )
Skipped( -1, lAppend, cRel )
END
Refresh -= ( nRefresh - 1 ) //força variavel de tempo, deixar atualizar antes do tempo configurado
AtuaRel := .t. //força browse filho atualizar caso tenha browse relacionado
ENDIF
ENDIF
UNLOCK
ENDIF
STATIC FUNCTION Skipped( nRequest, lAppend, cRel )
LOCAL nCount
nCount := 0
IF ( RecCount() != 0 )
IF ( nRequest == 0 )
SKIP 0
IF !EOF()
IF INDEXORD() > 0 .and. cRel # NIL //verifica relacionamento, caso seja um browse filho
IF &( INDEXKEY() ) < cRel
GoTopSeek( cRel )
ENDIF
IF &( INDEXKEY() ) > cRel
GoBottomSeek( cRel )
ENDIF
ENDIF
ENDIF
ELSEIF ( nRequest > 0 .and. !Eof() )
// forward
WHILE ( nCount < nRequest )
SKIP 1
IF ( EOF() )
IF ( lAppend )
// eof record allowed if append mode
nCount ++
ELSE
// back to last actual record
SKIP - 1
END
EXIT
ELSEIF INDEXORD() > 0 .and. cRel # NIL .and. &( INDEXKEY() ) > cRel
GoBottomSeek() //Skip -1
EXIT
ENDIF
nCount ++
END
ELSEIF ( nRequest < 0 )
// backward
WHILE ( nCount > nRequest )
SKIP - 1
IF ( BOF() )
EXIT
END
IF INDEXORD() > 0 .and. cRel # NIL
IF &( INDEXKEY() ) > cRel
GoBottomSeek()
ENDIF
IF &( INDEXKEY() ) < cRel
SKIP 1
EXIT
ENDIF
ENDIF
nCount --
END
END
END
RETURN ( nCount )
STATIC FUNCTION GoTopSeek( cRel )
IF INDEXORD() = 0 .or. cRel = NIL
GO TOP
ELSE
SEEK cRel Soft
ENDIF
RETU !EOF()
STATIC FUNCTION GoBottomSeek( cRel )
IF INDEXORD() = 0 .or. cRel = NIL
GO BOTTOM
ELSE
SEEK LEFT( cRel, LEN( cRel ) - 1 ) + CHR( ASC( RIGHT( cRel, 1 ) ) + 1 ) soft
SKIP - 1
ENDIF
RETU !EOF()
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
