Página 1 de 1

Duvida na gravação dos dados

Enviado: 12 Set 2006 11:16
por mfilho
Estou fazendo uma rotina para um coletor de dados. Como a tela é pequena dividi a entrada de dados em 3 partes.
Problema: até o primeiro read as informaçoes são gravadas, já o segundo bloco e o terceiro não. Alguem pode me dizer qual o problema?

A rotina é esta abaixo:

procedure NovaParcela()
Local getList := {},;
iParcela,;
iParcelaAtual
Local imatgen, ilarg, idela
Local icomp1, ideco

select Rotacao

iParcelaAtual = Recno()

pushScreen()

Cls()

setKey(K_F1, {|| Help2()})
setKey(K_F4, {|| ApresentaMaterialGenetico()})

Append Blank
Replace ROTACAO->CODPROJETO with PROJETO->CODPROJETO
//iParcela = 0
iParcela = Rotacao->NumParcela
@ 00, 00 say 'Parcela' get iParcela pict '99999999' valid ValidaParcela(iParcela)
@ 01, 00 say 'Talhao' get ROTACAO->CODTALHAO pict 'NNNNN'
@ 02, 00 say 'Ciclo ' get ROTACAO->CICLO pict '99999999'
@ 03, 00 say 'Rotacao' get ROTACAO->ROTACAO pict '99999999'

read

if (LastKey() = 27)
Delete
Pack
PopScreen()
setKey(K_F1, {|| Help()})
setKey(K_F4, {|| .f.})
Goto Recno()
Return
end

Cls()

iMATGEN = ' '
icomp1 = ' '
ideco = ' '
@ 00, 00 say 'Mat Gen' get iMATGEN pict '99999999'
@ 01, 00 say 'CP' get iCOMP1
@ 02, 00 say 'DC' get iDECO

read

//grava dados
Replace ROTACAO->CODMATGEN with iMATGEN
Replace ROTACAO->COMP1 with icomp1
Replace ROTACAO->DECO with ideco


if (LastKey() = 27)
Delete
Pack
PopScreen()
setKey(K_F1, {|| Help()})
setKey(K_F4, {|| .f.})
Goto Recno()
Return
end

Cls()

ilarg = ' '
idela= ' '

@ 00, 00 say 'LG' get ilarg
@ 01, 00 say 'DL' get idela

read

Replace ROTACAO->LARG with ilarg
Replace ROTACAO->DELA with idela


if (LastKey() = 27)
Delete
Pack
PopScreen()
setKey(K_F1, {|| Help()})
setKey(K_F4, {|| .f.})
Goto Recno()
Return
end

msg(msg_Info, {'Parcela Gravada!'}, 'Nova Parcela')

PopScreen()
setKey(K_F1, {|| Help()})
setKey(K_F4, {|| .f.})

cls()
popScreen()
return

Enviado: 12 Set 2006 17:20
por gvc
Veja se vc esta no registro correto qdo vai fazer a segunda e terceira gravação.
Veja se vc não posicionou EOF().
Não faça alteração (@ ... get) diretamente no arquivo. Use variáveis. Assim vc só dá um append blank quando o usuário terminar e confirmar os dados.
O clipper já tem o comando CLS. Vc criou a função por motivo específico?

Enviado: 28 Set 2006 12:04
por Eliane
Realmente não deve usar o REPLACE direto no DBF, mas com variáveis, ainda mais que usa o Delete e o PACK caso o usuário desista. Tinha um sisteminha antigo que usava desta maneira, e só dava problema, inclusive na indexação. Em rede então, nem pensar, mesmo sem dar o PACK vira uma salada.

Tenho muitos gets com várias telas e funciona OK. Ex:

Do while .t.

cria_vars do dbf
say tela1
get tela1
If lastkey() = k_esc
exit
endif

say tela2
get tela2
If lastkey() = k_esc
....
endif

....
....
*** grava registro
-- dá append blank - lock
-- replace campos pelas vars
-- unlock

enddo

....
....

Caso nao tenha, mando as rotinas para rede para vc.

Enviado: 28 Set 2006 13:27
por rochinha
Amiguinho

Outra coisa:

Voce usa DELETE e PACK e depois faz um salto para RECNO().

RECNO() tem por padrão retornar para voce o numero do registro em que o pointer de arquivos esta posicionado e não serve para voce se posicionar em algum lugar principalmente se voce der um PACK pois o numero do registro sera alterado após este comando.

Veja:

RECNO - NOME

1 - JOAO
2 - JOSE
3 - MARIA
4 - ANTONIO
5 - JOAQUIM

Voce exclui o registro 3 e da um PACK então os registro ficarao assim:

1 - JOAO
2 - JOSE
3 - ANTONIO
4 - JOAQUIM

Esqueça aquele DELETE use a tecnica que os cologas passaram de usar variaveis pois caso voce não confirme se .DBF não sofrerá alterações.

USE arquivo

var1 := arquivo->campo1
var2 := arquivo->campo2
var3 := arquivo->campo3
clear screen
@ col1,row1 SAY "texto 1" GET var1
@ col2,row2 SAY "texto 2" GET var2
@ col3,row3 SAY "texto 3" GET var3
read
if lastkey() <> 27 // quer dizer que voce confirmou com ENTER
append blank
replace arquivo->campo1 with var1
replace arquivo->campo2 with var2
replace arquivo->campo3 with var3
endif

@braços :?)