Fatal C3049

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

PITERGALDIANO
Usuário Nível 2
Usuário Nível 2
Mensagens: 91
Registrado em: 28 Nov 2003 08:48

Fatal C3049

Mensagem por PITERGALDIANO »

estou com um problema quando vou compilar o arquivo funcoes1.prg do meu sistema, acontece o seguinte:

quando digito: clipper funcoes1 <ENTER>
da a seguinte mensagem: Fatal C3049 String Space Exausted

já me disseram que é o tamanho do arquivo, mas ele só tem 500 linhas

uso a visual lib

no cabeçalho do PRG está as seguintes linhas:

#include "clipper.ch"
#include "visual_lib2ex"

set date brit
set wrap on
set scor off

se tiro essas linhas consigo compilar

alguém pode me ajudar?

desde já agradeço
Piter Galdiano
Programador Clipper
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Prezado Piter

O que é esse CLIPPER.CH ?

E essa "visual_lib2ex" ? Não seria "visual2.ch"

O Clipper com certeza não reconhecerá esse nome de arquivo "visual_lib2ex"

Tente trocar o nome para visual2.ch , se bem que a Visual Lib já vem com ela, dê um olhada nos seus includes e veja se já não tem ela lá.

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)
Avatar do usuário
Antonio
Usuário Nível 3
Usuário Nível 3
Mensagens: 347
Registrado em: 14 Ago 2003 17:33
Localização: Sao Paulo - SP
Contato:

Mensagem por Antonio »

PITERGALDIANO,

#include "clipper.ch" :?
#include "visual_lib2ex"


Tente incluir somente o seguinte header:

#include "visual2.ch"
Antonio Carlos
Harbour 3.2 (20180213)
Hwgui 2.20 3b | PostGresql 9.5 | ADO/ODBC
PITERGALDIANO
Usuário Nível 2
Usuário Nível 2
Mensagens: 91
Registrado em: 28 Nov 2003 08:48

visual lib

Mensagem por PITERGALDIANO »

o arquivo é o da visual lib, está certo, coloquei aquele nome porque não me lembrava.

Os includes estão certos porém não funciona.
Piter Galdiano
Programador Clipper
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Bom dia Vc Usa todos as rotinas contidas no include clipper.ch.
Se não usar copie somente as que vc use para um novo include tipo clipper2.ch e altere seu prg.


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Bom, as soluções dos amigos são válidas, mas primeiro vamos entender o problema:

Este problema é muito no Clipper quando a versão dele está abaixo da 5.2e, isto não era para acontecer nesta versão, mas no meu caso eu uso o Clipper 5.2e e tenho este mesmo problema.

Isto acontece quando na compilação, o clipper vai montando o comando para gerar o .OBJ, quando esta memória que fica com o comando armazenado antes dele ir para o .OBJ, mas esta memória tem um certo limite e quando ele estoura temos o erro "STRING SPACE EXAUSTED".
No caso de declararmos arrays muitos granades tipo: wag:={"1","2","3",....."34344534"}, quando compilamos vamos nos deparar com este erro, para resolver temos que rever os fontes e colocar assim
WAG:={}
AADD(WAG,"1")
AADD(WAG,"2")
AADD(WAG,"3")
....
AADD(WAG,"34344534")
Ai o problema acaba, pois ao inves do compilador montar todo o array para jogar para o arquivo .OBJ ele gera um array vazio e vai jogando as chamadas de funções uma a uma, como a cada linha ele esvazia o buffer da memória, ai não temos este erro.

Este erro acontece não só neste momento, tente por exemplo declarar uma variável string e colocar um valor bem grande de dados no PRG, este erro provavelmente irá acontecer.

Ter boa quantidade de memória convencional ajuda, mas não resolve, se quiser poste seu código, com certeza iremos ajudar.
Sem mais
Wagner Nunes
www.vagucs.com.br
PITERGALDIANO
Usuário Nível 2
Usuário Nível 2
Mensagens: 91
Registrado em: 28 Nov 2003 08:48

ai vai meu código

Mensagem por PITERGALDIANO »

Editado por moderador evolver: Por favor quando usar codigos grandes use o botão code pra abrir e fechar senão eu acabo com meu botão de rolagem!

Código: Selecionar todos

#Include "Inkey.ch"
#Include "Visual2.ch"

Request DBFCDX
RddSetDefault("DBFCDX")
DbSetDriver("DBFCDX")

Set Scor Off
Set Dele On
Set Date Brit

Function fCadCli

   Local nButton  := 1
   Local nButton1 := 1
   Local nOpcao   := 0
   Local aEnv     := SavEnv(01,00,24,79) //VL-Salva o ambiente
   Local aButton  := NewButton()
   Local nOpcao1  := 0
   Local oTbr     := TBrowseDB( 04, 04, 19, 74 )
   Local oTbc1    := TBColumnNew( "C¢digo"  , { || cadcli->Codigo } )
   Local oTbc2    := TBColumnNew( "Cliente" , { || cadcli->Cliente } )
   Local aWst
   Local lExt     := .F.
   Local DigNome  := .T.
   Local nInd, nLin, nCol, nTbrLin, nTbrCol
   Local MouseESC := .F.

   Public cCodigo    := Space (05) , cCliente  := Space (45) ,;
          cConjuge   := Space (30) , cCPFCNPJ  := Space (19) ,;
          cInscEst   := Space (20) , cEmail    := Space (35) ,;
          cFone      := Space (15) , cFax      := Space (15) ,;
          cCelular   := Space (15) , cEndereco := Space (30) ,;
          cCidade    := Space (30) , cBairro   := Space (22) ,;
          cEstado    := Space (02) , cCEP      := Space (10) ,;
          dDataCad   := Date()     , cObs1     := Space (60) ,;
          cObs2      := Space (60) , cObs3     := Space (60) ,;
          cCondicao1  := Space (06) , cForma1    := Space (02)

   Frame(02,59,18,79,,,,,"B/W")

   AddButton(aButton,04,61,17,"&Incluir"  ,"Incluir produto")
   AddButton(aButton,07,61,17,"&Alterar"  ,"Alterar produto cadastrado")
   AddButton(aButton,10,61,17,"&Excluir"  ,"Excluir produto cadastrado")
   AddButton(aButton,13,61,17,"&Consultar","Pesquisa produto cadastrado")
   AddButton(aButton,16,61,17,"&Fechar"   ,"Sair dos botäes de comando",.T.)

   nOpcao := ProcButton(aButton,1)

   DrawFn(07,"Pesquisa")
   SetKey(K_F7,{||fPesquisa()})
   SetKeyMouse(K_F7,{24,24,48,55})

   If nOpcao == 1

      Clrted()
      SetColor("N/W,N*/W,,,N*/W")
      SetCursor(1)

      SetKey(K_SH_F10,{||nButton1 := 2,VLKeyboard(Chr(K_ESC)+Chr(K_ENTER))})
      SetKeyMouse(K_SH_F10,{08,08,42,57})

      Frame(02,00,17,79,"Cadastro de Clientes",2,,,"B/W")

      Linbutton2(LB_SHOW,NB_GRAY,15,nButton1,2,"&Salvar","Gravar cliente","&Cancelar","Cancela inclusÆo")

      fNovoCli()

      @04,02 say "C¢digo...:"      Get cCodigo Picture "@!"                   When DwnMsg("C¢digo do cliente")
      @05,45 say "Data Cad.:"      Get dDataCad                               When DwnMsg("Data do cadastro")
      Clear Gets
      @04,20 say "Cliente....:"    Get cCliente Picture "@!"                  When DwnMsg("Nome do cliente")               Valid ! Empty(cCliente)
      @05,02 Say "Conjuge..:"      Get cConjuge Picture "@!"                  When DwnMsg("Conjuge do cliente")
      @06,02 say "Endere‡o.:"      Get cEndereco Picture "@!"                 When DwnMsg("Endere‡o do cliente")
      @06,45 say "Bairro...:"      Get cBairro Picture "@!"                   When DwnMsg("Bairro do cliente")
      @07,02 say "Cidade...:"      Get cCidade Picture "@!"                   When DwnMsg("Cidade do cliente")
      @07,45 Say "Estado...:"      Get cEstado Picture "@!"                   When DwnMsg("Estado do cliente")             Valid ValUF(cEstado)
      @07,60 say "CEP...:"         Get cCEP Picture "99.999-999"              When DwnMsg("CEP da cidade")
      @08,02 say "Fone.....:"      Get cFone Picture "@!"                     When DwnMsg("Fone do cliente")
      @08,30 say "Fax.:"           Get cFax Picture "@!"                      When DwnMsg("Fax do cliente")
      @08,53 say "Celular.:"       Get cCelular                               When DwnMsg("Celular do cliente")
      @09,02 say "E-mail...:"      Get cEmail Picture "@"                     When DwnMsg("E-Mail do cliente")
      @09,48 say "C.Pag.:"         Get cCondicao1 Picture "@!"                 When DwnMsg("Condi‡Æo de pagamento")
      @10,02 say "CPF/CNPJ.:"      Get cCPFCNPJ Picture "999.999.999/9999-99" When DwnMsg("CPF ou CNPJ do cliente")        Valid ValCNPJCPF(cCPFCNPJ)
      @10,34 say "Insc.Est.:"      Get cInscEst Picture "@!"                  When DwnMsg("Inscri‡Æo estadual do cliente") Valid ValInscEst(cEstado,cInscEst)
      @10,67 say "F.Pag.:"         Get cForma1 Picture "@!"                    When DwnMsg("Forma de pagamento")
      @11,02 say "Observ...:"      Get cObs1 Picture "@!"                     When DwnMsg("Observa‡Æo 1")
      @12,13                       Get cObs2 Picture "@!"                     When DwnMsg("Observa‡Æo 2")
      @13,13                       Get cObs3 Picture "@!"                     When DwnMsg("Observa‡Æo 3")

      Read

      Set Key K_SH_F10 To
      SetKeyMouse(K_SH_F10,{})

      nOpcao1 := Linbutton2(LB_PROC,NB_GRAY,15,nButton1,2,"&Salvar","Gravar cliente","&Cancelar","Cancela inclusÆo")

      If nOpcao1 == 1

         Use CadCli Alias cadcli Shared New
         BloqArq()
         cadcli->(DbAppend())
         Repla cadcli->Codigo    With cCodigo   ,;
               cadcli->Cliente   With cCliente  ,;
               cadcli->Endereco  With cEndereco ,;
               cadcli->Conjuge   With cConjuge  ,;
               cadcli->CPFCNPJ   With cCPFCNPJ  ,;
               cadcli->Inscricao With cInscEst  ,;
               cadcli->Email     With cEmail    ,;
               cadcli->Fone      With cFone     ,;
               cadcli->Celular   With cCelular  ,;
               cadcli->Fax       With cFax      ,;
               cadcli->Cidade    With cCidade   ,;
               cadcli->Bairro    With cBairro   ,;
               cadcli->Estado    With cEstado   ,;
               cadcli->DataCad   With dDataCad  ,;
               cadcli->Conjuge   With cConjuge  ,;
               cadcli->CEP       With cCEP      ,;
               cadcli->Obs1      With cObs1     ,;
               cadcli->Obs2      With cObs2     ,;
               cadcli->Obs3      With cObs3

         Desbloq()
         Close cadcli
      Else
         RstEnv(aEnv)
      EndIf

   EndIf

   If nOpcao == 2

      Use CadCli Alias cadcli Shared New
      Set Index To CadCli
      Set Order To 2
      cadcli->(DbGoTop())

      If cadcli->(Eof())

         Tone(900,5)
         nMsgBcoVaz := MsgBox3d1("Banco de dados vazio!")
         lExt       := .T.
         MouseEsc   := .F.
         DigNome    := .F.
         Close cadcli

      EndIf

      If DigNome == .T.
         MsgBox3D(,"Digite as letras iniciais (ENTER=Todos)",,"W+/B","B/W")
         SetCursor(1)
         SetColor("N/W,N*/W,,,N*/W")
         cCliente := Space (40)
         @12,20 Get cCliente Pict '@!'
         Read
         nNumDig := Len(AllTrim(cCliente))
         Set Order To 2
         Locate For AllTrim(cadcli->Cliente) = Subs(cCliente,1,nNumDig)
         If cadcli->(Eof()) ; cadcli->(DbGoTop()) ; EndIf
         SetCursor(0)
         If LastKey() == K_ESC
            lExt     := .T.
            MouseEsc := .F.
            Close cadcli
         EndIf
      EndIf

      oTbr:colSep := " ³ "
      oTbr:headSep := "Ä"
      oTbr:colorSpec := "N*/W,W+/B,R*/W,W+/R"
      oTbr:addColumn( oTbc1 )
      oTbr:addColumn( oTbc2 )

      Win( 03, 03, 20, 75, "Escolha o cliente a ser alterado")
      SetColor( "N*/W,W+/B" )

      @ 23, 00 SAY PADL( "[Esc] Sa¡da", 80 ) COLOR "R*/W"     // sair pelo mouse
      @ 23, 01 SAY "[PgUp]" COLOR "R*/W"                      // PgUp pelo mouse
      @ 23, 08 SAY "[PgDn]" COLOR "R*/W"                      // PgDn pelo mouse
      @ 23, 16 SAY "[" + CHR( 24 ) + "]" COLOR "R*/W"         // Sobe pelo mouse
      @ 23, 20 SAY "[" + CHR( 25 ) + "]" COLOR "R*/W"         // Desce pelo mouse
      @ 23, 24 SAY "[" + CHR( 27 ) + "]" COLOR "R*/W"         // Esq. pelo mouse
      @ 23, 28 SAY "[" + CHR( 26 ) + "]" COLOR "R*/W"         // Dir. pelo mouse

      WHILE !lExt

         VLMouseOff()
         WHILE !oTbr:stabilize() ; END
         VLMouseOn()

         aWSt := WaitState()          // substitui o INKEY()
   
         DO CASE

            CASE aWSt:wsType == WAIT_KEYPRESS // o evento foi uma tecla
         
                 DO CASE                           // manipula‡Æo padrÆo de teclas
                    CASE aWst:wsKey == K_DOWN          ; oTbr:down()
                    CASE aWst:wsKey == K_UP            ; oTbr:up()
                    CASE aWst:wsKey == K_PGDN          ; oTbr:pageDown()
                    CASE aWst:wsKey == K_PGUP          ; oTbr:pageUp()
                    CASE aWst:wsKey == K_CTRL_PGUP     ; oTbr:goTop()
                    CASE aWst:wsKey == K_CTRL_PGDN     ; oTbr:goBottom()
                    CASE aWst:wsKey == K_RIGHT         ; oTbr:right()
                    CASE aWst:wsKey == K_LEFT          ; oTbr:left()
                    CASE aWst:wsKey == K_HOME          ; oTbr:home()
                    CASE aWst:wsKey == K_END           ; oTbr:end()
                    CASE aWst:wsKey == K_CTRL_LEFT     ; oTbr:panLeft()
                    CASE aWst:wsKey == K_CTRL_RIGHT    ; oTbr:panRight()
                    CASE aWst:wsKey == K_CTRL_HOME     ; oTbr:panHome()
                    CASE aWst:wsKey == K_CTRL_END      ; oTbr:panEnd()
                    Case aWst:wsKey == K_ENTER
                         cCodigo   := cadcli->Codigo
                         cCliente  := cadcli->Cliente
                         cConjuge  := cadcli->Conjuge
                         cCPFCNPJ  := cadcli->CPFCNPJ
                         cInscEst  := cadcli->Inscricao
                         cEmail    := cadcli->Email
                         cFone     := cadcli->Fone
                         cFax      := cadcli->Fax
                         cCelular  := cadcli->Celular
                         cEndereco := cadcli->Endereco
                         cCidade   := cadcli->Cidade
                         cBairro   := cadcli->Bairro
                         cEstado   := cadcli->Estado
                         dDataCad  := cadcli->DataCad
                         cCEP      := cadcli->CEP
                         cObs1     := cadcli->Obs1
                         cObs2     := cadcli->Obs2
                         cObs3     := cadcli->Obs3

                         Clrted()
                         lExt := .T.
                         MouseESC := .T.

                    CASE aWst:wsKey == K_ESC
                         lExt := .T.
                         Close cadcli
                         Clrted()
                         MouseESC := .F.

                 ENDCASE

                 // abaixo - evento MOUSEDOWN - o usu rio clicou com o mouse

            CASE aWst:wsType == WAIT_MOUSEDOWN .AND. aWst:wsRow == 23 // na linha 23

                 IF     aWst:wsCol >= 68 .AND. aWst:wsCol <= 78 // clicou em "[Esc] Sa¡da"
                        lExt := .T.
                        Close cadcli
                        MouseEsc := .F.
                        Clrted()
                 ELSEIF aWst:wsCol >= 01 .AND. aWst:wsCol <= 06 // clicou em "[PgUp]"
                    oTbr:pageUp()
                 ELSEIF aWst:wsCol >= 08 .AND. aWst:wsCol <= 13 // clicou em "[PgDn]"
                    oTbr:pageDown()
                 ELSEIF aWst:wsCol >= 16 .AND. aWst:wsCol <= 18 // clicou em "Sobe"
                    oTbr:up()
                 ELSEIF aWst:wsCol >= 20 .AND. aWst:wsCol <= 22 // clicou em "Desce"
                    oTbr:down()
                 ELSEIF aWst:wsCol >= 24 .AND. aWst:wsCol <= 26 // clicou em "Esquerda"
                    oTbr:left()
                 ELSEIF aWst:wsCol >= 28 .AND. aWst:wsCol <= 30 // clicou em "Direita"
                    oTbr:right()
                 ENDIF
      
            CASE aWSt:wsType == WAIT_MOUSEDOWN .AND.; // c¢digo para habilitar cliques nas c‚lulas do tbrowse
                 aWSt:wsRow >= 6 .AND. aWSt:wsRow <= 20 .AND.;
                 aWSt:wsCol >= 3 .AND. aWSt:wsCol <= 75
                 nLin := aWSt:wsRow
                 nCol := aWSt:wsCol
                 nTbrLin := oTbr:rowPos
                 nTbrCol := oTbr:colPos
                 oTbr:deHilite()
                 oTbr:rowPos := nTbrLin + nLin - ROW()  // Acerta linha
         
                 VLMouseOff()
                 FOR nInd = oTbr:rightVisible TO oTbr:leftVisible STEP -1
                     oTbr:colPos := nInd
                     oTbr:Hilite()
                     IF COL() - 1 <= nCol
                        oTbr:Hilite()
                        EXIT
                     ENDIF
                 NEXT
                 oTbr:refreshCurrent()
                 VLMouseOn()
               
         ENDCASE

      END

      If LastKey() != K_ESC .And. MouseESC == .T.

         Clrted()
         SetColor("N/W,N*/W,,,N*/W")
         SetCursor(1)

         SetKey(K_SH_F10,{||nButton1 := 2,VLKeyboard(Chr(K_ESC)+Chr(K_ENTER))})
         SetKeyMouse(K_SH_F10,{08,08,42,57})

         Frame(02,00,17,79,"Altera‡Æo de Clientes",2,,,"B/W")

         Linbutton2(LB_SHOW,NB_GRAY,15,nButton1,2,"&Salvar","Gravar altera‡Æo","&Cancelar","Cancela altera‡Æo")

         @04,02 say "C¢digo...:"      Get cCodigo Picture "@!"                   When DwnMsg("C¢digo do cliente")
         @05,45 say "Data Cad.:"      Get dDataCad                               When DwnMsg("Data do cadastro")
         Clear Gets
         @04,20 say "Cliente....:"    Get cCliente Picture "@!"                  When DwnMsg("Nome do cliente")               Valid ! Empty(cCliente)
         @05,02 Say "Conjuge..:"      Get cConjuge Picture "@!"                  When DwnMsg("Conjuge do cliente")
         @06,02 say "Endere‡o.:"      Get cEndereco Picture "@!"                 When DwnMsg("Endere‡o do cliente")
         @06,45 say "Bairro...:"      Get cBairro Picture "@!"                   When DwnMsg("Bairro do cliente")
         @07,02 say "Cidade...:"      Get cCidade Picture "@!"                   When DwnMsg("Cidade do cliente")
         @07,45 Say "Estado...:"      Get cEstado Picture "@!"                   When DwnMsg("Estado do cliente")             Valid ValUF(cEstado)
         @07,60 say "CEP...:"         Get cCEP Picture "99.999-999"              When DwnMsg("CEP da cidade")
         @08,02 say "Fone.....:"      Get cFone Picture "@!"                     When DwnMsg("Fone do cliente")
         @08,30 say "Fax.:"           Get cFax Picture "@!"                      When DwnMsg("Fax do cliente")
         @08,53 say "Celular.:"       Get cCelular                               When DwnMsg("Celular do cliente")
         @09,02 say "E-mail...:"      Get cEmail Picture "@"                     When DwnMsg("E-Mail do cliente")
         @10,02 say "CPF/CNPJ.:"      Get cCPFCNPJ Picture "999.999.999/9999-99" When DwnMsg("CPF ou CNPJ do cliente")        Valid ValCNPJCPF(cCPFCNPJ)
         @10,35 say "Insc.Est.:"      Get cInscEst Picture "@!"                  When DwnMsg("Inscri‡Æo estadual do cliente") Valid ValInscEst(cEstado,cInscEst)
         @11,02 say "Observ...:"      Get cObs1 Picture "@!"                     When DwnMsg("Observa‡Æo 1")
         @12,13                       Get cObs2 Picture "@!"                     When DwnMsg("Observa‡Æo 2")
         @13,13                       Get cObs3 Picture "@!"                     When DwnMsg("Observa‡Æo 3")

         Read

         Set Key K_SH_F10 To
         SetKeyMouse(K_SH_F10,{})

         nOpcao1 := Linbutton2(LB_PROC,NB_GRAY,15,nButton1,2,"&Salvar","Gravar altera‡Æo","&Cancelar","Cancela altera‡Æo")

         If nOpcao1 == 1
            BloqReg()
            Repla cadcli->Cliente   With cCliente  ,;
                  cadcli->Endereco  With cEndereco ,;
                  cadcli->Conjuge   With cConjuge  ,;
                  cadcli->CPFCNPJ   With cCPFCNPJ  ,;
                  cadcli->Inscricao With cInscEst  ,;
                  cadcli->Email     With cEmail    ,;
                  cadcli->Fone      With cFone     ,;
                  cadcli->Celular   With cCelular  ,;
                  cadcli->Fax       With cFax      ,;
                  cadcli->Cidade    With cCidade   ,;
                  cadcli->Bairro    With cBairro   ,;
                  cadcli->Estado    With cEstado   ,;
                  cadcli->Conjuge   With cConjuge  ,;
                  cadcli->CEP       With cCEP      ,;
                  cadcli->Obs1      With cObs1     ,;
                  cadcli->Obs2      With cObs2     ,;
                  cadcli->Obs3      With cObs3
            Desbloq()
            Close cadcli
         Else
            Close cadcli
            RstEnv(aEnv)
         EndIf

      EndIf

   EndIf

   If nOpcao == 3

      Use CadCli Alias cadcli Shared New
      Set Index To CadCli
      Set Order To 2
      cadcli->(DbGoTop())

      If cadcli->(Eof())

         Tone(900,5)
         nMsgBcoVaz := MsgBox3d1("Banco de dados vazio!")
         lExt       := .T.
         MouseEsc   := .F.
         DigNome    := .F.
         Close cadcli

      EndIf

      If DigNome == .T.
         MsgBox3D(,"Digite as letras iniciais (ENTER=Todos)",,"W+/B","B/W")
         SetCursor(1)
         SetColor("N/W,N*/W,,,N*/W")
         cCliente := Space (40)
         @12,20 Get cCliente Pict '@!'
         Read
         nNumDig := Len(AllTrim(cCliente))
         Set Order To 2
         Locate For AllTrim(cadcli->Cliente) = Subs(cCliente,1,nNumDig)
         If cadcli->(Eof()) ; cadcli->(DbGoTop()) ; EndIf
         SetCursor(0)
         If LastKey() == K_ESC
            lExt     := .T.
            MouseEsc := .F.
            Close cadcli
         EndIf
      EndIf

      oTbr:colSep := " ³ "
      oTbr:headSep := "Ä"
      oTbr:colorSpec := "N*/W,W+/B,R*/W,W+/R"
      oTbr:addColumn( oTbc1 )
      oTbr:addColumn( oTbc2 )

      Win( 03, 03, 20, 75, "Escolha o cliente a ser exclu¡do")
      SetColor( "N*/W,W+/B" )

      @ 23, 00 SAY PADL( "[Esc] Sa¡da", 80 ) COLOR "R*/W"     // sair pelo mouse
      @ 23, 01 SAY "[PgUp]" COLOR "R*/W"                      // PgUp pelo mouse
      @ 23, 08 SAY "[PgDn]" COLOR "R*/W"                      // PgDn pelo mouse
      @ 23, 16 SAY "[" + CHR( 24 ) + "]" COLOR "R*/W"         // Sobe pelo mouse
      @ 23, 20 SAY "[" + CHR( 25 ) + "]" COLOR "R*/W"         // Desce pelo mouse
      @ 23, 24 SAY "[" + CHR( 27 ) + "]" COLOR "R*/W"         // Esq. pelo mouse
      @ 23, 28 SAY "[" + CHR( 26 ) + "]" COLOR "R*/W"         // Dir. pelo mouse

      WHILE !lExt

         VLMouseOff()
         WHILE !oTbr:stabilize() ; END
         VLMouseOn()

         aWSt := WaitState()          // substitui o INKEY()
   
         DO CASE

            CASE aWSt:wsType == WAIT_KEYPRESS // o evento foi uma tecla
         
                 DO CASE                           // manipula‡Æo padrÆo de teclas
                    CASE aWst:wsKey == K_DOWN          ; oTbr:down()
                    CASE aWst:wsKey == K_UP            ; oTbr:up()
                    CASE aWst:wsKey == K_PGDN          ; oTbr:pageDown()
                    CASE aWst:wsKey == K_PGUP          ; oTbr:pageUp()
                    CASE aWst:wsKey == K_CTRL_PGUP     ; oTbr:goTop()
                    CASE aWst:wsKey == K_CTRL_PGDN     ; oTbr:goBottom()
                    CASE aWst:wsKey == K_RIGHT         ; oTbr:right()
                    CASE aWst:wsKey == K_LEFT          ; oTbr:left()
                    CASE aWst:wsKey == K_HOME          ; oTbr:home()
                    CASE aWst:wsKey == K_END           ; oTbr:end()
                    CASE aWst:wsKey == K_CTRL_LEFT     ; oTbr:panLeft()
                    CASE aWst:wsKey == K_CTRL_RIGHT    ; oTbr:panRight()
                    CASE aWst:wsKey == K_CTRL_HOME     ; oTbr:panHome()
                    CASE aWst:wsKey == K_CTRL_END      ; oTbr:panEnd()
                    Case aWst:wsKey == K_ENTER
                         cCodigo   := cadcli->Codigo
                         cCliente  := cadcli->Cliente
                         cConjuge  := cadcli->Conjuge
                         cCPFCNPJ  := cadcli->CPFCNPJ
                         cInscEst  := cadcli->Inscricao
                         cEmail    := cadcli->Email
                         cFone     := cadcli->Fone
                         cFax      := cadcli->Fax
                         cCelular  := cadcli->Celular
                         cEndereco := cadcli->Endereco
                         cCidade   := cadcli->Cidade
                         cBairro   := cadcli->Bairro
                         cEstado   := cadcli->Estado
                         dDataCad  := cadcli->DataCad
                         cCEP      := cadcli->CEP
                         cObs1     := cadcli->Obs1
                         cObs2     := cadcli->Obs2
                         cObs3     := cadcli->Obs3
                         Clrted()
                         lExt := .T.
                         MouseESC := .T.

                    CASE aWst:wsKey == K_ESC
                         lExt := .T.
                         Close cadcli
                         Clrted()
                         MouseESC := .F.

                 ENDCASE

                 // abaixo - evento MOUSEDOWN - o usu rio clicou com o mouse

            CASE aWst:wsType == WAIT_MOUSEDOWN .AND. aWst:wsRow == 23 // na linha 23

                 IF     aWst:wsCol >= 68 .AND. aWst:wsCol <= 78 // clicou em "[Esc] Sa¡da"
                        lExt := .T.
                        Close cadcli
                        MouseEsc := .F.
                        Clrted()
                 ELSEIF aWst:wsCol >= 01 .AND. aWst:wsCol <= 06 // clicou em "[PgUp]"
                    oTbr:pageUp()
                 ELSEIF aWst:wsCol >= 08 .AND. aWst:wsCol <= 13 // clicou em "[PgDn]"
                    oTbr:pageDown()
                 ELSEIF aWst:wsCol >= 16 .AND. aWst:wsCol <= 18 // clicou em "Sobe"
                    oTbr:up()
                 ELSEIF aWst:wsCol >= 20 .AND. aWst:wsCol <= 22 // clicou em "Desce"
                    oTbr:down()
                 ELSEIF aWst:wsCol >= 24 .AND. aWst:wsCol <= 26 // clicou em "Esquerda"
                    oTbr:left()
                 ELSEIF aWst:wsCol >= 28 .AND. aWst:wsCol <= 30 // clicou em "Direita"
                    oTbr:right()
                 ENDIF
      
            CASE aWSt:wsType == WAIT_MOUSEDOWN .AND.; // c¢digo para habilitar cliques nas c‚lulas do tbrowse
                 aWSt:wsRow >= 6 .AND. aWSt:wsRow <= 20 .AND.;
                 aWSt:wsCol >= 3 .AND. aWSt:wsCol <= 75
                 nLin := aWSt:wsRow
                 nCol := aWSt:wsCol
                 nTbrLin := oTbr:rowPos
                 nTbrCol := oTbr:colPos
                 oTbr:deHilite()
                 oTbr:rowPos := nTbrLin + nLin - ROW()  // Acerta linha
         
                 VLMouseOff()
                 FOR nInd = oTbr:rightVisible TO oTbr:leftVisible STEP -1
                     oTbr:colPos := nInd
                     oTbr:Hilite()
                     IF COL() - 1 <= nCol
                        oTbr:Hilite()
                        EXIT
                     ENDIF
                 NEXT
                 oTbr:refreshCurrent()
                 VLMouseOn()
               
         ENDCASE

      END

      If LastKey() != K_ESC .And. MouseESC == .T.

         Clrted()
         SetColor("N/W,N*/W,,,N*/W")
         SetCursor(1)

         SetKey(K_SH_F9 ,{||nButton := 1,VLKeyboard(Chr(K_ESC)+Chr(K_ENTER))})
         SetKey(K_SH_F10,{||nButton := 2,VLKeyboard(Chr(K_ESC)+Chr(K_ENTER))})
   
         SetKeyMouse(K_SH_F9 ,{20,20,22,37})
         SetKeyMouse(K_SH_F10,{20,20,42,57})

         Frame(02,00,17,79,"ExclusÆo de Clientes",2,,,"B/W")

         Linbutton2(LB_SHOW,NB_GRAY,15,nButton1,2,"&Excluir","Exclui cliente","&Cancelar","Cancela exclusÆo")

         @04,02 say "C¢digo...:"      Get cCodigo Picture "@!"                   When DwnMsg("C¢digo do cliente")
         @05,45 say "Data Cad.:"      Get dDataCad                               When DwnMsg("Data do cadastro")
         Clear Gets
         @04,20 say "Cliente....:"    Get cCliente Picture "@!"                  When DwnMsg("Nome do cliente")               Valid ! Empty(cCliente)
         @05,02 Say "Conjuge..:"      Get cConjuge Picture "@!"                  When DwnMsg("Conjuge do cliente")
         @06,02 say "Endere‡o.:"      Get cEndereco Picture "@!"                 When DwnMsg("Endere‡o do cliente")
         @06,45 say "Bairro...:"      Get cBairro Picture "@!"                   When DwnMsg("Bairro do cliente")
         @07,02 say "Cidade...:"      Get cCidade Picture "@!"                   When DwnMsg("Cidade do cliente")
         @07,45 Say "Estado...:"      Get cEstado Picture "@!"                   When DwnMsg("Estado do cliente")             Valid ValUF(cEstado)
         @07,60 say "CEP...:"         Get cCEP Picture "99.999-999"              When DwnMsg("CEP da cidade")
         @08,02 say "Fone.....:"      Get cFone Picture "@!"                     When DwnMsg("Fone do cliente")
         @08,30 say "Fax.:"           Get cFax Picture "@!"                      When DwnMsg("Fax do cliente")
         @08,53 say "Celular.:"       Get cCelular                               When DwnMsg("Celular do cliente")
         @09,02 say "E-mail...:"      Get cEmail Picture "@"                     When DwnMsg("E-Mail do cliente")
         @10,02 say "CPF/CNPJ.:"      Get cCPFCNPJ Picture "999.999.999/9999-99" When DwnMsg("CPF ou CNPJ do cliente")        Valid ValCNPJCPF(cCPFCNPJ)
         @10,35 say "Insc.Est.:"      Get cInscEst Picture "@!"                  When DwnMsg("Inscri‡Æo estadual do cliente") Valid ValInscEst(cEstado,cInscEst)
         @11,02 say "Observ...:"      Get cObs1 Picture "@!"                     When DwnMsg("Observa‡Æo 1")
         @12,13                       Get cObs2 Picture "@!"                     When DwnMsg("Observa‡Æo 2")
         @13,13                       Get cObs3 Picture "@!"                     When DwnMsg("Observa‡Æo 3")

         Clear Gets

         Set Key K_SH_F10 To
         SetKeyMouse(K_SH_F10,{})

         nOpcao1 := Linbutton2(LB_PROC,NB_GRAY,15,nButton1,2,"&Excluir","Exclui cliente","&Cancelar","Cancela exclusÆo")

         If nOpcao1 == 1
            BloqReg()
            cadcli->(DbDelete())
            Desbloq()
            Close cadcli

         Else

            Close cadcli
            RstEnv(aEnv)

         EndIf

      EndIf

   EndIf

   If nOpcao == 4

      Use CadCli Alias cadcli Shared New
      Set Index To CadCli
      Set Order To 2
      cadcli->(DbGoTop())

      If cadcli->(Eof())

         Tone(900,5)
         nMsgBcoVaz := MsgBox3d1("Banco de dados vazio!")
         lExt       := .T.
         MouseEsc   := .F.
         DigNome    := .F.
         Close cadcli

      EndIf

      If DigNome == .T.
         MsgBox3D(,"Digite as letras iniciais (ENTER=Todos)",,"W+/B","B/W")
         SetCursor(1)
         SetColor("N/W,N*/W,,,N*/W")
         cCliente := Space (40)
         @12,20 Get cCliente Pict '@!'
         Read
         nNumDig := Len(AllTrim(cCliente))
         Set Order To 2
         Locate For AllTrim(cadcli->Cliente) = Subs(cCliente,1,nNumDig)
         If cadcli->(Eof()) ; cadcli->(DbGoTop()) ; EndIf
         SetCursor(0)
         If LastKey() == K_ESC
            lExt     := .T.
            MouseEsc := .F.
            Close cadcli
         EndIf
      EndIf

      oTbr:colSep := " ³ "
      oTbr:headSep := "Ä"
      oTbr:colorSpec := "N*/W,W+/B,R*/W,W+/R"
      oTbr:addColumn( oTbc1 )
      oTbr:addColumn( oTbc2 )

      Win( 03, 03, 20, 75, "Pesquisa de clientes")
      SetColor( "N*/W,W+/B" )

      @ 23, 00 SAY PADL( "[Esc] Sa¡da", 80 ) COLOR "R*/W"     // sair pelo mouse
      @ 23, 01 SAY "[PgUp]" COLOR "R*/W"                      // PgUp pelo mouse
      @ 23, 08 SAY "[PgDn]" COLOR "R*/W"                      // PgDn pelo mouse
      @ 23, 16 SAY "[" + CHR( 24 ) + "]" COLOR "R*/W"         // Sobe pelo mouse
      @ 23, 20 SAY "[" + CHR( 25 ) + "]" COLOR "R*/W"         // Desce pelo mouse
      @ 23, 24 SAY "[" + CHR( 27 ) + "]" COLOR "R*/W"         // Esq. pelo mouse
      @ 23, 28 SAY "[" + CHR( 26 ) + "]" COLOR "R*/W"         // Dir. pelo mouse

      WHILE !lExt

         VLMouseOff()
         WHILE !oTbr:stabilize() ; END
         VLMouseOn()

         aWSt := WaitState()          // substitui o INKEY()
   
         DO CASE

            CASE aWSt:wsType == WAIT_KEYPRESS // o evento foi uma tecla
         
                 DO CASE                           // manipula‡Æo padrÆo de teclas
                    CASE aWst:wsKey == K_DOWN          ; oTbr:down()
                    CASE aWst:wsKey == K_UP            ; oTbr:up()
                    CASE aWst:wsKey == K_PGDN          ; oTbr:pageDown()
                    CASE aWst:wsKey == K_PGUP          ; oTbr:pageUp()
                    CASE aWst:wsKey == K_CTRL_PGUP     ; oTbr:goTop()
                    CASE aWst:wsKey == K_CTRL_PGDN     ; oTbr:goBottom()
                    CASE aWst:wsKey == K_RIGHT         ; oTbr:right()
                    CASE aWst:wsKey == K_LEFT          ; oTbr:left()
                    CASE aWst:wsKey == K_HOME          ; oTbr:home()
                    CASE aWst:wsKey == K_END           ; oTbr:end()
                    CASE aWst:wsKey == K_CTRL_LEFT     ; oTbr:panLeft()
                    CASE aWst:wsKey == K_CTRL_RIGHT    ; oTbr:panRight()
                    CASE aWst:wsKey == K_CTRL_HOME     ; oTbr:panHome()
                    CASE aWst:wsKey == K_CTRL_END      ; oTbr:panEnd()
                    CASE aWst:wsKey == K_ESC
                         lExt := .T.
                         Close cadcli
                         Clrted()
                 ENDCASE

                 // abaixo - evento MOUSEDOWN - o usu rio clicou com o mouse

            CASE aWst:wsType == WAIT_MOUSEDOWN .AND. aWst:wsRow == 23 // na linha 23

                 IF     aWst:wsCol >= 68 .AND. aWst:wsCol <= 78 // clicou em "[Esc] Sa¡da"
                        lExt := .T.
                        Close cadcli
                        Clrted()
                 ELSEIF aWst:wsCol >= 01 .AND. aWst:wsCol <= 06 // clicou em "[PgUp]"
                    oTbr:pageUp()
                 ELSEIF aWst:wsCol >= 08 .AND. aWst:wsCol <= 13 // clicou em "[PgDn]"
                    oTbr:pageDown()
                 ELSEIF aWst:wsCol >= 16 .AND. aWst:wsCol <= 18 // clicou em "Sobe"
                    oTbr:up()
                 ELSEIF aWst:wsCol >= 20 .AND. aWst:wsCol <= 22 // clicou em "Desce"
                    oTbr:down()
                 ELSEIF aWst:wsCol >= 24 .AND. aWst:wsCol <= 26 // clicou em "Esquerda"
                    oTbr:left()
                 ELSEIF aWst:wsCol >= 28 .AND. aWst:wsCol <= 30 // clicou em "Direita"
                    oTbr:right()
                 ENDIF
      
            CASE aWSt:wsType == WAIT_MOUSEDOWN .AND.; // c¢digo para habilitar cliques nas c‚lulas do tbrowse
                 aWSt:wsRow >= 6 .AND. aWSt:wsRow <= 20 .AND.;
                 aWSt:wsCol >= 3 .AND. aWSt:wsCol <= 75
                 nLin := aWSt:wsRow
                 nCol := aWSt:wsCol
                 nTbrLin := oTbr:rowPos
                 nTbrCol := oTbr:colPos
                 oTbr:deHilite()
                 oTbr:rowPos := nTbrLin + nLin - ROW()  // Acerta linha
         
                 VLMouseOff()
                 FOR nInd = oTbr:rightVisible TO oTbr:leftVisible STEP -1
                     oTbr:colPos := nInd
                     oTbr:Hilite()
                     IF COL() - 1 <= nCol
                        oTbr:Hilite()
                        EXIT
                     ENDIF
                 NEXT
                 oTbr:refreshCurrent()
                 VLMouseOn()
               
         ENDCASE

      END

   EndIf

   RstEnv(aEnv)

Return Nil

Function fNovoCli

   Use CadCli Alias cadcli Shared New
   Set Index To CadCli
   Set Order To 1  
   cadcli->(DbGoTop())

   cCodigo := Padl("1",5,"0")

   Do While ! Eof()

      Locate For cadcli->Codigo == cCodigo

      If Eof()

         Close cadcli
         Return cCodigo

      Else

         cCodigo := AllTrim(Str(Val(cCodigo)+1))
         cCodigo := Padl(cCodigo,5,"0")

      EndIf

   EndDo

   Close cadcli

Return cCodigo
Piter Galdiano
Programador Clipper
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Eu consegui compilar sem problemas eu estou usando agora o clipper 5.2e.
Eu não possuia a Visual Lib somente copiei o arquivo visual2.ch para o diretório onde estava o prg e compilei.

// o prg e o obj
http://geocities.yahoo.com.br/dudu_xbase/piter.zip

Estou usando clipper5.2e meu Micro esta com rwin98.

// Meu Config.sys tá assim
SHELL=C:\WINDOWS\COMMAND.COM /e:2048
DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICEHIGH=C:\WINDOWS\EMM386.EXE NOEMS NOVCPI
DOS=HIGH,UMB
FILES=200
BUFFERS=40,0

// No Meu Autoexec.bat eu carrego tudo na memória superior
LH mode con codepage prepare=((850) C:\WINDOWS\COMMAND\ega.cpi)
LH mode con codepage select=850
LH keyb br,,C:\WINDOWS\COMMAND\keybrd2.sys /ID:275

Vc ta usando qual versão do clipper ?


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Seu código está limpo, o problema acho que pode ser os includes, se houver muitas declarações nos includes este erro também pode ocorrer.

Faça como a primeira dica, coloque no PRG os defines que vc usa.

Sem mais
Wagner Nunes
www.vagucs.com.br
Sem mais
Wagner Nunes
www.vagucs.com.br
PITERGALDIANO
Usuário Nível 2
Usuário Nível 2
Mensagens: 91
Registrado em: 28 Nov 2003 08:48

Mensagem por PITERGALDIANO »

uso windows XP! e clipper 5.2

pode ser por isso?
Piter Galdiano
Programador Clipper
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Olá,
vagucs escreveu:Este problema é muito no Clipper quando a versão dele está abaixo da 5.2e
Dudu_XBase escreveu:Eu consegui compilar sem problemas eu estou usando agora o clipper 5.2e
PITERGALDIANO escreveu:uso windows XP! e clipper 5.2
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Responder