Página 1 de 1
Não consegui descobrir qual é o erro?
Enviado: 19 Fev 2008 09:24
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!
Enviado: 19 Fev 2008 09:38
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.
Enviado: 19 Fev 2008 10:06
por Maligno
Ao entrar no WHILE já tem um RETURN?
Enviado: 19 Fev 2008 10:46
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.