VARIAVEIS

MARCELO.VB.PIRA 11/08/2009 23:55:46
#319629
Olá amigos...

para pegar os controles (e seus devidos conteúdos) de um form, eu já sei como se faz.

a pergunta agora é:

teria como pegar as variaveis (declaradas ou não) de uma subo ou do form inteiro? ou pelo menos os valores delas ?

Obrigado a todos...
JSFF77 12/08/2009 08:22:30
#319637
Bom dia.

Amigo,

Veja se é isso o que precisa:

[ô]FORM1 - Declare em General Declarations as variáveis como Public para que possam ser utilizadas em outros módulos:

Public VAR1 As TIPO
Public VAR2 As TIPO
Public VARN As TIPO

[ô]FORM2 - Utilize as variáveis do FORM1:

FORM1.VAR1
FORM1.VAR2
FORM1.VARN

Observe que isso também se aplica à funções e procedimentos Sub, mas desde que sejam declarados como Public.

Até mais.

José Freitas


KERPLUNK 12/08/2009 09:22:39
#319646
O ideal mesmo, seria criar PROPRIEDADES no seu form, são mais versáteis e mais leves:
No form:
private varNome as string
public property get Nome() as string
return varNome
end property

Public property Let Nome(valor as string)
varNome = valor
end property

Para usar:
Form1.Nome = [Ô]XXX[Ô]
MARCELO.VB.PIRA 12/08/2009 11:14:21
#319654
eeeerrrrrrrrrr....

acho que me expliquei mal...

na verdade, eu preciso disso para uma rotina de tratamento de erros...

quando um erro ocorre no sistema, o usuario tem a opção de me enviar esse erro por mail...

bom...

o que vem neste relatorio?

a linha, o erro, o modulo, precediemnto, etc...

o usuario, a empresa, etc...

alem disso, esse relatório mostra quais forms estão abertos e os controles que tem nele e seus conteudos...

ainda dou a opção do usuário escrever algo junto do rela'torio ...

eu uso alguns nomes para variaveis sql que são publicas, esse relatorio tb mostra os valores destas variaveis...

exstem outras variaveis publicas inportantes que tb são mostradas neste relatório...

alem disso, o relatorio mostra todos os processos que estão rodando naquele momento ( isso serve para saber se num é um joguinho ou um site pornô que gerou o erro)

e para finalizar, o sistema dá um print screen na tela e me manda junto.

dessa forma eu consigo determinar o que estava acontecendo no sistema, quais forms abertos, o que estava dentro de cada controle do form, uma copia da tela e os programas que estavam rodando na maquina naquele momento.

então:

tudo isso é gerado em um modulo de erro.

o que eu tava precisando, é que deste modulo que gera esse relatorio, ele pegasse quais forms estão abertos (isso é facil) e ele mesmo percorresse o form para saber quais variaveis foram criadas e estao sendo usadas para pegar o nome delas e o valor delas.

nem que para isso eu tivesse que declarra todas a varias como PRIVATE na parte de DECLARATIONS do form, ao inves de declarar elas dentro de cada procedure

pois as vezes o erro ocorre com o valor de uma determinada variavel, e como elas são locais não dá para pegar ela a partir de um modulo externo aos forms ativos no momento.

a não ser que eu ponha TODAS as variaveis do projeto todo como publicas, mas tem as variaveis dos laços for-next, que essas eu perderia...
tenderam?

Valeu!!!

Ha!!! caso alguem tenha ficado curioso como fica esse formulario que meu sistema me envia por mail, aí está um link onde vcs podem baixar ele para dar uma olhada.

http://www.dusistemas.com.br/erro.pdf

e como eu sei também que vocês vão ficar curiosos para saber como é essa rotina de tratamento e envio de roo, neste link abaixo tem uma cópia dela para vocês se divertirem com ela:

http://www.dusistemas.com.br/erros.bas

vocês devem estar se perguntando como eu faço para chamar essa rotina, certo? uso o add-in MZ-TOOLS que me permite criar a chamada em cada uma das procedures do projeto com apenas um clique. funciona assim:

tenho a seguinte procedure:

Private Sub Grid_ItemClick(ByVal item As MSComctlLib.ListItem)
20 If FuncaoSetor = [Ô]Inclusão[Ô] Then Exit Sub
30 PegaDadosGrid (item.Text)
End Sub


quando aciono o mztools, ele AUTOMATICAMENTE transforma ela nisso:


Private Sub Grid_ItemClick(ByVal item As MSComctlLib.ListItem)
10 On Error GoTo Grid_ItemClick_Error

20 If FuncaoSetor = [Ô]Inclusão[Ô] Then Exit Sub
30 PegaDadosGrid (item.Text)

40 On Error GoTo 0
50 Exit Sub

Grid_ItemClick_Error:

60 Erro01 = Err.Number: Erro02 = Err.Description: Erro03 = Erl: Erro04 = [Ô]:Formulário Setor[Ô]: Erro05 = [Ô]:Sub Grid_ItemClick[Ô]: Erro06 = Err.Source: Erro07 = [Ô][Ô]: Erro08 = [Ô][Ô]: Call ErroTratado

End Sub


as variavies:
Erro01
Erro02
Erro03
Erro04
Erro05
Erro06
são públicas

ha!!! ele tambem alimenta uma tabela no banco de dados com a ocorrencia do erro para que mesmo que o cidadão nao me envie, eu possa ter um resumo da caca que deu...

não se esqueça que é importante o código estar numerado para que chegue para você o numero da linha onde ocoreu o erro. O MZTOOLS tambem faz isso...

no link abaixo, tem um artigo falando sobre o MZ-TOOLS

http://www.dusistemas.com.br/mztoolls.rar



KERPLUNK 12/08/2009 11:19:21
#319656
Usando as proprieades como te mostrei, é possível sim.
KERPLUNK 12/08/2009 13:22:16
#319671
Algo parecido com isso:

Private mvarNome As String
Public Propriedades As Collection
Public Property Get Nome() As String
Nome = mvarNome
End Property
Public Property Let Nome(valor As String)
mvarNome = valor
If Me.Propriedades([Ô]Nome[Ô]) Is Empty Then Me.Propriedades.Add Nome, [Ô]Nome[Ô] Else Set Me.Propriedades([Ô]Nome[Ô]) = valor

End Property
Private Sub Form_Load()
If Me.Propriedades Is Nothing Then Set Me.Propriedades = New Collection
Me.Propriedades.Add Me.Nome, [Ô]Nome[Ô]

Me.Nome = [Ô]XXX[Ô]

MsgBox Me.Propriedades([Ô]Nome[Ô])
End Sub
Tópico encerrado , respostas não são mais permitidas