Fórum Sincronização de Formulários #253956

11/10/2004

0

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

Responder

Posts

11/10/2004

Samth

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:


Responder

Gostei + 0

13/10/2004

Ananias Duarte

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


Responder

Gostei + 0

14/10/2004

Ananias Duarte

Continuo na expectativa!
Valeu


Responder

Gostei + 0

14/10/2004

Rjun

Caro amigo

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


Responder

Gostei + 0

14/10/2004

Dopi

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.


Responder

Gostei + 0

14/10/2004

Ananias Duarte

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]


Responder

Gostei + 0

14/10/2004

Vinicius2k

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+


Responder

Gostei + 0

14/10/2004

Vinicius2k

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+


Responder

Gostei + 0

14/10/2004

Ananias Duarte

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


Responder

Gostei + 0

14/10/2004

Vinicius2k

:D

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

T+


Responder

Gostei + 0

19/10/2004

Ananias Duarte

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


Responder

Gostei + 0

19/10/2004

Vinicius2k

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+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar