Erro de abertura de arquivos

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

JOSE GENOVEZI
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 28 Jul 2009 20:55
Localização: CURITIBA/PR

Erro de abertura de arquivos

Mensagem por JOSE GENOVEZI »

Olá para todos, estou com um problema que ta me tirando o sono.

Tenho uma modulo principal como segue abaixo. Me desculpe por ele ser longo.

Código: Selecionar todos

set scoreboard off
set console off
set procedure to lojaproc
set softseek on
set bell off
set wrap on
set decimals to 3
set date german
public fim
registro = 0
clear
set color to w+/r
@ 04,14 to 18,61
@ 05, 15 clear to 17, 60
@ 05, 21 say " Configurando arquivos do sistema "
@ 07, 18 say "Gerando Arquivos de Indices"
*******************************************
use clientes
if .NOT. file("ind1.NTX")
   index on ccodigo to ind1
   pack
endif

if .NOT. file("ind2.NTX")
   index on cnome to ind2
   pack
endif

if .NOT. file("ind3.NTX")
   index on ccpf to ind3
   pack
endif
*******************************************
use credito
if .NOT. file("ind11.NTX")
   index on accodigo to ind11
   pack
endif
*******************************************
use produtos
if .NOT. file("ind21.NTX")
   index on pcodigo to ind21
   pack
endif
if .NOT. file("ind22.NTX")
   index on pdescricao to ind22
   pack
endif
*******************************************
use estoque
if .NOT. file("ind31.NTX")
   index on ecodigo to ind31
   pack
endif
if .NOT. file("ind32.NTX")
   index on enotafisc to ind32
   pack
endif
if .NOT. file("ind33.NTX")
   index on eFORNECEDE to ind33
   pack
endif
if .NOT. file("ind34.NTX")
   index on dtos(edatalanc) to ind34
   pack
endif
*******************************************
use vendas
if .NOT. file("ind41.NTX")
   index on vpedido to ind41
   pack
endif

if .NOT. file("ind42.NTX")
   index on vcodclient to ind42
   pack
endif

if .NOT. file("ind43.NTX")
   index on vcodprodut to ind43
   pack
endif

if .NOT. file("ind44.NTX")
   index on vvendedor to ind44
   pack
endif
********************************************
use cpagar
if .NOT. file("ind51.NTX")
   index on cpforneced to ind51
   pack
endif

if .NOT. file("ind52.NTX")
   index on dtos(cpvencimen) to ind52
   pack
endif
*********************************************
use creceber
if .NOT. file("ind61.NTX")
   index on crcodclien to ind61
   pack
endif

if .NOT. file("ind62.NTX")
   index on dtos(crvencimen) to ind62
   pack
endif

if .NOT. file("ind63.NTX")
   index on CRPEDIDO to ind63
   pack
endif

*********************************************
use forneced
if .NOT. file("ind71.NTX")
   index on fcodigo to ind71
   pack
endif

if .NOT. file("ind72.NTX")
   index on frazao to ind72
   pack
endif
*********************************************
use vendedor
if .NOT. file("ind81.NTX")
   index on vvcodigo to ind81
   pack
endif

if .NOT. file("ind82.NTX")
   index on vvnome to ind82
   pack
endif
**********************************************
use gprod
if .NOT. file("ind91.NTX")
   index on gpcodigo to ind91
   pack
endif
if .NOT. file("ind92.NTX")
   index on gpdescrica to ind92
   pack
endif
***********************************************
use tpgto
if .NOT. file("ind105.NTX")
   index on tpcodigo to ind105
   pack
endif
if .NOT. file("ind102.NTX")
   index on tpdescri to ind102
   pack
endif
************************************************
use config
if .NOT. file("ind115.NTX")
   index on registro to ind115
   pack
endif
close all
************************************************
select 1
use clientes index ind1,ind2,ind3 alias clientes
************************************************
select 2
use credito index ind11 alias credito
*******************************************
select 3
use produtos index ind21, ind22 alias produtos
*******************************************
select 4
use estoque index ind31,ind32,ind33,ind34 alias estoque
*******************************************
select 5
use vendas index ind41, ind42, ind43 alias vendas
********************************************
select 6
use cpagar index ind51, ind52 alias cpagar
*********************************************
select 7
use creceber index ind61, ind62, ind63 alias crecebe
*********************************************
select 8
use forneced index ind71, ind72 alias forneced
*********************************************
select 9
use vendedor index ind81, ind82 alias vendedora
**********************************************
select 10
use gprod index ind91, ind92 alias gprod
***********************************************
select 11
use TPGTO index ind105, ind102 alias TPGTOS
***********************************************
***********************************************
select 12
use config index ind115 alias configura
***********************************************

@ 07,48 say "Indices OK"
v_uso = 0
v_sen = space(06)
v_sen0 = space(06)
v_sen1 = space(01)
v_sen2 = space(01)
v_sen3 = space(01)
v_sen4 = space(01)
v_sen5 = space(01)
v_sen6 = space(01)
v_tempo = 0

do while .t.
   if v_tempo = 2
      clear all
      quit
   endif
*   @ 09,18 say "Libera‡ao para o Sistema "
*   @ 11,18 say "Codigo usuario..:" get v_uso pict "999"
*   read
*   if v_uso = 0
*      clear
*      quit
*   endif
*      select vende
*   set order to 1
*   go top
*   seek v_uso
*   if .not. found()
*       do limpa23
*       @ 12,18 say "Usuario nao cadastrado.."
*       v_uso = 0
*       wait
*       set color to w+/r
*       loop
*   else
*       v_nome = vvnome
*       v_sen = senha
*       @ 12,18 say v_nome
*   endif
*   @ 14,18 say "Senha usuario...: [      ]"
*   @ 14,37 get v_sen1
*   read
*   @ 14,37 say "*"
*   @ 14,38 get v_sen2
*   read
*   @ 14,38 say "*"
*   @ 14,39 get v_sen3
*   read
*   @ 14,39 say "*"
*    @ 14,40 get v_sen4
*   read
*   @ 14,40 say "*"
*   @ 14,41 get v_sen5
*   read
*   @ 14,41 say "*"
*   @ 14,42 get v_sen6
*   read
*   @ 14,42 say "*"
*   v_sen0 = v_sen1+v_sen2+v_sen3+v_sen4+v_sen5+v_sen6
*   set color to w+/r
*   read
*   if v_sen0 <> v_sen
*      @ 15,18 say "Senha invalida...."
*      quit
*  else
   do razao
   DO WHILE .t.
   SET MESSAGE TO 23 CENTER
   SET COLOR TO w/B/W+/RB
   @ 23,01 SAY "                                                                       "
   @ 04,01 to 21,22
   @ 05,02 say    "   -> M E N U <-  "
   @ 06,01 SAY    "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´"
   @ 07,02 PROMPT " *-Produtos         " MESSAGE "Cadastro de Produtos"
   @ 08,02 PROMPT " *-Fornecedores     " MESSAGE "Cadastro de Fornecedores"
   @ 09,02 PROMPT " *-Cliente          " MESSAGE "Cadastro de Clientes"
   @ 10,02 PROMPT " *-Estoque          " MESSAGE "Movimenta‡ao de Estoque"
   @ 11,02 PROMPT " *-Vendedores       " MESSAGE "Cadastro de Vendedores"
   @ 12,02 PROMPT " *-Tipos Produtos   " MESSAGE "Cadastro de Tipos de Produtos"
   @ 13,02 PROMPT " *-Tipos Pagamento  " MESSAGE "Cadastro de Tipos de Pagamentos"
   @ 14,02 PROMPT " *-Contas Pagar     " MESSAGE "Cadastro de Contas a Pagar"
   @ 15,02 PROMPT " *-Contas Receber   " MESSAGE "Cadastro de Contas a Receber"
   @ 16,02 PROMPT " *-Abertura Credito " MESSAGE "Cadastro de Abertura de Credito"
   @ 17,02 PROMPT " R-Relatorios       " MESSAGE "Relatorios do Sistema" 
   @ 18,02 PROMPT " C-Configuracoes    " MESSAGE "Cadastro de Configura‡oes"
   @ 19,02 PROMPT " P-P.D.V            " MESSAGE "Programa de Vendas"
   @ 20,02 PROMPT " *-Fim              " MESSAGE "Fim do Aplicativo"
   MENU TO VCF
     DO CASE
     CASE VCF = 1
     DO LOJA01 && produtos
     CASE VCF = 2
     DO LOJA02 && fornecedores
     CASE VCF = 3
     DO LOJA200 && clientes
     CASE VCF = 4 && estoque
     DO LOJA04 
     CASE VCF = 5 && vendedores 
     DO LOJA05
     CASE VCF = 6 && tipos produtos
     DO LOJA06
     CASE VCF = 7 && tipos pagamentos
     DO LOJA07 
     CASE VCF = 8 && contas a pagar
     DO LOJA08
     CASE VCF = 9 && contas a receber
     DO LOJA09
     CASE VCF = 10 && Abertura credito
     DO LOJA10 
     CASE VCF = 11 && realatorio
     DO LOJA100 
     CASE VCF = 12 && configuracoes
     DO LOJA03
     CASE VCF = 13 && pdv
     DO LOJA300
     CASE VCF = 14 && sair
     clear
     quit
   ENDCASE VCF            
   VCF = 0
ENDDO
*ENDIF
ENDDO
**************
*    F i m   *
**************

Nos outros modulos vou usar as areas selecionadas com o select, por exemplo abaixo:
save screen to tela1
select clientes
set order to 3
do tela
@ 04,01 say "             A L T E R A C A O   D E   C R E D I T O S                       " 
@ 23,02 say "Mensagem:"
@ 05,00 say "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´"
V_data   = date()
v_acodi    = space(14)
v_anome    = space(40)
v_aempresa = space(40)
v_aendereco= space(40)
v_abairro  = space(25)
v_acep     = space(09)
v_auf      = space(02)
v_acidade  = space(25)
v_afuncao  = space(25)
v_aadmissao= date()
v_asalario = 0
v_alimite  = 0
v_amae     = space(40)
v_apai     = space(40)
v_aconjuge = space(40)
v_arefpess = space(40)
v_arefcome = space(40)
v_afone    = space(25)

v_cf = space(01)
DO WHILE .t.
   do limpa23
   @ 06,03 SAY "Digite o CPF.:" get v_acodi pict "999.999.999/99"
   @ 23,15 SAY "Tecle [ENTER] para retornar !"
   read
   if v_aCODI = SPACE(14)
        DO TELA
        exit
   endif
   seek v_Acodi
   if .NOT. found()
      do limpa23
      @ 23,15 say "C.P.F nao cadastrado "
      wait
      v_acodi = space(14)
      loop
   else
      v_anome = cnome
      set color to w+/b
      @ 06,35 say v_anome
      set color to w/b
      Select credito
      set order to 1
      seek v_acodi
      if .not. found()
          do limpa23
          @ 23,15 say "Este cliente nao tem credito aberto.."
      else
           V_data     = datA
           v_acodi    = accodigo 
           v_aempresa = acempresa
           v_aendereco= acendereco
           v_abairro  = accbairro
           v_acep     = acccep
           v_auf      = accuf
           v_acidade  = accidade
           v_afuncao  = accfuncao
           v_aadmissao= accadmissao
           v_asalario = accsalario
           v_alimite  = acclimite
           v_amae     = accmae
           v_apai     = accpai
           v_aconjuge = accconjuge
           v_arefpess = accrefpess
           v_arefcome = accrefcome
           v_afone    = accfone

           do tacredito
           read
           V_alimite = v_asalario * 40 /100
           @ 19,25 say v_alimite pict "@E 999,999.99" 
           @ 23,15 SAY "Confirma a Alteracao                     "  GET v_cf pict "!" VALID(v_cf$"SN")
           READ
           IF v_cf = "S"
              Select credito
              set order to 1
              REPLACE  data        WITH v_data;
                       accodigo    WITH v_acodi;
                       acempresa   WITH v_aempresa;
                       acendereco  WITH v_aendereco;
                       accidade    WITH v_acidade;
                       accbairro   WITH v_abairro;
                       acccep      WITH v_acep;
                       accuf       WITH v_auf;
                       accfuncao   WITH v_afuncao;
                       accadmissa  WITH v_aadmissao;
                       accsalario  WITH v_asalario;
                       acclimite   WITH v_alimite;
                       accpai      WITH v_apai;
                       accmae      WITH v_amae;
                       accnome     WITH v_anome;
                       accconjuge  WITH v_aconjuge;
                       accrefcome  with v_arefpess;
                       accrefpess  with v_arefcome;
                       accfone     with V_afone
                       v_acodi    = space(14)
                       v_anome    = space(40)
                       v_aempresa = space(40)
                       v_aendereco= space(40)
                       v_abairro  = space(25)
                       v_acep     = space(09)
                       v_auf      = space(02)
                       v_acidade  = space(25)
                       v_afuncao  = space(25)
                       v_aadmissao= date()
                       v_asalario = 0
                       v_alimite  = 0
                       v_apai     = space(25)
                       v_aconjuge = space(25)
                       v_arefpess = space(25)
                       v_arefcome = space(25)
                       v_afone    = space(25)
                       v_cf       = space(01)
                       @ 06,01 CLEAR TO 21,78          
                       select clientes
                       set order to 3
            ELSE
                       v_acodi    = space(14)
                       v_anome    = space(40)
                       v_aempresa = space(40)
                       v_aendereco= space(40)
                       v_abairro  = space(25)
                       v_acep     = space(09)
                       v_auf      = space(02)
                       v_acidade  = space(25)
                       v_afuncao  = space(25)
                       v_aadmissao= date()
                       v_asalario = 0
                       v_alimite  = 0
                       v_apai     = space(25)
                       v_aconjuge = space(25)
                       v_arefpess = space(25)
                       v_arefcome = space(25)
                       v_afone    = space(25)
                       @ 06,01 CLEAR TO 21,78 
                       select clientes
                       set order to 3
                       loop       
            ENDIF
       endif
    endif
   ENDDO
restore screen from tela1
return
*******
* fim *
*******
E da o erro de TYPE MISMATCH. O que é esse errro.

aproveitando alguem sugere alguma mudança na forma de eu programar, nunca fiz curso. comprei um livro usado do Geraldo Vidal e comecei a seguir os exemplos deles.

Abraços a todos. :{

-----------------------------------------------------
Nota da Moderação (Toledo):
O presente tópico foi editado para colocar a tag CODE
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Erro de abertura de arquivos

Mensagem por Toledo »

Olá José, este erro ocorre quando você tenta gravar em um campo numérico (DBF) uma variável tipo caracter ou vice-versa.

Geralmente na mensagem de erro mostra em qual linha ocorreu o erro, então é só olhar esta linha no seu código.

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
JOSE GENOVEZI
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 28 Jul 2009 20:55
Localização: CURITIBA/PR

Re: Erro de abertura de arquivos

Mensagem por JOSE GENOVEZI »

Olá Toledo, esse erro de incompatibilidade de dados e já sei, o meu problema é que o erro aparece na linha onde esta o select clientes(por exemplo). No modulo princiapal que eu criei está assim,

Select 1
use clientes index ind1 alias clientes

Quando vou abrir a area 1 em outro modulo com os comandos abaixo.

select clientes
set order to 1

Aparece o erro. Tem alguma configuração de maquina a ser feita alem do set clipper f=... e Files=...

Estou usando win98 na maquina que estou desenvolvendo o programa e vou usar o programa em uma maquina que tem o XP.

Essa que é minha dúvida. Em outros modulos também ocorre o mesmo erro com o Select.


Grato

José
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Erro de abertura de arquivos

Mensagem por Toledo »

Olá José, o erro "TYPE MISMATCH" está ocorrendo na linha onde tem o SELECT CLIENTES, é isto? Este erro ocorre tanto no micro com Windows 98 como no Windows XP?

Bom, sobre a configuração do SET CLIPPER e FILES no Windows XP, você tem que fazer isto nos arquivos AUTOEXEC.NT e CONFIG.NT que está na pasta C:\WINDOWS\SYSTEM32.

Outra coisa, qual é a versão do seu Clipper?

Obs.: para ver a versão do seu Clipper, digite CLIPPER X e depois olhe a primeira linha da compilação. Se não for as versões 5.2e ou 5.3b, é melhor fazer uma atualização.

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
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Erro de abertura de arquivos

Mensagem por gvc »

Fazer PACK no meio do sistema não é uma boa pratica. Pode corromper seus indices.
Tire o pack da indexação e coloque uma opção só para isso.

Quando for criar um indice, recrie todos os que são do mesmo arquivo.

Código: Selecionar todos

use clientes
if !file("ind1.NTX") .or. !file("ind2.NTX") .or. !file("ind3.NTX")
   index on ccodigo to ind1
   index on cnome to ind2
   index on ccpf to ind3
end
Poste a mensagem de erro, módulo e número da linha do erro e o fonte do módulo que apresentou o erro.
É sempre no mesmo local do sistema? Acontece em outros lugares do sistema?
Procura no sistema se vc cria algum indices com nome repetido ou abre indices repetidos.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Erro de abertura de arquivos

Mensagem por sygecom »

Esse erro está bem estranho mesmo. José, você fez alguma customização em ErrorSys.prg ?
O que pode esta acontecendo é que a AREA 1 esteja sendo subistituida por outro ALIAS, deixando seu Select 1 com uma alias diferente do que você esta esperando, porem de uma olhada rapida no fonte que você postou e não achei algo assim. Alem do comentario do Colega GVC, eu vi que você abre todos os DBF e logo em seguida fecha para abrir de novo, não é uma boa pratica isso, seria ideal você abrir uma unica vez e nessa abertura você faz as verificações que você faz.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

Re: Erro de abertura de arquivos

Mensagem por Iwasa »

JOSE GENOVEZI escreveu:select 1
use clientes index ind1,ind2,ind3 alias clientes
************************************************
select 2
use credito index ind11 alias credito
*******************************************
select 3
use produtos index ind21, ind22 alias produtos
*******************************************
Bom, por questão de estética e até para evitar erros ou conflitos eu usaria desta forma:

Código: Selecionar todos

Select 1
  Use Clientes alias dbCLTS
      Set Index to ind1,ind2,ind3 
Select 2
  Use Credito alias dbCRDT
      Set Index to ind11
Select 3
  Use Produtos alias dbPRDT
      Set Index to ind21, ind22
Por regra pessoal eu jamais uso o ALIAS com o mesmo nome da tabela, para evitar um eventual conflito, mas creio que não há problemas nisso, mas... pessoalmente eu evito isso.
E para mudar para uma área diferente sempre uso a ordem numerica apesar de ser um pouco mais trabalhoso por ter que saber qual tabela está em qual área... mas é uma segurança a mais...
E quanto ao ALIAS eu somente utilizo para gravar dados nas tabelas diretamente e relacionamento de funções em dados de tabelas, tipo:

Código: Selecionar todos

// para gravar dados diretamente na tabela
dbCLTS -> NOME := vNOME
// ou para recuperar dados da tabela
vNOME := dbCLTS -> NOME
Desta forma posso trabalhar com qualquer tabela, em qualquer parte do sistema.
Espero ter ajudado em algo, abraços e boa sorte.
CLIPPER 5.3b/BLINKER 7.0/RDD CDX => Migrando para HARBOUR/RDD CDX

"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".

http://iwasa.4shared.com/
Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

Re: Erro de abertura de arquivos

Mensagem por Iwasa »

JOSE GENOVEZI escreveu:

Código: Selecionar todos

        REPLACE  data        WITH v_data;
                       accodigo    WITH v_acodi;
                       acempresa   WITH v_aempresa;
                       acendereco  WITH v_aendereco;
                       accidade    WITH v_acidade;
                       accbairro   WITH v_abairro;
                       acccep      WITH v_acep;
                       accuf       WITH v_auf;
                       accfuncao   WITH v_afuncao;
                       accadmissa  WITH v_aadmissao;
                       accsalario  WITH v_asalario;
                       acclimite   WITH v_alimite;
                       accpai      WITH v_apai;
                       accmae      WITH v_amae;
                       accnome     WITH v_anome;
                       accconjuge  WITH v_aconjuge;
                       accrefcome  with v_arefpess;
                       accrefpess  with v_arefcome;
                       accfone     with V_afone
seu erro pode estar aqui, pelo que estou vendo está faltando uma "," (virgula) antes do ";"
CLIPPER 5.3b/BLINKER 7.0/RDD CDX => Migrando para HARBOUR/RDD CDX

"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".

http://iwasa.4shared.com/
JOSE GENOVEZI
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 28 Jul 2009 20:55
Localização: CURITIBA/PR

Re: Erro de abertura de arquivos

Mensagem por JOSE GENOVEZI »

Obrigado amigos pelas dicas, já vou por elas em pratica, mas continuo a receber sugestões e dicas.

Grato

José :{
Responder