Page 1 of 1

Valid dos Gets - Alguém pode me ajudar?

Posted: Thu May 03, 2007 2:29 pm
by Soares289
Estou tendo muitos probemas com os gets, preciso montar um esquema que crie os gets e use os valids, mais todas as minhas tentativas foram fracassadas, alguém ai sabe como usar os valids?

Vou postar um exemplo do que estou tentando fazer, mais sempre da um dos problemas, ou retorna o erro da funçõ TRANSFORM ou o que é digitado em um get passa para todos, ou nem da para digitar nos gets, e tem mais, só que não vale a pena colocar aqui.

Code: Select all

#include "SQLRDD.ch"
#include "FiveWin.ch"

function main(cDSN)
   local oWnd, v, t,vali, c := 1 , oG   
   DEFINE WINDOW oWnd FROM 1,1 TO getSysMetrics(1)/2,getSysMetrics(0)/2 PIXEL TITLE "Teste"   
   oG := array(4)    // <-- Minha ultima esperança ;( (Não funcionou)
   v=array(4)
   v[1]  := "o"
   v[2]  := "a"
   v[3]  := "b"
   v[4]  := "d"
   ttop  := 1
   
   for c = 1 to 4   
      t=v[c]      
      private &t := space(10)
      
      vali  := "!EMPTY(" + t + ")"
      oG[c] := TGET():New(tTop, 1,{|| &t }, oWnd, 50, 10,, &(vali))
      //@ ttop,1 GET &(t) PICTURE "@!" VALID &(vali)
      ttop+=2
           
   next
   ? o ; ? a ; ? b ; ? d    // apenas para comprovar que a variavel foi declarada (Não confio nesse macro)
   ACTIVATE WINDOW oWnd
return
Já não sei mais como fazer isso, se alguem tiver qualquer sugestão ou opinial ou ainda uma solução, me envie, ficarei MUITOOO AGRADECIDO.

Obrigado, t+.

Posted: Thu May 03, 2007 2:34 pm
by pymsoft
Mira este post, te servirà para orientarte


http://fivetechsoft.com/forums/viewtopi ... hed+locals


Saludos

Posted: Thu May 03, 2007 2:44 pm
by Soares289
Olhei o post, mais não entendi muito bem...
o codeblock que estou passando está errado?

Posted: Thu May 03, 2007 3:38 pm
by pymsoft
Prueba asi:

Code: Select all

#include "SQLRDD.ch"
#include "FiveWin.ch"

function main(cDSN)
   local oWnd, v, t,vali, c := 1 , oG   
   DEFINE WINDOW oWnd FROM 1,1 TO getSysMetrics(1)/2,getSysMetrics(0)/2 PIXEL TITLE "Teste"   
   oG := array(4)    // <-- Minha ultima esperança ;( (Não funcionou)
   v=array(4)
   v[1]  := "o"
   v[2]  := "a"
   v[3]  := "b"
   v[4]  := "d"
   ttop  := 1
   
   for c = 1 to 4   
      t=v[c]     
      private &t := space(10)
     
      vali  := "!EMPTY(" + t + ")"
      oG[c] := TGET():New(tTop, 1,  GenBlock( v, c ), oWnd, 50, 10,, &(vali))
      //@ ttop,1 GET &(t) PICTURE "@!" VALID &(vali)
      ttop+=2
           
   next
   ? o ; ? a ; ? b ; ? d    // apenas para comprovar que a variavel foi declarada (Não confio nesse macro)
   ACTIVATE WINDOW oWnd
return 


function GenBlock( v, c )
RETURN { || v[c] } 

Saludos

Posted: Thu May 03, 2007 5:10 pm
by Soares289
Agora entendi, nesse caso do array funcionario, mais esse código que postei é apenas um prg de teste que estava montando.
O intuito disso é o seguinte, a classe que estou montando deve criar uma tela de "EDIÇÃO" com todos _ do browse aberto, o problema é que o browse não tem todos _ da tabela, só os que estão especificados em uma outra tabela, e nessa mesma tabela com os nomes das colunas que o browse vai ter, tem também a rotina de validação de cada campo, e apartir dai que vou ter que tirar.

Basicamente o seguinte , pego a rotina como string e uso o macro na hora de criar a janela de edição, e como o banco de dados tem _, fica ruim fazer a edição direto no browse.

Como solução, gravei tudo em um array para quando criar os get pegar o valid e a Picture direto dele tb, o nome _, etc.
Para você entender melhor, você pode dar uma olhada em um tópico que postei parte dessa rotina.

http://fivetechsoft.com/forums/viewtopi ... highlight=

E fica complicado fazer diferente, pois estou passando o sistema de modo texto para modo grafico, e já existe muitos clientes usando ele, fica complicado trocar o banco de dados de todos eles, ou fazer isso sem pegar do banco de dados, pois cada empresa que usa o sistema tem seus campos nas tabelas, etc.

De qualquer forma, obrigado pela ajuda, vou tentar usar essa idéia para fazer isso, obrigado. T+.

Posted: Fri May 04, 2007 8:49 pm
by Soares289
Eu consegui fazer cada get ter um valor diferente, ligado direto no browse, o problem é que se edito um desses gets, assim que ele perde o fóco, o get retorna ao valor antigo, assim não vale de nada oque digito nele.

Como que fasso com isso? Aluém pode me ajudar?

Posted: Fri May 04, 2007 9:07 pm
by RenOmaS
VC pode experimentar

function GenBlock( v, c )
RETURN { |u| If( u == Nil, v[c], v[c] := u ) }

Posted: Mon May 07, 2007 11:40 am
by Soares289
Eu estava msm tentando fazer algo parecido, mais estava me confundindo na hora de rotornar o codeblock, vou tentar fazer dessa forma ai.

Muito obrigado msm,flw. :D

Posted: Mon May 07, 2007 12:45 pm
by Soares289
Os gets foram montados, mais não da pra digitar nada neles.
Já tentei mudar o conteudo deles mais não consegui.