Array
(
)

Melhor forma de trabalhar com tabelas relacionadas...

Elias Jr
   - 30 ago 2004

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.


Rikvitor
   - 30 ago 2004

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
------------------------------------------ :idea:


Rikvitor
   - 30 ago 2004

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
------------------------------------------ :idea:


Rikvitor
   - 30 ago 2004

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
------------------------------------------ :idea:


Elias Jr
   - 31 ago 2004

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...


Xtreme
   - 31 ago 2004


Citação:
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.


Elias Jr
   - 31 ago 2004


Citação:

Citação:
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.


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.


Xtreme
   - 31 ago 2004

O que vc esta utilizando uma Table, Query?


Elias Jr
   - 31 ago 2004


Citação:
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.


Xtreme
   - 27 out 2004

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.


Osocram
   - 27 out 2004


Citação:

Citação:
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.


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.