Formulário Mestre Detalhes com DBExpress e Firebird

Uma forma mais fácil de fazer um formulário Mestre/Detalhes com DbExpress e Firebird

Depois de muito pesquisar na internet sobre formulários Mestre Detalhes no Delphi 7 utilizando o DBExpress cheguei a conclusão que é necessário fazer muitas configurações nos componentes sqlQuery, DataSetProvider e ClienteDataSet para que se possa conseguir um resultado satisfatório. Tentando achar uma solução mais fácil, descobri uma forma de fazer um esse tipo de formulário, que acredito eu, é mais rápida.

Saiba mais Curso Criando minha primeira aplicação em Delphi

Antes de continuarmos, devo esclarecer alguns aspectos importantes. Vou considerar que você já saiba usar o básico do Firebird, como criação de tabela e chaves primarias, não vou entrar em maiores detalhes e que também o conexão do banco de dados (SqlConnection) já esteja devidamente configurada. Para este exemplo serão consideradas as 2 tabelas, a Pedidos e a ItensPedidos, mostradas logo abaixo:

As duas tabelas que servirão de exemplo, são mostradas abaixo:

PEDIDOS
PK Codigo Integer
DataEmissao TimeStamp
DataEntrega TimeStamp
TotalPedido Numeric(12,2)
Tabela 1. Tabela Mestre - PEDIDOS
ITENSPEDIDOS
PK Item Integer
FK CodigoPedido Integer
Produto Varchar(30)
Qtde Numeric(12,2)
Tabela 2. Tabela Mestre - ITENSPEDIDOS
Nota: PK = Chave Primária; FK = Chave Estrangeira.

Preencha as tabelas com os seguintes dados:

Código DataEmissao DataEntrega TotalPedido
1 01/08/2007 15/08/2007 150,00
2 01/09/2007 30/09/2007 500,00
Tabela 3. Tabela Pedidos
Item CodigoPedido Produto Qtde
1 1 Arroz 5
2 1 Feijao 20
3 1 Carne 2
1 2 Macarrao 3
2 2 Batatas 6
Tabela 4. Tabela ItensPedidos

Primeiro configuraremos os componentes da tabela Mestre.

Pronto, já configuramos nossa tabela mestre. Agora vamos configurar a tabela detalhes.

Agora, vamos configurar o ClientDataSet da tabela detalhes.

Agora vamos fazer as coisas funcionarem, adicione dois DBGrids ao formulário, um na parte de cima do Form e outro na parte de baixo. No dbGrid de cima altere a propriedade DataSource para dsMestre. No dbGrid de baixo coloque a propriedade DataSource como dsDetalhes.

Pronto, seu formulário Mestre Detalhes está configurado. Agora de você quiser que as alterações realizadas nele sejam gravadas é necessário observar o seguinte. O componente DBGrid de cima (da tabela Mestre) irá gravar os dados normalmente, basta executar o comando cdsMestre.ApplyUpdates(0). Agora o dbGrid de baixo não irá gravar os dados. Isso acontece porque o MasterSource do cdsDetalhes não deixa os dados serem gravados. Para resolver isso basta, antes de gravar, retirar o componente dsMestre da propriedade MasterSource do cdsDetalhes, executar o comando cdsDetalhes.ApplyUpdates(0); e depois voltar o dsMestre para o propriedade MasterSource novamente. Veja como o código ira ficar:

cdsDetalhes.MasterSource := nil; cdsDetalhes.ApplyUpdates(0); cdsDetalhes.MasterSource := dsMestre;

Confira também

Artigos relacionados