Sincronização de Formulários

Delphi

11/10/2004

Pessoal, como sabem sou iniciante no Delphi (acabei de fazer um curso de 40h ´para iniciantes´) e, infelismente, tenho inúmeras dúvida. Daí eu postar, aqui, questões muito simples (coisa de iniciante mesmo!) e talvez não despertar maiores interesses nos demais cologas. Peço desculpas por isso.

Nesse sentido é que posto mais uma dúvida e peço a ajuda daqueles que têm paciência em ajudar aqueles que sabem muito pouco, pouco mesmo, porém tem grade interesse em aprender.

Questão: como sincronizar dois forms?

Explico:

Tenho um form principal, onde são mostrados os dados principais e constantes (fixos) do empregado, tais como nome, data nascimento, cpf, etc.
Em um outro form, mostro outras informações desse funcionário, normalmente as informação ´variaveis´, tais como frequencia, progressão funcional, afastamentos, etc.
A idéia é que ao clicar, por exemplo, no botão ´frequencia´ existente no form_principal do empregado seja aberto o form_freq e mostre as frequencias do empregado corrente no form_principal. E mais.. qdo se clicar nos botões de navegação além de mudar o empregado corrente, é preciso que os dados no form_freq sejam mudados também.

desculpem se me alonguei demais e se não me fiz entender.
obrigado


Ananias Duarte

Ananias Duarte

Curtidas 0

Respostas

Samth

Samth

11/10/2004

Não se preocupe com isso, Ananias, todos ja foram iniciantes um dia. Eu sei como é isso...as vezes alguns se esquecem disso e tripudiam dos outros.

Mas... Você quer sincronizar form mesmo ou duas tabelas?

Se você colocou os dados em uma tabela só, quando você abre a mesma tabela em outro form, normalmente, ela já esta no registro atual escolhido.

Se vc quer sincronizar duas tabelas (mostrar o registro de uma relacionado ao de outra) você deve criar um relacionamento entre elas por um campo (por exemplo ID). Dá uma olhada em:

[url]http://www.imasters.com.br/artigo.php?cn=2491&cc=22[/url]
[url]http://www.imasters.com.br/artigo.php?cn=2419&cc=149[/url]

Se não era isso que vc queria, manda mais detalhes...

Espero ter ajudado! :wink:


GOSTEI 0
Ananias Duarte

Ananias Duarte

11/10/2004

Obrigado Samth pela participação.
Quero, inicialmente, dizer que também sou iniciante aqui no forun e já coloquei três questões aqui. Em todas foi atendido e se as respostas colocadas não atenderam 100¬ das minhas expectativas, creio, foi por culpa minha de não me fazer entender. Sei que ´colocar no papel´ o ´problema´, para mim, particularmente, não é tão fácil assim.
Assim, quero dizer que tenho recebido a atenção de todos aqui do forun o que agradeço imensamente.

Bem, vamos à questão:

São dois forms mesmos vinculados a duas tabelas diferentes, sendo que nas duas tabelas existem um campo comum: o ID. É esse campo que as une (relacionamento: um para muitos).

Obs.: O aplicativo que estou desenvolvendo em DELPHI já foi desenvolvido, por mim, em ACCESS, ou seja: estou migrando de ACCESS para DELPHI.

No Access a sincronização dos forms é feita, no meu caso, através da propriedade FILTER. Assim:

NO FORM ´UM´ (EVENTO: no atual)
If EstáCarregado(´frmProle´) Then
Forms![frmProle].Filter = ´idAnimal=´ & Me.idAnimal
Forms![frmProle].FilterOn = True
End If

NO FORM ´DOIS´ (EVENTO: ao abrir)

Me.Filter = ´idAnimal = Forms![_Rebanho Geral]![idAnimal]´
Me.FilterOn = True

Então, o quero eu quero fazer é a mesma coisa no DELPHI.

abraços


GOSTEI 0
Ananias Duarte

Ananias Duarte

11/10/2004

Continuo na expectativa!
Valeu


GOSTEI 0
Rjun

Rjun

11/10/2004

Caro amigo

Voce não disse qual banco e qual tecnologia de acesso está utilizando, mas verifique as propriedades Datasource e MasterSource.


GOSTEI 0
Dopi

Dopi

11/10/2004

Esse forms são independentes ? Ou seja, o usuário pode abrir o Form de Frequencia sem abrir o de empregados ?

Se nao for o caso, o mais fácil (e comum) é inserir o Grid de Frequencia no mesmo form dos funcionários. e usar um relacionamento mestre/detalhe.

Se vc realmente deseja 2 forms, use o evento Funcionarios.OnDataChange do Form de empregados, cada vez que esse evento for disparado, voce deverá atualizar tb os dados do Form de frequencias com os dados do novo funcionário.


GOSTEI 0
Ananias Duarte

Ananias Duarte

11/10/2004

Caro Rjun:
O Bco é Access, conectado via ADO.

Caro Dopi:
São dois forms distintos. Posso abrir qualquer um independentemente.
A ´tecnologia´ do DBGrid no mesmo form, bem como aquela de vários forms num só (abinhas) eu conheço, porém não é isso que quero. É pura questão de ´estilo´.
O form_Freq, na verdade, será um DbGrid com os dados da frequencia do empreado, porém num form específico.

A idéia de se ter um form_principal (dados gerais/fixos do empregado) exclusivo, se deve a fato que deverão ser abertos diversos outros forms, tais como form_frequencia, form_afastamentos, form_trabalhos, form_progressao, etc. cada qual com dados específicos e de cada funcionário.

Assim, pretendo que ao abrir o form_Empregado o usuário tenha a opção de, por meio de botões, escolher qual informação complementar (form) do empregado ele gostaria de acessar.

O que eu preciso é só o seguinte:

1) como é que, ao clicar em um botão, se abre um outro form?
2) como é que se faz para que esse form (aberto ao clicar no botão) abra e mostre somente os dados do empregado que está ´corrente´ no form principal;
3) como é que se faz para que os dados do segundo form (aquele que foi aberto ao clicar no botão do form_principal) seja atualizado quando mudar o registro (empregado) do form_empregados.

[atte]


GOSTEI 0
Vinicius2k

Vinicius2k

11/10/2004

Ananias,

Vc, realmente precisa nos informar qual o Banco de Dados e a camada de acesso que vc está usando (BDE, ADO, IBX, dbExpress, etc...), se está usando TxxxTables ou TxxxQueries (com SQL), se está usando a Midas (Provider + ClientDataSet) para que a ajuda seja mais precisa...

Duas tabelas :
Funcionarios      Frequencia
------------      ----------
IDFuncionario     IDFuncionario 
Nome              Data

Um exemplo básico de mestre detalhe via MasterSource :
Vamos imaginar estas duas tabelas em um DataModule, cada uma delas tem um componente DataSource ligado à elas para exibição no grid, correto ?
Bem, a únicas coisas a fazer são:
1. preencher a propriedade MasterSource da tabela Frequencia (Detalhe) com o nome do TDataSource da tabela Funcionarios (Mestre)
2. preencher a propriedade MasterFields da tabela Frequencia (Detalhe) fazendo a ligação (através de um editor que é exibido) entre os campos chaves das duas tabelas, no caso ´IDFuncionario´.
Se por acaso vc não estiver usando um DataModule, no segundo Form, vá em File -> Use Unit, para que os componentes do form1 estejam disponível para acesso no form2, então, é só repetir os passos 1 e 2 acima...

Existem outras formas de se fazer isso, como via queries com parametros, por exemplo... ou filtrando a segunda tabela de acordo com um dado da primeira (é isso que o MasterSource + MasterFields faz de forma automática)...

Espero ter ajudado...
T+


GOSTEI 0
Vinicius2k

Vinicius2k

11/10/2004

Não havia visto sua msg...
[quote:685e1c3bbe=´Ananias Duarte´]O Bco é Access, conectado via ADO.[/quote:685e1c3bbe]
Bem, se vc não conseguir com o que foi exemplificado acima, vc está usando TADOTable, TADOQuerie ou TADODataSet ?

[quote:685e1c3bbe=´Ananias Duarte´]1) como é que, ao clicar em um botão, se abre um outro form?[/quote:685e1c3bbe]
No evento OnClick do botão programe :
form_frequencia.ShowModal;

Vc deverá receber uma mensagem de erro do compilador, e logo em seguida a sugestão de adicionar o segundo form na uses do primeiro form, responda ´yes´ e compile novamente.
Existem outras ´coisinhas´ envolvidas nisso, como criação e destruição dinamica dos forms para economizar memória, mas isso vc pode estudar mais tarde...

[quote:685e1c3bbe=´Ananias Duarte´]2) como é que se faz para que esse form (aberto ao clicar no botão) abra e mostre somente os dados do empregado que está ´corrente´ no form principal;[/quote:685e1c3bbe]
Com o relacionamente master/detail que eu exemplifiquei isso é automático.

[quote:685e1c3bbe=´Ananias Duarte´]3) como é que se faz para que os dados do segundo form (aquele que foi aberto ao clicar no botão do form_principal) seja atualizado quando mudar o registro (empregado) do form_empregados.[/quote:685e1c3bbe]
Idem à anterior.

T+


GOSTEI 0
Ananias Duarte

Ananias Duarte

11/10/2004

Valeu Vinicius2K, minerin de bicas...
Com tudo explicadin assi, eu consigo. aguarde só!
Vou fazer du jeitin qui vc mandô.
Brincadeira à parte, muito obrigado. valeu mesmo.
atte


GOSTEI 0
Vinicius2k

Vinicius2k

11/10/2004

:D

Pricisano nóis tamo às ordi, çô...

T+


GOSTEI 0
Ananias Duarte

Ananias Duarte

11/10/2004

Olá pessoal.
Segui as orientações do Vinícius2K e não deu outra: funcionou direitinho!
Valeu cumpanhero de minas...
Agora preciso resolver dois probleminhas na DBGrid:
a) como ordenar os registros por data; e
b) como formatar as colunas do DBGrid para que os valores tenham dois ou três casas decimais.
A DBGrid está vinculada a uma tabela e não a uma SQL.

Estou usando o D6.
obrigado pela ajuda
abraços


GOSTEI 0
Vinicius2k

Vinicius2k

11/10/2004

Ananias,

Por ser um assunto totalmente diferente, sugiro que abra um novo tópico para este assunto, mas antes disso, pesquise no fórum que vc pode encontrar a resposta antes mesmo de perguntar.

T+


GOSTEI 0
POSTAR