Página 1 de 1

Error BASE/1003 ...

Enviado: 20 Fev 2016 18:54
por arcanjoebc
Estou tendo dificuldades em achar onde estou errando ao fazer um pequeno programa. Eu rodo o executável no terminal do Ubuntu 15.10 64 bits e, quando vou cadastrar um registro, ocorre a seguinte mensagem em uma janela vermelha:

Error BASE / 1003. Variable does not exist: COD

Só que não é uma variável e sim, um campo da base de dados. Abaixo coloco o código, se puderem me ajudar, eu agradeço-lhes desde já.

Código: Selecionar todos

use clientes

public mem_cod, mem_nome, mem_nasc, mem_sexo, mem_cid, mem_end
public mem_cep, mem_fone, mem_cpf, mem_prof, mem_ec, mem_obs
public confirma

do while .t.
   setcolor("w/b")
   clear screen
   quadro(1,1,40,140)
   @ 03,30 say "    INCLUSAO DE NOVOS CLIENTES"
   @ 04,30 say "    ======== == ===== ========"
   @ 06,30 say "Codigo..........:"
   @ 08,30 say "Nome............:"
   @ 10,30 say "Dt. Nasc. ......:"
   @ 12,30 say "Sexo............:"
   @ 14,30 say "Estado Civil....:"
   @ 16,30 say "Endereco........:"
   @ 18,30 say "CEP.............:"
   @ 20,30 say "Cidade..........:"
   @ 22,30 say "Estado..........:"
   @ 24,30 say "Telefone........:"
   @ 26,30 say "CPF.............:"
   @ 28,30 say "Profissao.......:"
   @ 30,30 say "Observacao......:"
   @ 32,30 say "CONFIRMA? (S/N) :"
   mem_cod  = 0000
   mem_nome = space(30)
   mem_nasc = ctod("  /  /    ")
   mem_sexo = space(01)
   mem_end  = space(35)
   mem_cid  = space(35)
   mem_cep  = space(10)
   mem_uf   = space(02)
   mem_fone = space(14)
   mem_cpf  = space(14)
   mem_prof = space(20)
   mem_ec   = space(01)
   mem_obs  = space(50)
   confirma = space(01)
   @ 06,49 say mem_cod  pict "9999"
   @ 08,49 say mem_nome pict "@!30"
   @ 10,49 say mem_nasc pict "  /  /    "
   @ 12,49 say mem_sexo pict "!"
   @ 14,49 say mem_ec   pict "!"
   @ 16,49 say mem_end  pict "@!35"
   @ 18,49 say mem_cep  pict "99.999-999"
   @ 20,49 say mem_cid  pict "@!20"
   @ 22,49 say mem_uf   pict "!!"
   @ 24,49 say mem_fone pict "(99) 9999-9999"
   @ 26,49 say mem_cpf  pict "999.999.999-99"
   @ 28,49 say mem_prof pict "@!20"
   @ 30,49 say mem_obs  pict "@!50"
   @ 32,49 say confirma pict "!"
   @ 06,49 get mem_cod  pict "9999"
   read
   if mem_cod = 0000
     exit
   endif
   locate for cod = mem_cod
   if found()
      enter = space(01)
      @ 35,49 say "Mensagem: Cliente ja cadastrado. Pressione <ENTER> " get enter
      read
      @ 35,49 say "                                                   "
      loop
   endif
   @ 06,49 get mem_cod  pict "9999"
   @ 08,49 get mem_nome pict "@!30"
   @ 10,49 get mem_nasc pict "  /  /    "
   @ 12,49 get mem_sexo pict "!"
   @ 14,49 get mem_ec   pict "!"
   @ 16,49 get mem_end  pict "@!35"
   @ 18,49 get mem_cep  pict "99.999-999"
   @ 20,49 get mem_cid  pict "@!20"
   @ 22,49 get mem_uf   pict "!!"
   @ 24,49 get mem_fone pict "(99) 9999-9999"
   @ 26,49 get mem_cpf  pict "999.999.999-99"
   @ 28,49 get mem_prof pict "@!20"
   @ 30,49 get mem_obs  pict "@!50"
   @ 32,49 get confirma pict "!"
   read
   if confirma = "S"
     append blank
     replace cod  with mem_cod
     replace nome with mem_nome
     replace nasc with mem_nasc
     replace sexo with mem_sexo
     replace ec   with mem_ec
     replace end  with mem_end
     replace cep  with mem_cep
     replace cid  with mem_cid
     replace uf   with mem_uf
     replace fone with mem_fone
     replace cpf  with mem_cpf
     replace prof with mem_prof
     replace obs  with mem_obs
   endif
enddo
close all
return nil

Error BASE/1003 ...

Enviado: 20 Fev 2016 20:29
por JoséQuintas
Tem esse campo no arquivo?
o programa conseguiu abrir o arquivo?

Error BASE/1003 ...

Enviado: 20 Fev 2016 20:47
por alxsts
Olá!
arcanjoebc escreveu:Só que não é uma variável e sim, um campo da base de dados.
Tente abrir o arquivo assim:

Código: Selecionar todos

use clientes shared new
Dá para melhorar a qualidade do teu código e a performance do programa. O uso do comando LOCATE não é apropriado para o uso que você está fazendo dele. O correto é ter uma tabela, de clientes no caso, com pelo menos um índice (chave primária) e fazer uso da função DbSeek().

Error BASE/1003 ... [RESOLVIDO]

Enviado: 20 Fev 2016 21:13
por arcanjoebc
Obrigado por responderem! Amigo José Quintas, eu não estava criando corretamente a base de dados DBF, então, o campo não existia. Agora, estou usando o seguinte código para criar a base de dados:

Código: Selecionar todos

*-----------------------------------------*
* PROGRAMA   : struc2.prg                 *
* AUTOR      : Everaldo Bernardo Cunha    *
* DATA       : 15/02/2016                 *
* FINALIDADE : Criar base de dados .dbf   *
*-----------------------------------------*
	 
PROCEDURE Struc2
if .not. file("clientes.dbf")
 aDBF := {}
 //
 aAdd(aDBF, {"COD", "N",10,0})
 aAdd(aDBF, {"NOME", "C",30,0})
 aAdd(aDBF, {"NASC", "D",08,0})
 aAdd(aDBF, {"END", "C",35,0})
 aAdd(aDBF, {"CID", "C",35,0})
 aAdd(aDBF, {"CEP", "C",10,0})
 aAdd(aDBF, {"UF", "C",02,0})
 aAdd(aDBF, {"FONE", "C",14,0})
 aAdd(aDBF, {"CPF", "C",14,0})
 aAdd(aDBF, {"PROF", "C",20,0})
 aAdd(aDBF, {"SEXO", "C",01,0})
 aAdd(aDBF, {"EC", "C",01,0})
 aAdd(aDBF, {"OBS", "C",50,0})
 //
 dbCreate("clientes",aDBF)
endif
RETURN
Então, o programa funcionou perfeitamente ... agradeço-lhes a ajuda, tudo de bom!

Everaldo