Erro exibir ALERT

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

raquelreis
Usuário Nível 2
Usuário Nível 2
Mensagens: 87
Registrado em: 18 Jul 2011 15:29
Localização: à procura

Erro exibir ALERT

Mensagem por raquelreis »

Pessoal Boa Tarde, parece simples. Porém não estou conseguindo "parar" minha rotina e exibir um simples alerta de conclusão :( .

Segue Código:

Código: Selecionar todos

SET DELE ON  
CLS     
** --- Variáveis --- ** 
p1 := p2 := SPACE(12)
pRESP := SPACE(1) 
p1COR := p1TAM := NIL
p1ESTATUAL := 0

WHILE .T.

@ 03,02 TO 20,75

@ 05,15 SAY "MUDAR O CODIGO ----------> " GET P1 PICT "@!" VALID !EMPTY(P1)
@ 07,15 SAY "PARA O CODIGO -----------> " GET P2 PICT "@!" VALID !EMPTY(P2)
@ 09,15 SAY "Confirma Alteracao (S/N) ? " GET pRESP PICT "@!" VALID(pRESP$"SN")
READ
INKEY(0)
 IF LASTKEY()=27 .AND. pRESP = "N"
   CLOSE ALL
   CLS
   RETURN 
ELSE

*   ////////////////
*  // CADPOS.DBF //
* ////////////////  
  * // Alteração Quando já existir o P2 atualizar o estoque  
 
  USE CADPOS
  INDEX ON CODIGO TO CADPOS3
  
  CLOSE CADPOS
  USE CADPOS
  SET INDEX TO CADPOS3.NTX

  CONTA := 1

  @ 12,12 SAY "Aguarde um momento... Atualizando CADPOS.DBF !!!"

  while .T.
   @ 13,28 SAY CONTA
 SET ORDER TO 3
 SEEK P1 
 IF !FOUND()   
  close all
  cls
  return
 else       
    p1COR := COR 
    p1TAM := TAMANHO 
    p1ESTATUAL := ESTATUAL 
    lParidade := .F. 
    SEEK P2 
      IF FOUND() 
        WHILE CODIGO = P2 
          IF COR = p1COR .AND. TAMANHO = p1TAM 
            REPL ESTATUAL WITH ESTATUAL + p1ESTATUAL 
            lParidade := .T.
            CONTA++                       
          ENDIF
         SKIP
         ENDDO                
      ENDIF 
    SEEK P1
      IF lParidade = .F. 
        REPL CODIGO WITH P2
        CONTA++ 
         SKIP;LOOP 
      ELSE 
        DELE 
      ENDIF
  endif
  loop
 ENDDO       
* --- Fim CADPOS 
  DBCOMMITALL()

  ALERT("* * * ROTINA REALIZADA COM SUCESSO! * * * ")
  ALERT("ATENCAO=>Ao entrar no sistema, INDEXAR todos os arquivos!")                    
ENDIF

inkey(0)
CLOSE ALL
CLS
RETURN
ENDDO 


Obrigada à todos!
Keel
[]'s

_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Erro exibir ALERT

Mensagem por Pablo César »

No seu código você possui 2 "loop" nas linhas 68 e 73, na minha opinião são desnecessários por causa do laço de repetição WHILE .t. também não entendí a sua necessidade dp SKIP...

Sugiro você compilar com opção /B e debugar através do CLD pra ver passo a passo o funcionamento do seu código.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Maurício Elias
Usuário Nível 3
Usuário Nível 3
Mensagens: 304
Registrado em: 12 Mai 2005 08:48

Erro exibir ALERT

Mensagem por Maurício Elias »

Olá, boa tarde.

Não cheguei a testar, mas acho q no Alert, vc tem q passar o segundo parâmetro, que seria o botão. Vc tá passando só a mensagem.

Abraços.

_______
Maurício
Abraços.
_______
Maurício
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Erro exibir ALERT

Mensagem por alxsts »

Olá!

Deve ser por outra razão...

Alert() recebe três parâmetros, sendo que o segundo e o terceiro são opcionais.

Código: Selecionar todos

Alert( cMensagem, [aOpções], [cCor])
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Erro exibir ALERT

Mensagem por Jairo Maia »

Olá Raquel,

Vc alterou pakas o código, fez coisas que exigiram gambiarra, como o INKEY(0) na linha 17, pq vc deixou a atualização das variáveis de campo fora do laço que vc criou dentro do que já existia. Bom, sobre os LOOPS o colega Pablo já falou, mas não vou entrar nessa questão, vamos nos ater apenas ao porque o ALERT não está sendo exibido:

Coloque a mensagem que vc deseja exibir, antes do LOOP que vc colocou na linha 73.

NOTA: Se vc manter o LOOP na linha 68, se lParidade for .f., a mensagem não será exibida, pq o sistema não vai passaar pela mensagem. Pode remover esse LOOP com segurança. Veja que existe a condicional IF, assim, se uma condição for atendida a outra não é executada. Sem medo, exclua esse LOOP, ou não vai funcionar, salvo se vc colocar a mensagem também antes da linha 68.

NOTAS:
1- Você está trabalhando apenas com o indice CADPOS3, mas na linha 42 vc seleciona o indice da área 3. No Clipper não tem problema. Mas tenha em mente que se futuramente vc vier a trabalhar com Harbour ou xHarbour, vc terá a mensagem: "WORK AREA NOT INDEXED".

Remova o inkey(0) da linha 82. Ele não tem sentido ai. Creio que foi uma tentativa de parar para exibir o alert.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
raquelreis
Usuário Nível 2
Usuário Nível 2
Mensagens: 87
Registrado em: 18 Jul 2011 15:29
Localização: à procura

Erro exibir ALERT

Mensagem por raquelreis »

Boa tarde à todos!
Agradeço a ajuda de todos vcs. O código não é meu. Fiz sim modificações. Concordo inteiramente sobre "gambiarras".
O "INKEY(0)" nem sei ao certo para que ele está ai. Já o retirei.
Sobre os loops e skips já retirei. Porém me ALERT ficou exibindo a cada loop. Quero que o exiba apenas no fim da rotina.
Jairo Maia escreveu:Você está trabalhando apenas com o indice CADPOS3
O código que postei não está completo. É apenas uma parte. Na mesma rotina trabalho com mais 5 arquivos dbf e mais alguns indices. Ao retirar a parte que postei, meus alertas funcionam.
Keel
[]'s

_____________________________________________________________________________________
PROGRAMADOR é aquele que te resolve um problema que você não sabia que tinha, de uma maneira que você não compreende.
Responder