Não consegui descobrir qual é o erro?

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

apo
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 10 Fev 2008 11:22
Localização: pONTES GESTAL

Não consegui descobrir qual é o erro?

Mensagem por apo »

ME AJUDEM A DESCOBRIR O ERRO!

*PROGRAMA AGENDAR.PRG
CLEAR
USE PROD
SET INDEX TO AGENDAR.PRG
cASSUNTO :=SPACE(30)
nHORA :=SPACE(5)
nDATA :SPACE(8)
CLS
DO WHILE .T.
@ 7,56 SAY "ASSUNTO" GET cASSUNTO
@ 7,66 SAY "HORA" GET nHORA
@ 7,75 SAY "DATA" GET nDATA
RETSCREEN (4,0,20,79,TELA1)
RETURN
SET COLOR TO B
@22,60 SAY SPACE (17)
LOOP
READ
@ 22,15 SAY SPACE(60)
@ 22,15 SAY "CONFIRMA OS DADOS ACIMA?"
@ 22,42 prompt "SIM"
@ 22,48 PROMPT "NÃO"

MENU TO OP
@ 22,15 SAY SPACE(60)
IF OP=2
LOOP
ELSEIF= OP 1
APPEND BLANK
REPLACE ASSUNTO WITH cASSUNTO
REPLACE ASSUNTO WITH nHORA
REPLACE DATA WITH nDATA

@22,15 SAY "QUER CONTINUAR?"
@ 22,42 prompt "SIM"
@ 22,48 PROMPT "NÃO"
@ 22,15 SAY SPACE(60)
IF= OP 1
cASSUNTO =(0); nHORA =SPACE(5); nDATA =SPACE(8)
RETSCREEN (4,0,20,79,TELA1)
LOOP
ELSEIF PO=2
@ 22,15 SAY SPACE(15)
CLOSE DATABASE
ELSEIF
RETURN
ENDDO


- PESSOAL ISSO É UM PROGRAMA AGENDA POR FAVOR ME AJUDEM A ACHAR OS ERROS!
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á

Mensagem por Pablo César »

Caro colega,

Primeiramente gostaria de pedir-te que todo código seja utilizado os recursos de edição do fórum (o botão "Code" para fontes), já com as devidas endentações do seu código que possibilitará entender melhor. Você utilizando endentações você mesmo irá conseguir detectar os erros graves que tem.

Para cada DO WHILE existe um ENDDO, para cada IF existe um ENDIF. Comece por aí. Feche o que ficou aberto. No inicio dos seus GETs existe um RETURN, não sei qual seria a finalidade disso, pois o RETURN irá sair fora daquele módulo (não faz sentido).

E também aceite outro conselho: quando postamos uma mensagem, tente ser objetivo, se está dando erro, coloque a mensagem de erro e especifique onde e quando ocorre o erro, é dizer, ocorre na compilação, na execução.

Percebo que você não tem muita familiaridade com programação, mas precisa manter uma certa ordem. Intentarei ajudá-lo mas precisa corrigir seu programa.
Editado pela última vez por Pablo César em 19 Fev 2008 10:55, em um total de 1 vez.
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.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Ao entrar no WHILE já tem um RETURN?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
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á

Mensagem por Pablo César »

Caro APO,

Eu tentei utilizar seu código, endentei-o e fiz algumas observações para você poder entender cada passo que você deu. Não interprete como lição alguma, só apenas como esclarecimento para que você possa compilar-lo e não perder o ânimo de programar (isso se é isso que voce deseja). Então dê uma olhada no seu código abaixo:

Código: Selecionar todos

*PROGRAMA AGENDAR.PRG 
CLEAR // Tire isso

USE PROD /* Normalmente use o nome do DBF que sugira a sua finalidade
         (neste caso deveria ser AGENDA.DBF)*/

// SET INDEX TO AGENDAR.PRG /* nao eh padrao voce dar o nome do indice como PRG,
                         pois PRG eh para programacao. Utilize a extensao NTX,
                         para o caso de precisar fazer procura no arquivo.
                         Se precisar, antes verifique se o arquivo existe.
                         Se nao existir crie o arquivo de indice antes desta
                         linha.*/


 
cASSUNTO :=SPACE(30) 
nHORA :=SPACE(5) // nHora deveria ser cHora (porque eh do tipo caracter)
nDATA :SPACE(8) /* falta o sinal de igual e este campo deveria ser tipo DATA
                   nao tipo caracter. Entao faca assim: dData:= CTOD("  /  /    ")

CLS 
DO WHILE .T. 
   @ 7,56 SAY "ASSUNTO" GET cASSUNTO
   @ 7,66 SAY "HORA" GET nHORA // substitua nHora por cHora
   @ 7,75 SAY "DATA" GET nDATA
   // aqui falta um READ

   RETSCREEN (4,0,20,79,TELA1) // voce salvou a tela na variavel TELA1 ?
   RETURN  // Tire isso

   SET COLOR TO B
   @22,60 SAY SPACE (17)
   LOOP // Tire isso
   READ // Tire isso

   /* As linhas abaixo estao muito confusas. Permita-me inutilizar e substui-las
   =============================================================================
   @ 22,15 SAY SPACE(60)
   @ 22,15 SAY "CONFIRMA OS DADOS ACIMA?"
   @ 22,42 prompt "SIM"
   @ 22,48 PROMPT "NÃO"

   MENU TO OP
   @ 22,15 SAY SPACE(60)
   IF OP=2
      LOOP
   ELSEIF= OP 1
      APPEND BLANK
      REPLACE ASSUNTO WITH cASSUNTO
      REPLACE ASSUNTO WITH nHORA
      REPLACE DATA WITH nDATA

      @22,15 SAY "QUER CONTINUAR?"
      @ 22,42 prompt "SIM"
      @ 22,48 PROMPT "NÃO"
      @ 22,15 SAY SPACE(60)
      IF= OP 1
         cASSUNTO =(0); nHORA =SPACE(5); nDATA =SPACE(8)
         RETSCREEN (4,0,20,79,TELA1)
         LOOP
   ELSEIF PO=2
      @ 22,15 SAY SPACE(15)
      CLOSE DATABASE
   ELSEIF
      RETURN
   aqui faltou o ENDIF
   =============================================================================

   Considere as linhas acima substituída pelas linha seguintes: */

   OP:=ALERT("Confirma os dados acima ?",{"Sim","Nao"})

   IF LASTKEY()=27 // esta eh uma forma de sa¡da do seu DO WHILE
      EXIT
   ENDIF

   IF OP=1
      APPEND BLANK
      REPLACE ASSUNTO WITH cASSUNTO

      // REPLACE ASSUNTO WITH nHORA (ASSUNTO outra vez ? ir  sobrepor o anterior)
      REPLACE HORA WITH cHora

      REPLACE DATA WITH dDATA
   ENDIF
ENDDO
Claro que o código acima, ainda pode e deve ser melhorado, principalmente se esse aplicativo irá funcionar em rede. Daí terás que implementar as funções de tratamento. Mas para um início, acho que este aqui estão bom.
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.
Responder