Fórum Sincronização de Formulários #253956
11/10/2004
0
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
Curtir tópico
+ 0Posts
11/10/2004
Samth
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
13/10/2004
Ananias Duarte
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
14/10/2004
Ananias Duarte
Valeu
Gostei + 0
14/10/2004
Rjun
Voce não disse qual banco e qual tecnologia de acesso está utilizando, mas verifique as propriedades Datasource e MasterSource.
Gostei + 0
14/10/2004
Dopi
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
14/10/2004
Ananias Duarte
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
14/10/2004
Vinicius2k
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
14/10/2004
Vinicius2k
[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
14/10/2004
Ananias Duarte
Com tudo explicadin assi, eu consigo. aguarde só!
Vou fazer du jeitin qui vc mandô.
Brincadeira à parte, muito obrigado. valeu mesmo.
atte
Gostei + 0
14/10/2004
Vinicius2k
Pricisano nóis tamo às ordi, çô...
T+
Gostei + 0
19/10/2004
Ananias Duarte
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
19/10/2004
Vinicius2k
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
Clique aqui para fazer login e interagir na Comunidade :)