problema de registros em branco no dbf.

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

scom
Usuário Nível 3
Usuário Nível 3
Mensagens: 133
Registrado em: 15 Nov 2004 10:49
Localização: Dourados/MS

problema de registros em branco no dbf.

Mensagem 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
S COM INFORMÁTICA
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

REGISTRO EM BRANCO

Mensagem 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.
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

Registro em branco

Mensagem 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.
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem 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.
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

REgistro vazio

Mensagem 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
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
scom
Usuário Nível 3
Usuário Nível 3
Mensagens: 133
Registrado em: 15 Nov 2004 10:49
Localização: Dourados/MS

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

Mensagem 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
S COM INFORMÁTICA
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

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

Mensagem 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
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
scom
Usuário Nível 3
Usuário Nível 3
Mensagens: 133
Registrado em: 15 Nov 2004 10:49
Localização: Dourados/MS

mas será?

Mensagem 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
S COM INFORMÁTICA
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem 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...
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem 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
Responder