Página 1 de 1
recall e deteted() !!!!!! E esta hein?
Enviado: 16 Fev 2010 20:18
por lapinhazzz
Amigos do Forum Boa Noite.
Alguém me sabe dar uma resposta quando todos os registos do ficheiro abaixo indicado estão deletados e só mudam em recall para não apagados. Mas.....
Só faz recall ao registo número 2
e o resto hein??
Gostaria que alguém me desse um exemplo de uma pequena rotina que faça o serviço.
Está aqui o código mais a estrutura da base de dados.
Código: Selecionar todos
procedure main()
sele 1
use vendas alia a1
set deleted off
go top
inde on str(venda)+proc to i for deleted() temporary
go top
do whil !eof()
sele 1
IF ff="1"
recall
replace ff with " "
ENDIF
skip
endd
return
//ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
// Database File: C:\TEMP\VENDAS.DBF
// Last Update: 02/16/10
// # Records: 3
// # Fields: 20 Bytes/Record: 121
//ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
// Field FieldName Type Width Decimals
//ÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄ ÄÄÄÄ ÄÄÄÄÄ ÄÄÄÄÄÄÄÄ
// 1 VENDA N 005 000
// 4 PROC C 006 000
// 20 FF C 001 000
//ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
muito obrigado a todos
e BOM CARNAVAL
lapinhazzz

)
Re: recall e deteted() !!!!!! E esta hein?
Enviado: 16 Fev 2010 20:33
por alaminojunior
À princípio, o código parece correto. Mas note que você avalia uma condição antes de desmarcar para deleção.
Não sería este o problema ?
Código: Selecionar todos
do whil !eof()
sele 1
IF ff="1" // se ff for igual a "1" ele desmarca
recall
replace ff with " "
ENDIF
skip
endd
E outra coisa: você abriu o índice com
deleted(). Verifique se o pepino não está aí também, pois após desmarcar, o registro não estará mais visível.
Re: recall e deteted() !!!!!! E esta hein?
Enviado: 17 Fev 2010 09:17
por rochinha
Amiguinho,
Geralmente após um comando DELETE eu costumo usar SKIP -1, já que não temos uma espécie de comando REFRESH.
Se for o caso após o SKIP de um GO TOP pois ao que parece o ponteiro esta indo para no ultimo registro ou sendo posicionado no final da listagem.
Por isto não continua.
Re: recall e deteted() !!!!!! E esta hein?
Enviado: 17 Fev 2010 09:45
por lapinhazzz
Seria este o código caros amigos?
Código: Selecionar todos
do whil !eof()
sele 1
IF ff="1" // se ff for igual a "1" ele desmarca e torna o registo não deletado
replace ff with " "
recall
skip -1
else
skip
ENDIF
endd
obrigado
lapinhazzz
Re: recall e deteted() !!!!!! E esta hein?
Enviado: 17 Fev 2010 11:46
por Toledo
Acho que para resolver o problema, neste seu último exemplo, basta tirar a linha "sele 1" e no lugar de "skip -1" coloque GO TOP.
O problema todo é como o alaminojunior e o Rochinha observaram, está no arquivo de índice.
alaminojunior escreveu:E outra coisa: você abriu o índice com deleted(). Verifique se o pepino não está aí também, pois após desmarcar, o registro não estará mais visível.
rochinha escreveu:Se for o caso após o SKIP de um GO TOP pois ao que parece o ponteiro esta indo para no ultimo registro ou sendo posicionado no final da listagem.
Abraços,
Re: recall e deteted() !!!!!! E esta hein?
Enviado: 17 Fev 2010 14:35
por gvc
Código: Selecionar todos
procedure main()
use vendas alia a1
// set deleted off // O padrão é deleted off
index on str(venda, 5) + proc to i temporary
dbgotop()
while !eof()
if deleted() .and. a1->ff = "1"
dbrecall()
a1->ff := " "
end
dbskip()
end
return(Nil)
Re: recall e deteted() !!!!!! E esta hein?
Enviado: 25 Fev 2010 19:12
por lapinhazzz
Amigos do Forum.
Venho dizer-lhes como resolvi o meu problema.
A minha intenção é ter o controlo de fotocópias tiradas.
Se quiserem o ficheiro exe com as respectivos dbfs eu mando
Ora bem parte do código é este:
Código: Selecionar todos
variáveis:
quantc= quantidade de fotocopias a cores
quantp= quantidade de fotocopias a preto
plafp= plafond de fotocópias a preto
plafc= plafond de fotocópia a cores
área 1 = ficheiro de venda de fotocópias
àrea 5 = ficheiro de alunos
function mvreca()
rot="RECA"
sele 1
set deleted off
use vendas inde i,i2,vendas1,vendas2 alia a1
sele 5
use pessoal inde pessoal1
sele 1
cor(11)
go top
do whil .T.
sele 1
IF ff="1"
rproc=proc
sele 5
seek rproc
rplafc=plafc-a1->quantc
Rplafp=plafp-a1->quantp
REPL PLAFP WITH RPLAFP
REPL PLAFC WITH RPLAFC
rgastop=gastop+a1->quantp
rgastoc=gastoc+a1->quantc
repl gastop with rgastop
repl gastoc with rgastoc
ENDIF
sele 1
SKIP
IF eof()
exit
ENDIF
endd
recall for ff="1"
* set deleted on
rot="RVD"
return
Cumprimentos a todos
Consegui resolver o problema.
Muito obrigado
lapinhazzz
Re: recall e deteted() !!!!!! E esta hein?
Enviado: 26 Fev 2010 14:01
por gvc
Tente isto:
Código: Selecionar todos
function mvreca()
set deleted off
rot := "RECA"
select 5
use pessoal index pessoal1
select 1
use vendas index i, i2, vendas1, vendas2 alia a1
cor(11)
a1->(dbgotop())
while !a1->(eof())
if a1->ff = "1"
pessoal->(dbseek(a1->proc))
pessoal->plafp -= a1->quantp
pessoal->plafc -= a1->quantc
pessoal->gastop += a1->quantp
pessoal->gastoc += a1->quantc
end
a1->(dbskip())
end
recall for ff="1"
* set deleted on
rot := "RVD"
return(Nil)
Re: recall e deteted() !!!!!! E esta hein?
Enviado: 27 Fev 2010 18:48
por lapinhazzz
Boa Noite a todos.
Vou tentar gvc.
Muito obrigado
lapinhazzz
Re: recall e deteted() !!!!!! E esta hein?
Enviado: 27 Fev 2010 21:49
por lapinhazzz
Amigos acho que tenho um grande problema que não consigo resolver.
Com a rotina do gvc mais organizada e explicita não funciona
dbedit para todos os registos deletados é feito em com inde on str(venda)+proc to i for deleted()
por exemplo isto é o que o dbedit faz, todos os registos estão deletados
venda utente copias total status
0001 luis 1 1,00 euros Del
0002 carlos 2 2,00 euros Del
0003 Isabel 3 3,00 euros Del
0004 pedro 1 1,00 euros Del
Agora eu tenho um campo no ficheiro que se chama ff e que fica marcado com o valor "1" quando carrego em espaço e fica com o valor " " quando desmarco
quando carrego na tecla de espaço através do dbedit o programa marca os registos que serão feito o recall
venda utente copias total
0001 luis 1 1,00 euros ■
0002 carlos 2 2,00 euros
0003 Isabel 3 3,00 euros ■
0004 pedro 1 1,00 euros
Mas só que o programa faz recall à venda nº1 e a venda nº 3 não faz.
O que queria era que selecionando a venda 1 e 3 fosse feito o recall nestes dois registos e eles desaparecessem ficando só o registo a venda nº2 e a venda nº 4.
Peço ajuda aos amigos do forum.
Obrigado.
lapihazzz
Re: recall e deteted() !!!!!! E esta hein?
Enviado: 28 Fev 2010 03:52
por gvc
Vamos tentar novamente:
Código: Selecionar todos
function mvreca()
set deleted off
rot := "RECA"
select 5
use pessoal index pessoal1
select 1
use vendas index i, i2, vendas1, vendas2 alia a1 // (*01)
cor(11)
a1->(dbsetorder(0), dbgotop())
while !a1->(eof())
if a1->ff = "1"
pessoal->(dbseek(a1->proc))
pessoal->plafp -= a1->quantp
pessoal->plafc -= a1->quantc
pessoal->gastop += a1->quantp
pessoal->gastoc += a1->quantc
a1->(dbrecall()) // (*02)
end
a1->(dbskip())
end
// recall for ff="1" // (*02)
set deleted on
a1->(dbsetorder(1), dbgotop())
rot := "RVD"
return(Nil)
/*
*01 - Se o arquivo de indice (i) usa o (for deleted()), realmente não funcionaria como eu postei.
*02 - Veja que agora eu estou ignorando os arquivos de indice e recuperando todos os registros marcados com o campo FF dentro do loop. Assim não é necessário recupera-los depois.
*/
Re: recall e deteted() !!!!!! E esta hein?
Enviado: 28 Fev 2010 17:23
por lapinhazzz
Boa Noite a todos
Parece que desta é que foi.
Apenas retirei o set deleted on no fim.
E...
Funcionou
Muito obrigado gvc e a todos do forum.
lapinhazzz
:{ :{ :{ :{ :{ :{ :{ :{