ERRO DBCMD/2001
Moderador: Moderadores
-
Antonio Matheus
- Usuário Nível 1

- Mensagens: 28
- Registrado em: 13 Jul 2010 23:18
- Localização: sao caetano dosul
ERRO DBCMD/2001
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
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
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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
-
Antonio Matheus
- Usuário Nível 1

- Mensagens: 28
- Registrado em: 13 Jul 2010 23:18
- Localização: sao caetano dosul
Re: ERRO DBCMD/2001
Boa noite segue os prgs do cadastro de cliente
cliente.prg // cadastro de cliente
cad2.prg //tela principal
conscod.prg // consulta por codigo
consmon.prg // consulta por nome
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 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
RETURNCó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
RETURNCó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- Anexos
-
CLIENTE.rar- (539 Bytes) Baixado 103 vezes
Editado pela última vez por Toledo em 04 Abr 2011 07:19, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Re: ERRO DBCMD/2001
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
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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: ERRO DBCMD/2001
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,
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Re: ERRO DBCMD/2001
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
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
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
-
Antonio Matheus
- Usuário Nível 1

- Mensagens: 28
- Registrado em: 13 Jul 2010 23:18
- Localização: sao caetano dosul
Re: ERRO DBCMD/2001
Boa noite a todos fiz como pc Toledo falou e deu certo muito obrigado a todos pela força e que DEUS os abencois

