Clipper On Line • Ver Tópico - Erro de tabela dbf

Erro de tabela dbf

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

 

Erro de tabela dbf

Mensagempor Daiane » 16 Dez 2016 10:26

error3.txt
(10.52 KiB) Baixado 93 vezes
error2.txt
(16.63 KiB) Baixado 76 vezes
error1.txt
(16.45 KiB) Baixado 69 vezes
Pessoal ta ocorrendo varios erros em uma tabela q utilizo
erros como: Alias não exist ou campo não existe ou Workarea not in use

so que ja verifiquei na tabela se o campo existe,ja coloquei um comando para abrir a tabela caso ela não esteja em aberto

não sei mais oq fazer,se alguém puder me dar uma orientação.

if !FLPARG->(used())
        USE ("C:\mfolha\flparg.dbf") SHARED alias (flparg)
   endif   
   ::VIRRF -= (FLFUNC->DEDIRRF * FLPARG->DEDUCAO)


o erro ocorre no: FLPARG->DEDUCAO
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar de usuário

Daiane
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 122
Data de registro: 28 Out 2014 15:19
Cidade/Estado: Feira de Santana - BA
Curtiu: 27 vezes
Mens.Curtidas: 13 vezes

Erro de tabela dbf

Mensagempor Kapiaba » 16 Dez 2016 12:15

Daiane, dúvida:

O programa esta em:

C:\mfolhawin\ImpVContraCheque.prg => IMPVCONTRACHEQUE:USEDB( 115 )


E os bancos em?

USE ("C:\mfolha\flparg.dbf") SHARED alias (flparg)


não concordo com esta logica mas, se isso está certo... Eu faria assim:

USE ("C:\mfolha\flparg.dbf") SHARED NEW alias flparg 


Vá informando. Tem boi na linha.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1766
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 311 vezes
Mens.Curtidas: 119 vezes

Erro de tabela dbf

Mensagempor Daiane » 16 Dez 2016 17:34

Pior q ta assim mesmo os fontes em um diretório e os dbf em outros
ja peguei o sistema funcionando assim
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar de usuário

Daiane
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 122
Data de registro: 28 Out 2014 15:19
Cidade/Estado: Feira de Santana - BA
Curtiu: 27 vezes
Mens.Curtidas: 13 vezes

Erro de tabela dbf

Mensagempor alxsts » 18 Dez 2016 21:53

Olá!

O trecho de código é pequeno e não permite uma análise mais abrangente. Notei que você não utiliza a cláusula NEW no comando USE. Pode ser que estejas a abrir vários arquivos em sequência, sem a cláusula NEW. Neste caso, está abrindo todos na mesma área permanecendo aberto apenas o último arquivo referenciado pelo comando USE. Feito isto, ao referenciar os demais arquivos, é gerado erro em tempo de execução.

Tente algo assim:
#include "set.ch"

FUNCTION Main()

   LOCAL cPath := "C:\mfolha\flparg.dbf"

   Set( _SET_DEFAULT, cPath )

   if Select( "FLPARG" ) == 0
      USE flparg SHARED NEW ALIAS flparg
 
endif

   //
   // ...
   //
   
   RETURN NIL
//-----------------------------------------------
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Erro de tabela dbf

Mensagempor Kapiaba » 19 Dez 2016 10:50

Um exemplo simples Daiane e siga as instruções do Alexandre Santos (AlxSts) ele está correto:

static function OpenDataBases()

   field CODE,INVNUM,SERIAL

   if ! File( "invoices.dbf" )
      DbCreate( "invoices.dbf",;
                { { "INVNUM",    "C", 10, 0 }, ;
                  { "DATE",      "D",  8, 0 }, ;
                  { "CODE",      "C", 10, 0 }, ; // Client Code
                  { "CLIENT",    "C", 40, 0 }, ; // Client Name
                  { "ADDRESS",   "M", 10, 0 }, ; // Client Address
                  { "DETAILS",   "C", 30, 0 }, ; // Invoice Details
                  { "AMOUNT",    "N",  9, 0 }, ;
                  { "TAXRATE",   "N",  5, 2 }, ;
                  { "TAX",       "N",  9, 0 }, ;
                  { "TOTAL",     "N",  9, 0 }, ;
                  { "PAYDATE",   "D",  8, 0 } }, "DBFCDX", .T., "DB" )

      INDEX ON INVNUM TAG INVNUM
      CLOSE DB
   elseif !File( "invoices.cdx" )
      USE INVOICES EXCLUSIVE NEW ALIAS DB
      INDEX ON INVNUM TAG INVNUM
      CLOSE DB
   endif

   USE invoices SHARED
   SET ORDER TO TAG INVNUM
   GO BOTTOM
   nTaxRate    := INVOICES->TAXRATE
   GO TOP

   if ! File( "items.dbf" )
      DbCreate( "items.dbf",;
                { { "CODE",   "C", 10, 0 }, ;
                  { "NAME",   "C", 30, 0 }, ;
                  { "UNIT",   "C",  5, 0 }, ;
                  { "PRICE",  "N",  6, 2 } }, "DBFCDX", .T., "DB" )

      INDEX ON CODE TAG CODE
      CLOSE DB
   elseif !File( "items.cdx" )
      USE ITEMS NEW EXCLUSIVE ALIAS DB
      INDEX ON CODE TAG CODE
      CLOSE DB
   endif

   USE items NEW SHARED
   SET ORDER TO TAG CODE
   GO TOP

   if ! File( "invitems.dbf" )
      DbCreate( "invitems.dbf",;
                { { "INVNUM",    "C", 10, 0 }, ;
                  { "SERIAL",    "N",  3, 0 }, ;
                  { "ITEMCODE",  "C", 10, 0 }, ;
                  { "ITEMNAME",  "C", 30, 0 }, ;
                  { "QUANTITY",  "N",  8, 3 }, ;
                  { "UNIT",      "C",  5, 0 }, ;
                  { "PRICE",     "N",  6, 2 }, ;
                  { "DISCOUNT",  "N",  9, 0 } }, "DBFCDX", .T., "DB" )

      INDEX ON INVNUM + STR( SERIAL, 3, 0 ) TAG INVNUM
      INDEX ON DELETED() TAG DELETED
      CLOSE DB
   elseif !File( "invitems.cdx" )
      USE INVITEMS EXCLUSIVE NEW ALIAS DB
      INDEX ON INVNUM + STR( SERIAL, 3, 0 ) TAG INVNUM
      INDEX ON DELETED() TAG DELETED
      CLOSE DB
   endif

   USE invitems NEW SHARED
   aBlankItem  := Array( FCount() + 1 )
   AEval( aBlankItem, { |u,i| aBlankItem[ i ] := uValBlank( FieldGet( i ) ) }, 1, FCount() )
   aBlankItem[ FCount() + 1 ] := 0
   SET ORDER TO TAG INVNUM
   GO TOP

   USE invitems NEW SHARED ALIAS IIT
   SET ORDER TO TAG INVNUM
   GO TOP

   if ! File( "clients2.dbf" )
      DbCreate( "clients2.dbf",;
                { { "CODE",      "C", 10, 0 },;
                  { "FIRST",     "C", 20, 0 },;
                  { "LAST",      "C", 20, 0 },;
                  { "ADDRESS1",  "C", 30, 0 },;
                  { "ADDRESS2",  "C", 30, 0 },;
                  { "CITY",      "C", 20, 0 },;
                  { "ZIPCODE",   "C", 20, 0 },;
                  { "PHONE",     "C", 20, 0 },;
                  { "EMAIL",     "C", 20, 0 } }, "DBFCDX", .T., "DB" )

      INDEX ON CODE TAG CODE
      CLOSE DB
   elseif !File( "clients2.cdx" )
      USE CLIENTS2 EXCLUSIVE NEW ALIAS DB
      INDEX ON CODE TAG CODE
      CLOSE DB
   endif

   USE Clients2 NEW SHARED ALIAS "Clients"
   SET ORDER TO TAG CODE
   GO TOP

   SELECT invoices
   SET RELATION TO INVNUM INTO invitems SCOPED
   GO TOP

return nil



Kapiaba
Colaborador

Colaborador
 
Mensagens: 1766
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 311 vezes
Mens.Curtidas: 119 vezes

Erro de tabela dbf

Mensagempor rochinha » 02 Jan 2017 15:06

Amiguinhos,

daiane

Pelo que percebi neste código não vejo o uso de SELECT

Quando da abertura de muitas tabelas é praxe abrir todas as tabelas que serão usadas numa rotina.

Abrir uma tabela, pegar um dado e fecha-la em posteriormente e fazer isto recursivamente ou chamando a mesma função trocentas vezes consome mais processamento que o necessário e leva facilmente a quebrar durante o processo.

Abra todas as tabelas e use NEW para que uma nova área seja selecionada automaticamente para a tabela aberta e depois use SELECT para selecionar o seu uso.

Eu mesmo não gosto de estar em uma área e chamar campo de outra tabela como (FLFUNC->DEDIRRF * FLPARG->DEDUCAO) pois não tenho certeza que a outra tabela sendo chamada está aberta ou foi fechada por algum motivo que eu não programei.

Veja o command abaixo. Eu uso para abrir minhas tabelas sem precisar verificar se já está aberta. Uso no lugar do comando USE:
#command OPEN <(db)>                                                    ;
             [VIA <rdd>]                                                ;
             [ALIAS <a>]                                                ;
             [<new: NEW>]                                               ;
             [<ex: EXCLUSIVE>]                                          ;
             [<sh: SHARED>]                                             ;
             [<ro: READONLY>]                                           ;
             [INDEX <(index1)> [, <(indexn)>]]                          ;
       => if Select( <(db)> )==0                                        ;
         ;   dbNetUseArea( <.new.>, <rdd>, <(db)>, <(a)>, if(<.sh.> .or. <.ex.>, !<.ex.>, NIL), <.ro.>, 0 )[; dbSetIndex( <(db)> )];
         ; else                                                         ;
         ;   dbSelectArea( <(db)> )                                     ;
         ; end


Veja que para testar se a tabela está aberta em algum lugar é testado por Select( <(db)> )==0. Se estiver aberta é selecionado senão é aberto.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4544
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 806 vezes
Mens.Curtidas: 244 vezes




Retornar para FiveWin

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 0 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro