Página 2 de 2

Barra Progressiva

Enviado: 11 Out 2011 11:50
por asimoes
Com esta function é possivel pegar a quantidade de registros lendo o header do dbf incluindo os deletados.

Código: Selecionar todos

FUNCTION LERDBF(cDBF)
LOCAL nhandle:=FOPEN(cDBF,FO_READ+FO_SHARED), nRec:=0, cRecords
IF nHandle > 0
   //-------------------------------------
   cRecords := SPACE(4)
   FSEEK(nHandle,4,FS_SET)
   FREAD(nHandle,@cRecords,4)
   nRec := VAL(LTRIM(STR(BIN2L(cRecords))))
   //-------------------------------------
ENDIF
FCLOSE(nhandle)
RETURN nRec

Barra Progressiva

Enviado: 28 Out 2011 14:51
por lugab
Ola amigos,

Sabem dizer se algum desses códigos postados acima funcionam usando harbour/Xharbour e índices CDX ?

Barra Progressiva para indexação

Enviado: 05 Abr 2012 00:42
por RUSINEI
Ola
tudo bem... Sou novo Este é o meu PRIMEIRO forum da internet que eu e CADASTRO por dois motivo.. PRIMEIRO eu estou PRESCISANDO DE AJUDA.. E SEGUNDO porque eu AMOR AINDA O CLIPPER.... ( sou Brasileiro e NUNCA vou TE ABANDONA)...

ME ajudem. ME passam ai um EXEMPLO de como FAZER uma BARRA PROGRESSIVA no clipper...
Eu peguei varios exemplos da NET, mais sempre da ERRO no ( TAG) e no (EVERY)...

exmplo: Barra de Progressão com % e animação.

OBS: uso CLIPPER 5.1 nas minhas compilaçoes não tem este negocios de #INCLUDE ".ch" dentre outros...

me MOSTREM um exemplo sem este TAG e EVERY.. ( ou me ORIENTEM por Favor).

BANCO DE DADOS CLIENTES.DBF
indexa por....................CODIGO e NOME


MUITO OBRIGADO..
Nota de Moderação:
por Pablo César: O presente tópico foi movido do tópico de "Regras e Comunicados" e foi unido a outro tópico que trata do mesmo assunto. Favor postar nas seções correspondentes. A sua mensagem também foi re-editada, porque continha caracteres desnecessários e título "me ajudem" (o que contraria umas das regras do fórum).

Barra Progressiva para indexação

Enviado: 05 Abr 2012 10:05
por Pablo César
Olá, seja bem vindo ao fórum !

A todos que iniciam-se no fórum, estimulamos para que procurem através do "Busca" ou "Busca Avançada" (opções na própria página do fórum) para que localizem tópicos que tenham relação com o problema que desejam solução. Muitas vezes é preciso que mostrem seu código fontes ou partes deles para entender melhor o que está acontecendo e assim poder oferecer ajuda corrigindo o que estaria de errado.

Aqui estes tópicos são relacionados à barra progressiva para o uso de indexação:
https://pctoledo.org/forum/viewto ... 299#p41299
https://pctoledo.org/forum/viewto ... iva#p71399
RUSINEI escreveu:OBS: uso CLIPPER 5.1 nas minhas compilaçoes não tem este negocios de #INCLUDE ".ch" dentre outros...
Bom primeiramente, posso dizer que a versão que está utilizando do Clipper é totalmente inusual. Ela contém bugs. Aconselho a utilizar a versão 5.2e e você pode baixar na seção de Downloads: Instalação do Clipper versão 5.2e (Modo instalado) - Site do Maligno. Segundo, você precisará utilizar os includes, porque eles são fundamentais para que o seu programa funcione. Do contrário, você vai ter inserir no seu código fonte todas as declarações que contém cada .ch o que seria uma TREMENDA perda de tempo o o seu código fonte iria ficar muito amontoado com tantas declarações.
RUSINEI escreveu:me MOSTREM um exemplo sem este TAG e EVERY..
Não tem como fazer uma barra progressiva para indexação sem o EVERY. Esse TAG não sei ao acerto ao quê você está se referindo, por isso deveria mostrar o seu código. Mas nesse exemplo que postei (primeiro link) não tem TAG.
RUSINEI escreveu:BANCO DE DADOS CLIENTES.DBF
indexa por....................CODIGO e NOME
Faltou dizer:
1. Se a indexação é NTX ou CDX ou outro RDD
2. Mencionar as estrutura do seu banco de dados ajudaria. Isto é, precisamos saber se o campo CODIGO é numérico ou caracter e qual é o tamanho também (para o caso de ser numérico).
3. Você que um índice com chave composta ou são dois índices ?. Chave composta, seria por exemplo INDEX ON STR(codigo,6,0)+nome e dois índices seriam dois arquivos separados (para o caso de ser NTX) ou índice com duas TAGs (caso seja CDX). Isto é, duas indexações: uma pelo código e outra pelo nome. Como seria então ?

Tente adaptar o exemplo que passei e se houver dúvidas ou apresentando erros, poste o seu código e perguntas que iremos atender.

Barra Progressiva para indexação

Enviado: 05 Abr 2012 11:06
por Pablo César
Percebí que os 3 exemplos na seção de Downloads, não estavam muito claros. Decidi então acondicioná-los para que possibilitar a sua execução.

Veja então agora estes exemplos:
Indexa
cpdbar
rbarlb12

Espero que agora possam executar os exemplos sem problemas.

Barra Progressiva para indexação

Enviado: 05 Abr 2012 11:09
por Jairo Maia
Olá Rusinei,

Estou postando a forma que sempre usei em Clipper 5.2. Teste o exemplo abaixo e veja se lhe ajuda.

NOTA: Coloquei na função UPDBAR(), um retardo de Inkey(.1), apenas para o caso se seu DBF conter poucos registros, assim, esse retardo permite você ver a progressão da barra. Para enviar ao Cliente, sugiro remover esse retardo.

Código: Selecionar todos

#include "box.ch"  // Constantes manifestas da DispBox

Private cNomeNtx, cChaveNtx, msg, corbox := "W+/N", cortit := "GR+/N"

Clear Screen

Use CLIENTES

cNomeNtx := "CLIENTE1.NTX"               // Nome do índice
cChaveNtx := "codigo+nome"               // Chave do índice
msg:="Criando o índice => " + cNomeNtx   // mensagem ao usuário

NTX("&cChaveNtx.","&cNomeNtx.",msg)

Return Nil

FUNC NTX(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)
 LOCA Local1, Local2, qtdreg
 PRIV chvind:=TRIM(Arg1)
 Local1:=RECC()
 qtdreg:=IF((Local1/50)<1,1,INT(Local1/50))
 Local2:=LTRIM(TRAN(Local1,"@E 99,999,999"))
 Local2:=OPNBAR(Arg3,Local2+" registros",Arg5,Arg6,Arg7,Arg8)
 INDEX ON &chvind. TO (Arg2) EVAL UPDBAR(Local2,100*RECN()/Local1) EVERY (qtdreg)
 UPDBAR(Local2,100)  // completa o termometro
RETU Nil

FUNC OPNBAR(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
 LOCA Local1, Local2, Local3, Local4, Local5, Local6, Local7, ;
  Local8, Local9, Local10, Local11
 Local1:={}
 Local3:=SET(20, "SCREEN")
 Arg2:=IF(Arg2=Nil, "", Arg2)
 Arg3:=IF(Arg3=Nil, 10, Arg3)
 Arg4:=IF(Arg4=Nil, 13, Arg4)
 Arg5:=IF(Arg5=Nil,corbox, Arg5)
 Arg6:=IF(Arg6=Nil,cortit, Arg6)
 IF (Arg3 > 19)
  Arg3:=19
 ENDI
 IF (Arg4 > 25)
  Arg4:=25
 ENDI
 Local5:=Arg3+4
 Local6:=Arg4+53
 AADD(Local1, SAVESCREEN(Arg3, Arg4, Local5+1, Local6+1))
 Local2:=SETCOLOR(cortit)
 DISPBEGIN()
 DispBox(Arg3, Arg4, Local5, Local6, B_SINGLE )
 SETCOLOR(corbox)
 IF (!EMPTY(Arg1))
  IF (LEN(Arg1) > Local6 - Arg4 - 3)
   Arg1:=LEFT(Arg1, Local6 - Arg4 - 3)
  ENDI
  @ Arg3, Arg4+(Local6-Arg4-LEN(Arg1)-1)/2 SAY (" "+Arg1+" ")
 ENDI
 IF (!EMPTY(Arg2))
  IF (LEN(Arg2) > Local6 - Arg4 - 3)
   Arg2:=LEFT(Arg2, Local6 - Arg4 - 3)
  ENDI
  @ Local5, Arg4+(Local6-Arg4-LEN(Arg2)-1)/2 SAY (" "+Arg2+" ")
 ENDI
 @ Arg3+1, Arg4+25 SAY (TRAN(0,"999%"))
 @ Arg3+3, Arg4+2 SAY ("")
 FOR Local4:=1 TO 9
  @ Arg3+3, Arg4+1+Local4*5 SAY ("")
 NEXT
 @ Arg3+3, Local6-2 SAY ("")
 @ Arg3+2, Arg4+2 SAY (REPL(CHR(177), 50))
 DISPEND()
 SETCOLOR(Local2)
 AADD(Local1, Arg3)
 AADD(Local1, Arg4)
 AADD(Local1, IF(PROCNAME(1)="NTX",-1,0))
 AADD(Local1, Arg5)
 AADD(Local1, Arg6)
 SETCURSOR(0)
 SET(20, Local3)
RETU Local1

FUNC UPDBAR(Arg1, Arg2)
 LOCA Local1, Local2, Local3
 IF (Arg2 > 100)
  Arg2:=100
 ENDI
 Local3:=INT(Arg2 / 2)
 IF (VALTYPE(Arg1)="A")
  IF (Arg1[4] < 0)
   Arg1[4]:=0
  ELSEIF (Local3 > Arg1[4])
   Local2:=SET(20, "SCREEN")
   Local1:=SETCOLOR(Arg1[6])
   @ Arg1[2]+1, Arg1[3]+25 SAY (TRAN(Arg2, "999%"))
   @ Arg1[2]+2, Arg1[3]+2 SAY (REPL(CHR(219), Local3))
   Arg1[4]:=Local3
   SETCOLOR(Local1)
   SET(20, Local2)
  ENDI
 ENDI

 inkey(.1) // para enviar ao cliente, sugiro não usar retardo

RETU (.T.)