30/08/2004

Melhor forma de trabalhar com tabelas relacionadas...

Saudações,
estou migrando um sistema criado no Access para o Delphi utilizando o MySql 4.0 e a paleta Zeos. Este sistema possui duas tabelas principais (PM´s e Beneficiários) que estão relacionadas pela matrícula do PM. A primeira tabela contém os dados do PM e a segunda contém a matrícula do PM (chave) e o nome dos beneficiários (caso este possua). Tenho algumas dúvidas quanto a este caso:

1 - Ao se fazer a navegação, uma grid ligada a tabela de beneficiários mostrava os registros ligados àquele PM, podendo até mesmo fazer a inclusão ou alteração na própria grid. Como faço para que o mesmo tipo de navegação seja feito e gostaria de saber se é possível fazer inclusões e alterações na DBgrid;

2 - Não estou usando DBNavigator. Estou utlizando botões comuns para fazer a navegação (First, Prior, Next, Last). Gostaria de saber como faço para se pular de 10 em 10 registros;
Agradeço desde já todo tipo de ajuda. Muito obrigado.


Elias Jr

Respostas

30/08/2004

Rikvitor

[color=red:7a77b0bb19]Olha amigo, eu não entendi muito bem a sua primeira pergunta...
Quanto ao se pular de 10 em 10 registros, tenho uma solução que, embora possa existir outra mais simplificada, pode facilmente ser implementada. aí vai:


Procedure NextN;
Var I : integer;
Const N = 10; // Essa const define quantos registros você quer pular
Begin
DataSourcer1.disablecontrols;// ou algo parecido, não me lembro bem... isso desliga temporariamente todos os componentes visuais da tabela.
for i := 1 to n do
table1.next;

DataSourcer1.enablecontrols;// O contrário, reconecta os componentes a tabela.
End;

o mesmo pode ser feito para retroceder...


Um abraço, e bom trabalho.....


Agradeço se puder mandar qualquer material
didático de qualquer ramo da informática para eu ler.
. . . . . . e-mail rikvitor@brbank.com.br
------------------------------------------[/color:7a77b0bb19] :idea:


Responder Citar

30/08/2004

Rikvitor

[color=red:8964d0fc39]Olha amigo, eu não entendi muito bem a sua primeira pergunta...
Quanto ao se pular de 10 em 10 registros, tenho uma solução que, embora possa existir outra mais simplificada, pode facilmente ser implementada. aí vai:


Procedure NextN;
Var I : integer;
Const N = 10; // Essa const define quantos registros você quer pular
Begin
DataSourcer1.disablecontrols;// ou algo parecido, não me lembro bem... isso desliga temporariamente todos os componentes visuais da tabela.
for i := 1 to n do
table1.next;

DataSourcer1.enablecontrols;// O contrário, reconecta os componentes a tabela.
End;

o mesmo pode ser feito para retroceder...


Um abraço, e bom trabalho.....


Agradeço se puder mandar qualquer material
didático de qualquer ramo da informática para eu ler.
. . . . . . e-mail rikvitor@brbank.com.br
------------------------------------------[/color:8964d0fc39] :idea:


Responder Citar

30/08/2004

Rikvitor

[color=red:4ab9841275]Olha amigo, eu não entendi muito bem a sua primeira pergunta...
Quanto ao se pular de 10 em 10 registros, tenho uma solução que, embora possa existir outra mais simplificada, pode facilmente ser implementada. aí vai:


Procedure NextN;
Var I : integer;
Const N = 10; // Essa const define quantos registros você quer pular
Begin
DataSourcer1.disablecontrols;// ou algo parecido, não me lembro bem... isso desliga temporariamente todos os componentes visuais da tabela.
for i := 1 to n do
table1.next;

DataSourcer1.enablecontrols;// O contrário, reconecta os componentes a tabela.
End;

o mesmo pode ser feito para retroceder...


Um abraço, e bom trabalho.....


Agradeço se puder mandar qualquer material
didático de qualquer ramo da informática para eu ler.
. . . . . . e-mail rikvitor@brbank.com.br
------------------------------------------[/color:4ab9841275] :idea:


Responder Citar

31/08/2004

Elias Jr

Saudações amigo,
agradeço pela dica. Irei testá-la e logo informo se funcionou. Quanto à minha primeira pergunta, eu quero saber como faço para que a grid receba o nome dos parentes do PM que estão numa tabela à parte, relacionada com tabela principal apenas pela matrícula do PM. Tipo assim:

Elias Júnior, matrícula 001. Caso eu tenha parentes cadastrados na outra tabela, a grid exibirá os nomes. Caso negativo, ao navegar a grid ficará em branco.

Gostaria de saber também se é possível inserir e alterar dados a partir da dbgrid. Valeu pela ajuda...


Responder Citar

31/08/2004

Xtreme

Gostaria de saber também se é possível inserir e alterar dados a partir da dbgrid. Valeu pela ajuda...


Sim é possivel, é so deixar a propriedade readonly como false.


Responder Citar

31/08/2004

Elias Jr

[quote:d006dffd45]Gostaria de saber também se é possível inserir e alterar dados a partir da dbgrid. Valeu pela ajuda...


Sim é possivel, é so deixar a propriedade readonly como false.[/quote:d006dffd45]

Saudações amigos,
agradeço pelas dicas, testei e todas duas funcionam. Só preciso saber agora como faço para listar na grid apenas os dados relacionados. Minhas tabelas são essas: PM e Beneficiários. A primeira contém os dados do PM e a segunda contém os beneficiários dele (filhos, conjuges, parentes)...as duas estão relacionadas pela matrícula do PM. Queria que ao fazer a navegação a grid só exibisse os beneficiários caso este PM possua, senão a grid fica em branco. Agradeço qualquer ajuda. Muito obrigado.


Responder Citar

31/08/2004

Xtreme

O que vc esta utilizando uma Table, Query?


Responder Citar

31/08/2004

Elias Jr

O que vc esta utilizando uma Table, Query?


Saudações amigo,
estou utilizando o banco MySql 4.0.20 e a paleta Zeos no Delphi 5 Pro. Coloquei os componentes num Data Module (Database, DBTransact, Query e UpdateSql), uma para a tabela de PM e outra pra tabela de beneficiários. No form de cadastro tenho todos os campos setados para um datasource (com exceção da DBGrid) que por sua vez está setado para a query de PM. O que eu quero é que ao se navegar o dbgrid exiba os beneficiários do PM caso este contenha. Senão a grid fica em branco. Muito obrigado.


Responder Citar

27/10/2004

Xtreme

Bom uma das maneiras de vc controlar isso de forma facil nesta consulta seria colocando sua pesquisa no evento DataChange do DataSource que esta ligado a Tabela PM.


Responder Citar

27/10/2004

Osocram

[quote]O que vc esta utilizando uma Table, Query?


Saudações amigo,
estou utilizando o banco MySql 4.0.20 e a paleta Zeos no Delphi 5 Pro. Coloquei os componentes num Data Module (Database, DBTransact, Query e UpdateSql), uma para a tabela de PM e outra pra tabela de beneficiários. No form de cadastro tenho todos os campos setados para um datasource (com exceção da DBGrid) que por sua vez está setado para a query de PM. O que eu quero é que ao se navegar o dbgrid exiba os beneficiários do PM caso este contenha. Senão a grid fica em branco. Muito obrigado.[/quote:11111f3835]

Eu nunca usei esse tal de Zeos....

mas vc pod tentar isso aqui..

na QryPm vc faz isso
select *
from PM
e liga um DataSource (DSPm)

ok... agora faz a filha dele q eh o QryBeneficiario
aqui vc colocar um sql c parametros
select *
from Beneficiario
where matricula = :matricula
e liga a propriedade DataSource da QryBeneficiario c o DSPm

unico cuidado q deve ter eh q o parametro ´ :matricula ´ deve ser o mesmo nome do codigo da QryPm...

Dae sempre q vc selecionar um Pm.. a filha vai receber automaticamente este parametro.. e vc so vera as filhas q pertencem aquele codigo.


Responder Citar