Página 1 de 4

problema de registros em branco no dbf.

Enviado: 18 Mai 2007 15:22
por scom
ola amigos.


estou tendo um problema e não estou conseguindo detectar a fonte ou o porque, no meu arquivo dbf de produtos esta gerando uns registro em branco e eu to fazendo a deleteção desses resgistros em brando mas ai o cliente vai pesquisar os produtos fica uma lentidão só.

algume tem alguma idéia do que será que esta fazendo isso, possiveis causas.

ha e os indices são CDX

atenciosamente

robson

Enviado: 18 Mai 2007 17:46
por Pablo César
Oi Robson,

Eu assim sem poder ver nada... fica dificil de diagnosticar. Mas com certeza ABSOLUTA, que seu problema está num APPEND BLANK, é programação, meu caro. Não tem outra. Deves estar posicionando na area errada, deve estar fazendo algum looping duplo ou até desistência de inclusão que USUÁRIO... já viu , né ?.

Lamento, não poder ser mais analítico, mas em resumida é isso. Debuga seu código e faça alguma tentativas de inclusão MALUCAS...

Boa sorte ! Imagem

REGISTRO EM BRANCO

Enviado: 18 Mai 2007 18:31
por Netavin
Olá Robson!
Meu caro, já passei por isso também. Rapaz!! como sofri heim !!!
Bem, vc sabe que um registro em branco no final do BD é normal né?!!!
O que não é normal é um monte de registros em branco.
Faça uma boa crítica na inclusão de dados. Só permita códigos >= 1.
E quando o usuário desitir da inclusão no meio da caminho, não deixe que o programa grave. Cancele a inclusão, feche o BD e saia.
Tente isso primeiro... Com certeza terá mais informações dos amigos aquí do Fórum.

[]´s

Netavin.

Enviado: 18 Mai 2007 19:25
por sygecom
scom:
Posta o codigo pra nos dar uma olhada !!!

Netavin:
Meu caro, já passei por isso também. Rapaz!! como sofri heim !!!
Bem, vc sabe que um registro em branco no final do BD é normal né?!!!
Tche, até onde eu sei isso não é normal não !!

Abraços
Leonardo Machado

Registro em branco

Enviado: 19 Mai 2007 08:13
por Netavin
...Rapaz será que todo esse tempo me ensinaram errado??? Senão vejamos:
APPEND BLANK
Propósito: Criar (inserir) um registro em branco no banco de dados aberto na área corrente de trabalho.
Sintaxe: APPEND BLANK

Alguém poderia me inofrmar corrtamente ?

Um abraço a todos.
Netavin.

Enviado: 19 Mai 2007 10:25
por sygecom
Tche, o APPEND BLANK faz realmente isso que vc falou ele cria um registro branco...o que não acontece é de ter em vão um registro branco no DBF, como vc disse anteriormente....que seria normal....

Abraços
Leonardo Machado

Enviado: 19 Mai 2007 10:50
por Pablo César
Teria que ser avaliado o procedimento de inclusão. E tenho visto procedimentos em que chama... e chama tantas funções no meio do caminho entre EDIÇÃO de variáveis, CONFIRMAR inclusão e REPASSAR no arquivo as variáveis. Por isso, eu faço os REPLACEs logo dentro do IF que pergunta: "Confirma inclusão ?"...

Robson, utilize ulgum utilitário que dê para varrer todos seus PRGs dentro daquela pasta do seu sistema, peça para localizar todos os APPEND BLANK, e analize um por um. Eu utilizo o FILEFIND do Norton.

Um clip-abraço :)Pos

Enviado: 19 Mai 2007 11:16
por Augusto
Pessoal...
Netavin escreveu:Bem, vc sabe que um registro em branco no final do BD é normal né?!!!
Me desculpe parceiro... mais essa afirmativa não procede... é falsa. Reveja seus conceitos !!

Eu li rapidamente o tópico e seus posts...

O que a minha experiência diz é que o que está levando a inclusão de registros "em branco" no DB é que o colega "talvez" esteja dando o APPEND BLANK no início do processo de inclusão, ou seja, antes de dar os GETS etc... e aí se no meio desse caminho o usuário desiste e sai da rotina por algum motivo... o registro já foi criado e óbviamente "em branco"...
Sendo assim... inverta a lógica da rotina... Primeiro faça os GETS e suas devidas críticas... depois, por último, de preferencia após uma rotina de "confirmação" dos dados (GETs), faça a inclusão com o APPEND BLANK e seus devidos REPLACES terminando assim a rotina.

REgistro vazio

Enviado: 19 Mai 2007 11:25
por Netavin
... Isso aí Augusto. Esse é o procedimento que uso.
Mas se o colega postasse sua rotina de inclusão, certamente poderíamos ajudá-lo de maneira certa e sem suposições. Não e verdade.
Então SCOM, se postar seu código...

[]´s

Neetavin

caros colegas...temo que não é por causa de append blank

Enviado: 19 Mai 2007 12:02
por scom
então amigos....

eu temo que não seja por causa de append blank porque só faço isso no cadastro do produto.

ou seja, trabalho com variaveis de memória e o cliente vai preenchendo e quando termina ai pergunto se ele confirma a gravação dos dados ai sim dou append blank e jogo os dados....mas sempre apos a confirmação ou seja não tem como ele cancelar e o registro em branco ficar, porque só dou append blank após a confirmação.

Mais ou menos assim:


DESC = SPACE(45)
MARC = SPACE(10)
APLI = SPACE(100)


@ 02,03 say 'Descrição:' GET DESC
@ 03,03 say 'Marca: ' GET MARC
@ 04,03 say 'Aplicação:' GET APLI
READ
IF LASTKEY()<>27
CONFSN() //Função que faz a pergunta de Confirmação
IF CONF='S'
APPEND BLANK
IF REG_LOCK() FUNÇÃO PARA TRAVAR O REGISTRO
REPLACE A_DESC WITH DESC,;
A_MARC WITH MARC,;
A_APLI WITH APLI
ENDIF
ENDIF
ENDIF

Esse é um exemplo de como eu faço para gravar.

MAS MUITO OBRIGADO A TODOS...E VOU PROCURAR MO MEU FONTES O SE TEM EM OUTRO LUGAR UM APPEND SEI LA....VOU VER SE ACHO.


Atenciosamente

ROBSON

Re: caros colegas...temo que não é por causa de append blank

Enviado: 19 Mai 2007 12:30
por Augusto
scom escreveu:IF CONF='S'
APPEND BLANK
IF REG_LOCK() FUNÇÃO PARA TRAVAR O REGISTRO
O seu erro está aí... Perceba que o APPEND BLANK está "fora" do IF que bloqueia o registro.
Caso a condição desse IF não seja satisfeita vc "já incluiu o registro em branco" e não gravou nada... entendeu ??

Veja como eu fiz e teste.

Código: Selecionar todos

DO WHILE .T.
   DESC = SPACE(45) 
   MARC = SPACE(10) 
   APLI = SPACE(100) 

   @ 02,03 say 'Descrição:' GET DESC 
   @ 03,03 say 'Marca: ' GET MARC 
   @ 04,03 say 'Aplicação:' GET APLI 
   READ 

   IF LASTKEY()=27
      EXIT
   ENDIF
 
   CONFSN()

   IF CONF='S'
      IF REG_LOCK()
         APPEND BLANK 
         REPLACE A_DESC WITH DESC, A_MARC WITH MARC, A_APLI WITH APLI
      ENDIF 
   ELSE 
      LOOP 
   ENDIF 
ENDDO

mas será?

Enviado: 19 Mai 2007 12:36
por scom
o augusto...muito obrigado.


mas será? perceba que estou travando o registro em branco, do jeito que vc me passou eu vou travar o que? o bando todo? porque pela minha logica eu gero o registro em branco travo gravo os dados e destravo.

mas vou verificar e testar..

obrigado.

atenciosamente

robson

Enviado: 19 Mai 2007 12:41
por Augusto
Desculpe... falha minha...

Em uma INCLUSÃO travamos o ARQUIVO e não o registro pois o mesmo ainda não existe...

Altere sua função REG_LOCK() para uma que seja ARQ_LOCK() por exemplo...

Enviado: 19 Mai 2007 12:47
por sygecom
Tche, tb. acho que é isso que o Augusto falou.....alias tenho quase certeza.....vc não prescissa bloquear um registro em branco...a função do APPEND BLANK por si jah bloqueia o registro....de uma olhada no link abaixo:

http://www.caclipperwebsite.com/howto/topico01.htm

Abraços
Leonardo Machado

Enviado: 19 Mai 2007 21:34
por MARCELOG
Pessoal,
o APPEND BLANK cria o registro em branco, move o foco para ele e, automaticamente trava o mesmo.
A sua rotina está tentando bloquear um registro qye já está bloqueado, por isso tá falhando.
Coloque no lugar do seu reg_lock() a função NetErr() negativa.
No final, dê um commit e desbloquei o registro.
..

IF LASTKEY()<>27
CONFSN() //Função que faz a pergunta de Confirmação
IF CONF='S'
APPEND BLANK
IF !NetErr()
REPLACE A_DESC WITH DESC,;
A_MARC WITH MARC,;
A_APLI WITH APLI
Commit
Unlock

ENDIF
ENDIF
ENDIF