Estava esses dias em cassa desenvolvendo algo mais ou menos assim: UMa funcao recebe um monte de vetores que mostram os gets/ read na tela para entrada de dados. Até aí sem problemas. So que na hora de validar os dados estou tendo um problema. na Função Pesq_Val_Dbf eu preciso que ao validar o codigo a funcao somente valide o proximo campo assim que eu ter digitado os dados referente ao campo anterior. E assim sucessivamente, para que por exemplo ao validar um campo a função nao passe para o proximo e fique mostrando (Mensagens) / testando (Clausula valid) para um monte de campos na hora errada (Tudo d euma vez). Cada campo deve ser verificado no momento da digitacao.....O objetivo final d afunÇão e atribuir um vetor que possui o nome do dbf para verificar cada conteudo dos campos atraves do dbf(Fazer teste de consistencia) e assim sucessivamente.....Não sei se fui claro....A função esta parcialmente completa.. SO falta ajustar como ele vai validar no momento certo campo a campo (So depois que o usuario digitar )...ALguem tem alguma sugestão......
Desde ja agradeço a paciencia......
Abração pessoal....
Código: Selecionar todos
// Procedimento para mostrar os campos e receber a entrada
// de dados de cada variavel
Function Mostra_Var(Vet_Variaveis,Vet_Var_Label,Vet_Var_Pict,Lin1,Col1,UltLin,PuloCol)
local PrimeiraLinha,cont
PrimeiraLinha=Lin1
for cont=1 to len(Vet_Variaveis)
// Caso a variavel nao tenha nome/ Label
// A mesma recebe um nome padrao
// Utilizado na sua declaracao
// isso evita erro de acesso no vetor
// Bound array error access
If empty(Vet_Var_Label[cont])
// aadd(Vet_Var_label,"varmen:")
Vet_Var_Label[cont]:="Varmen:"
endif
// Caso o vetor de pictures seja vazio
// Adiciona-se uma mascara padrao
// a fim de evitar erros de acesso no vetor
// de mascaras
//20/03/2010
// Obs: Sera preciso verificar a existencia da posicao
// no vetor para acabar com o Bound error caso a posicao
// nao exista.
if empty(Vet_Var_Pict[cont])
// ains(Vet_var_label,cont)
aadd(Vet_Var_Pict,"")
// Vet_Var_Pict[cont]:="@!"
endif
// O problema e aqui????? Na clausula VAlid com chamada da função:
@ Lin1,Col1 say Vet_Var_Label[cont] get Vet_variaveis[cont] Pict Vet_Var_Pict[cont];
Valid Pesq_val_dbf(Vetnomedbf,VetnomeIndice,1,len(Vet_variaveis),Vet_variaveis[cont-1],Cont-1)=-1
// inkey(0)
lin1++
// se a linha for a ultima deve-se iniciar
// da primeira linha aumentando a coluna
// Efeito de pagina‡Æo a fim de evitar cortes
if lin1=UltLin
Lin1=PrimeiraLinha
Col1=col1+PuloCol
endif
// @ 5,30 say cont
// inkey(0)
next cont
Return(Vet_variaveis)
// Funcao auxiliar para procurar o valor de um campo dentro dos Dbfs
// Os dbfs estao dentro de um vetor, assim com os indices
// Com ela e possivel escolher a posicao inicial e posicao final e assim
// restringir quais dbfs serao utilizados para um valid por exemplo
Static Function Pesq_Val_Dbf(Vet_Nome_DBF,Vet_Nome_indice,Num_Dbf_Inic,Num_DBf_Fin,Pesq_Val,Num)
Local Val_Encontrado,cont
// cont=Num
cont=1
@ 5,5 say inkey()
do while cont<13
// for cont=Num_Dbf_Inic to Num_Dbf_Fin
@ 1,1 say vetVar[cont]
@ 2,1 say Vet_Nome_dbf[cont]
@ 3,1 say Vet_Nome_indice[cont]
@ 1,30 say cont
// @ 5,5 say pesq_val[1]
// Caso a posicao no vetor seja vazia a procura nao deve
// ser realizada, pois deve-se abrir um Dbf que exista
// e nao com nome inexistente po posicao em branco
if !empty(Vet_Nome_dbf[cont]) .or. !empty(Vet_Nome_dbf[cont])
Use &(Vet_Nome_dbf[cont]) index &(Vet_Nome_indice[cont])
dbgotop()
seek VetVar[cont]
if found()
Val_Encontrado=0
alert("Valor encontrado")
// exit
elseif .not. found()
Val_Encontrado=-1
alert("Valor Nao encontrado")
// exit
endif
endif
cont++
enddo
// next cont
return(Val_Encontrado)---
Nota da Moderação (Maligno):
A presente mensagem teve de ser editada para a inclusão das tags de indentação de código, necessárias para uma melhor compreensão do código fonte. Por favor, futuramente, não se esqueça de incluir essas tags. Avaliar o código alheio já é uma tarefa ingrata, que se torna muito mais difícil sem a devida indentação.


