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 !

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