Página 1 de 1

ERRO DBCMD/2001

Enviado: 03 Abr 2011 14:32
por Antonio Matheus
Boa tarde estou fazendo um cadastro de cliente para um amigo e faco o cadastro normal entao vou na consulta por codigo quando volto para o cadastro ele da este este erro DBCMD/2001o que seria este erro esta na linha en que eu faço a indexação por codigo,nome,telefonee data de nascimento por favor me ajudem desde ja agradeço a colaboração de todos.

Re: ERRO DBCMD/2001

Enviado: 03 Abr 2011 17:36
por Clipper
Prezado Antonio

Esse erro é causado porque a area de trabalho nao está em uso, em alguma rotina você deve estar fechando o arquivo ou então selecionando outra area de trabalho, seria interessante que você postasse o código para podermos analisar.

Até logo.

Marcelo

Re: ERRO DBCMD/2001

Enviado: 03 Abr 2011 23:58
por Antonio Matheus
Boa noite segue os prgs do cadastro de cliente

cliente.prg // cadastro de cliente

Código: Selecionar todos

#INCLUDE "BOX.CH"
SAVE SCREEN TO aa

USE CLIENTE ALIAS CLIENTE NEW
IF (!FILE("CODIGO.NTX"))
   INDEX ON CODIGO TO CODIGO
ENDIF
IF (!FILE("CLIENTE.NTX"))
   INDEX ON NOME TO CLIENTE
ENDIF
IF (!FILE("TEL1.NTX"))
   INDEX ON TELEFONE TO TEL1
ENDIF
IF (!FILE("NASC.NTX"))
   INDEX ON ANIVER TO NASC
ENDIF
SET INDEX TO CODIGO,CLIENTE,TEL1,NASC // o erro esta dando aqui
    DO WHILE .T.
    vCodigo:=0
    vNome:=SPACE(50)
    vEndereco:=SPACE(40)
    vBairro:=SPACE(25)
    vCompl:=SPACE(30)
    vCidade:=SPACE(30)
    vTelefone:=SPACE(11)
    vCelular:=SPACE(11)
    vTelcom:=SPACE(11)
    dAniver:=CTOD(" ")
    vMae:=SPACE(50)
    vCep:=SPACE(09)
    vUf:=SPACE(02)
    vEmail:=SPACE(30)
    vCpf:=SPACE(13)
    vRg:=SPACE(13)
    @00,00,23,79 BOX B_DOUBLE +" "
    @02,01 TO 02,78 DOUBLE
    @21,01 TO 21,78 DOUBLE
    @02,00 SAY CHR(204)
    @02,79 SAY CHR(185)
    @21,00 SAY CHR(204)
    @21,79 SAY CHR(185)
    @22,63 SAY "< ESC Sair ! >"
    @01,28 SAY "[ Cadastro de clientes ]"  
    @03,01 SAY "Codigo..............:"
    @04,01 SAY "Nome................:"
    @05,01 SAY "Endereco............:"
    @06,01 SAY "Complemnto..........:"
    @07,01 SAY "Bairro..............:"
    @08,01 SAY "Cidade..............:"
    @09,01 SAY "Telefone............:"
    @10,01 SAY "Celular.............:"
    @11,01 SAY "Telefone Comercial..:"
    @12,01 SAY "Data Aniversario....:"
    @13,01 SAY "Nome Mae............:"
    @14,01 SAY "Cep.................:"
    @15,01 SAY "Estado..............:"
    @16,01 SAY "Email...............:"
    @17,01 SAY "Cpf.................:"
    @18,01 SAY "Rg..................:"
    @03,23 GET vCodigo PICTURE "99999"
    READ
    IF LASTKEY()=27
       EXIT
    ENDIF
    IF vCodigo=0
       ALERT(" Codigo Invalido ; < Tecle ENTER > !")
       LOOP
    ENDIF
    GO TOP
    SEEK vCodigo
    IF (FOUND())
       ALERT(" Codigo Ja Cadrastado ; < Tecle ENTER > !")
       @04,23 SAY nome PICTURE "@!"  
       @05,23 SAY endereco PICTURE "@!"
       @06,23 SAY compl PICTURE "@!"
       @07,23 SAY bairro PICTURE "@!"
       @08,23 SAY cidade PICTURE "@!"
       @09,23 SAY telefone PICTURE "@R (999) 9999-9999"
       @10,23 SAY celular PICTURE "@R (999) 9999-9999"
       @11,23 SAY telcom PICTURE "@R (999) 9999-9999"
       @12,23 SAY aniver PICTURE "@D"
       @13,23 SAY mae PICTURE "@!"
       @14,23 SAY cep PICTURE "99999-999"
       @15,23 SAY uf PICTURE "@!"
       @16,23 SAY email
       @17,23 SAY cpf PICTURE "@R 999.999.999-99"
       @18,23 SAY rg PICTURE "999999999-99"
       SET COLOR TO
       INKEY(0)
       LOOP
    ENDIF
      @04,23 GET VNOME PICTURE "@!" VALID (!EMPTY(vNome))
      @05,23 GET VENDERECO PICTURE "@!"
      @06,23 GET VCOMPL PICTURE "@!"
      @07,23 GET VBAIRRO PICTURE "@!"
      @08,23 GET VCIDADE PICTURE "@!"
      @09,23 GET VTELEFONE PICTURE "@R (999) 9999-9999"
      @10,23 GET VCELULAR PICTURE "@R (999) 9999-9999"
      @11,23 GET VTELCOM PICTURE "@R (999) 9999-9999"
      @12,23 GET DANIVER PICTURE "@D"
      @13,23 GET VMAE PICTURE "@!"
      @14,23 GET VCEP PICTURE "99999-999"
      @15,23 GET VUF PICTURE "@!"
      @16,23 GET VEMAIL
      @17,23 GET VCPF PICTURE "@R 999.999.999-99"
      @18,23 GET VRG PICTURE "999999999-99"  
      READ
      IF LASTKEY()!=27
         APPEND BLANK
         REPLACE CODIGO WITH vCodigo
         REPLACE NOME WITH vNome
         REPLACE ENDERECO WITH vEndereco
         REPLACE COMPL WITH vCompl
         REPLACE BAIRRO WITH vBairro
         REPLACE CIDADE WITH vCidade
         REPLACE TELEFONE WITH vTelefone
         REPLACE CELULAR WITH vCelular
         REPLACE TELCOM WITH vTelcom
         REPLACE ANIVER WITH dAniver
         REPLACE MAE WITH vMae
         REPLACE CEP WITH vCep
         REPLACE UF WITH vUf
         REPLACE EMAIL WITH vEmail
         REPLACE CPF WITH vCpf
         REPLACE RG WITH vRg
         COMMIT
      ENDIF
      ALERT("Cadastro Feito com Sucesso !")
      RESTORE SCREEN FROM aa
    ENDDO
    CLEAR 
cad2.prg //tela principal

Código: Selecionar todos

#INCLUDE "BOX.CH"

SET DATE BRITISH
SET CENTURY ON
SET SCOREBOARD OFF
SET DELETED ON
SET WRAP ON
nOp:=1
CLEAR SCREEN
@24,00 CLEAR TO 24,79
  DO WHILE .T.
     SET COLOR TO RG+/B+
     @24,00 SAY PADC("Antonio Ferreira Moura",80)  COLOR "RG+/B+"
     SET COLOR TO BG+/BG+
     @01,00,23,79 BOX REPLICATE(CHR(178),9)
     SET COLOR TO GR+/B+
     @00,00 CLEAR TO 00,79
     @00,01 SAY "Sistema de Controle de Cliente Versao 1.0 FREE"
     @00,68 SAY DTOC(DATE())
     SET COLOR TO W+/B+
     SET COLOR TO B+/B+
     @06,05 CLEAR TO 16,30
     SET COLOR TO W+/N
     SET COLOR TO W+/BG+,W+/B+,,,GR+/BG+
     SET COLOR TO W+/BG+
     @05,04 CLEAR TO 15,28
     @05,04,15,28 BOX B_SINGLE
     @06,06 PROMPT "Cadastro de Cliente   "
     @07,06 PROMPT "Alterar Cliente       "
     @08,06 PROMPT "Excluir Cliente       "
     @09,06 PROMPT "Consulta por Codigo   "
     @10,06 PROMPT "Consulta por Nome     "
     @11,06 PROMPT "Relatorio por Codigo  "
     @12,06 PROMPT "Relatorio por Nome    "
     @13,06 PROMPT "Manutencao            "
     @14,06 PROMPT "Sair do Programa      "
     MENU TO nOp
     DO CASE
     CASE nOp=1
        DO CLIENTE
     CASE nOp=2
        DO ALTCLI
     CASE nOp=3
        DO EXCCLI
     CASE nOp=4
        DO CONSCOD
     CASE nOp=5
        DO CONSNOM
     CASE nOp=6
        DO RELCOD
     CASE nOp=7
        DO RELNOM
     CASE nOp=8
        DO MANUTEN
     CASE nOp=9
        EXIT
     ENDCASE
  ENDDO
  CLEAR
  RETURN
conscod.prg // consulta por codigo

Código: Selecionar todos

CLEAR 
@01,00 TO 03,79 DOUBLE
@04,00 TO 23,79 DOUBLE
@06,01 TO 06,78 DOUBLE
@21,01 TO 21,78 DOUBLE
@06,00 SAY CHR(204)
@21,00 SAY CHR(204)
@06,79 SAY CHR(185)
@21,79 SAY CHR(185)


SELECT 1
USE CLIENTE
IF (!FILE("CODIGO.NTX"))
   INDEX ON STR(CODIGO,5,0) TO CODIGO
ENDIF
SET INDEX TO CODIGO
DO WHILE .T.
   vCodigo:=0
   cSai:="N"

   @02,25 SAY "[ Consulta por Codigo ]"
   @22,63 SAY "< ESC Sair ! >"
   @05,01 SAY "Codigo...................:" GET vCodigo PICTURE "99999" VALID(vCodigo>0)
   READ
   IF LASTKEY()=27
      EXIT
   ENDIF
   GO TOP
   SEEK vCodigo
   IF FOUND()
      @ 07,01 SAY "Nome................:" +NOME
      @ 08,01 SAY "Endereco............:" +ENDERECO
      @ 09,01 SAY "Complemento.........:" +COMPL
      @ 10,01 SAY "Bairro..............:" +BAIRRO
      @ 11,01 SAY "Cidade..............:" +CIDADE
      @ 12,01 SAY "Telefone............:" +TELEFONE
      @ 13,01 SAY "Celular.............:" +CELULAR
      @ 14,01 SAY "Telefone Comercial..:" +TELCOM
      @ 15,01 SAY "Data de Aniversario.:" +DTOC(ANIVER)
      @ 16,01 SAY "Nome Mae............:" +MAE
      @ 17,01 SAY "Cep.................:" +CEP
      @ 18,01 SAY "Estado..............:" +UF
      @ 19,01 SAY "Email...............:" +EMAIL
      @ 20,01 SAY "C.p.f...............:" +CPF
      @ 20,42 SAY "Rg..................:" +RG
   ELSE
      ALERT("Codigo Nao Cadastro !")
   ENDIF
   @ 22,01 SAY "Deseja Sair?...:" GET cSai PICTURE "@!" VALID (cSai $ "SN")
   READ
   IF cSai= "S"
      EXIT
   ENDIF
ENDDO
CLEAR 
RETURN
consmon.prg // consulta por nome

Código: Selecionar todos

CLEAR SCREEN

@01,00 TO 03,79 DOUBLE
@04,00 TO 23,79 DOUBLE
@06,01 TO 06,78 DOUBLE
@21,01 TO 21,78 DOUBLE
@06,00 SAY CHR(204)
@21,00 SAY CHR(204)
@06,79 SAY CHR(185)
@21,79 SAY CHR(185)
SELECT 1
USE CLIENTE
IF (!FILE("CLIENTE.NTX"))
   INDEX ON NOME TO CLIENTE
ENDIF
SET INDEX TO CLIENTE
DO WHILE .T.
   vNome:=SPACE(50)
   cSai= "N"
   @02,25 SAY "[ Consulta por Nome ]" 
   @20,63 SAY "< ESC Sair ! >"
   @22,01 SAY "Digite o Nome.:" GET vNome PICTURE "@!" 
   READ
   IF LASTKEY()=27
      EXIT
   ENDIF
   GO TOP
   SEEK vNome
   IF (FOUND())
      @07,01 SAY "Nome..................:" +NOME
      @08,01 SAY "Endereco..............:" +ENDERECO
      @09,01 SAY "Complemento...........:" +COMPL
      @10,01 SAY "Bairro................:" +BAIRRO
      @11,01 SAY "Cidade................:" +CIDADE
      @12,01 SAY "Telefone..............:" +TELEFONE
      @13,01 SAY "Celular...............:" +CELULAR
      @14,01 SAY "Telefone comercial....:" +TELCOM
      @15,01 SAY "Data Aniversario......:" +DTOC(ANIVER)
      @16,01 SAY "Nome Mae..............:" +MAE
      @17,01 SAY "Cep...................:" +CEP
      @18,01 SAY "Estado................:" +UF
      @19,01 SAY "E-mail................:" +EMAIL
      @20,01 SAY "C.p.f.................:" +CPF
      @18,28 SAY "Rg....................:" +RG
   ELSE
      ALERT("Nome Nao Cadastrado !")
   ENDIF
   READ
   IF cSai= "S"
      EXIT
   ENDIF
ENDDO
CLEAR

Re: ERRO DBCMD/2001

Enviado: 04 Abr 2011 07:35
por Clipper
Prezado Antonio

O problema é que ao voltar a tela de inclusão o sistema gera o erro porque a AREA já está aberta, então o sistema não consegue abir o arquivo novamente na mesma AREA.

Solução : Opção 1 - Ao finalizar cada rotina você deve fechar o(s) arquivo(s)
Opção 2 - Você pode abrir todos os arquivos no inicio dos sistema e trabalhar selecionando o ALIAS ou múmero da AREA e fechando apenas no fim do sistema.

PS. Interessante saber que esse erro não ocorria nas versões anteriores a 5.1, você podia tranquilamente abrir um arquivo em uma área já aberta que o prórpio Clipper se encarregava de fechar o arquivo antigo e abrir o novo.

Até logo.

Marcelo

Re: ERRO DBCMD/2001

Enviado: 04 Abr 2011 07:47
por Toledo
Antonio, sempre que em um PRG você abrir arquivos de dados (DBF), o certo seria você fechar estes arquivos ao encerrar o PRG. Então você teria que usar o comando CLOSE ALL no final destes PRGs (onde são abertos DBFs) ou depois do comando ENDCASE no seu arquivo CAD2.PRG (Tela principal). Se você optar em usar CLOSE ALL depois do ENDCASE no arquivo CAD2.PRG fica mais fácil, pois você não terá que mexer nos outros PRGs.

Abraços,

Re: ERRO DBCMD/2001

Enviado: 04 Abr 2011 10:02
por billy1943
Eu uso uma rotina de abertura de arquivos de dados com seus índices, exposta abaixo, que sana qualquer problema de tentar abrir arquivos já abertos.

Vamos supor que precise abrir, em uma rotina, o arquivo de clientes. Eu coloco o comando sem me preocupar se ele está aberto ou não:

Forma 1 - vou trabalhar com o arquivo e seus índices
ABRECLIE(0) // coloco o zero como parametro e retorno da procedure com o arquivo aberto
select clie
.......

Forma 2 - Vou apenas testar se os arquivos estão de acordo , como quando elimino os índices na sua reorganização, etc.
ABRECLIE(1) // coloco 1 como parametro e retorno da procedure com o arquivo já fechado
ABREFORN(1) // testo o arquivo e seus índices
....


********************************************************************************
** OP_NM_A = função de abertura em modo compartilhado
** parametros: arquivo e alias
** ROP_EX_A = função de abertura em modo exclusivo
** não necessita parametros -
** m->pathger = variável que contém o "caminho" = ex: F:\estoque\"
********************************************************************************
PROCEDURE abreclie(fecha)

if (select("clie") <> 0)
return
endif

select 0 // zero
op_nm_a(m->pathger + "CLIENTES","CLIE")

if ! file (m->pathger+"clie1.cdx") // testa se o índice existe
set index to
rop_ex_a() // abre em modo exclusivo
pack // compacta o .DBF
index on codigo_cli tag ind01 to (m->pathger+"clie1")
index on nome_cli tag ind02 to (m->pathger+"clie1")
index on cid_cli + nome_cli tag ind03 to (m->pathger+"clie1")
index on uf_cli + nome_cli tag ind04 to (m->pathger+"clie1")
index on fone_cli + nome_cli tag ind05 to (m->pathger+"clie1")
index on cnpj + nome_cli tag ind06 to (m->pathger+"clie1")
dbunlock() // libera o modo exclusivo
rop_nm_a() // coloca novamente em modo compartilhado
endif

set index to (m->pathger+"clie1") // seta o índice

if type("fecha") <> nil
if fecha == 1
use // fecha o arquivo
endif
endif

return

Re: ERRO DBCMD/2001

Enviado: 04 Abr 2011 20:04
por Antonio Matheus
Boa noite a todos fiz como pc Toledo falou e deu certo muito obrigado a todos pela força e que DEUS os abencois