Curso de dbExpress e DataSnap
Parte VIII – DataSetFields
Este exemplo mostra como utilizar DataSetFields em ClientDataSets. DataSetField é um campo TField especial que pode representar o conteúdo de outro DataSet.
Configure uma conexão dbExpress para o banco EMPLOYEE do Interbase. Coloque um SQLConnection apontando para essa conexão. Coloque também duas SQLQuery, um DataSetProvider, um ClientDataSet, dois DataSources, um DBGrid, um Button e um DBNavigator.
Relacione os componentes conforme mostrado a seguir:
object SQLConnection1: TSQLConnection
end
object SQLQuery1: TSQLQuery
SQLConnection = SQLConnection1
End
object SQLQuery2: TSQLQuery
SQLConnection = SQLConnection1
End
object DataSource1: TDataSource
DataSet = SQLQuery1
End
object DataSetProvider1: TDataSetProvider
DataSet = SQLQuery1
End
object DBGrid1: TDBGrid
DataSource = DataSource2
End
object DBNavigator1: TDBNavigator
DataSource = DataSource2
End
object ClientDataSet1: TClientDataSet
ProviderName = 'DataSetProvider1'
End
object DataSource2: TDataSource
DataSet = ClientDataSet1
end
Seu formulário deve estar semelhante ao mostrado a seguir:
Figura 1.
Configura a instrução SQL da primeira Query para:
select * from CUSTOMER
E da segunda para:
select * from SALES
where CUST_NO=:CUST_NO
Configure o parâmetro (propriedade Params) da segunda Query como mostrado a seguir:
Figura 2.
Adicione todos os TField no ClientDataSet, e observe que teremos um DataSetField:
Figura 3.
Esse campo representa o DataSet detalhe. Com isso temos no mesmo DataSet acesso a tabela principal (master) e tabela detalhe (detail).
No evento OnCreate do form digite:
procedure TFrmMain.FormCreate(Sender: TObject);
begin
ClientDataSet1.Open;
end;
No evento OnClick do botão digite:
procedure TFrmMain.BitBtn1Click(Sender: TObject);
begin
ClientDataSet1.ApplyUpdates(0);
end;
A figura a seguir mostra a aplicação em execução.
Figura 4.
Navegue até a última coluna do DBGrid e observe que ela lista o DataSetField. Clique em [...] e note que uma outra DBGrid será aberta automaticamente, mostrando dados da tabela detalhe, relacionados com o registro selecionado no DBGrid principal.
Figura 5.
Note que usamos para isso somente um único ClientDataSet. Além disso, alterações no DataSetField serão refletidos no DataSet principal (por isso só precisamos de um ApplyUpdates, que aplicará alterações em ambas as tabelas no banco).
Download
dbExpress, DataSnap e ClientDataSet: Técnicas Avançadas
Para mais informações sobre acesso a dados no Delphi e técnicas avançadas, sugiro a leitura do meu livro, “Delphi: Programação para Banco de Dados e Web”, como apoio para o aprendizado das tecnologias. Na obra mostro várias técnicas introdutórios e avançadas de desenvolvimento com ClientDataSet, dbExpress e DataSnap (multicamadas, incluindo SOAP e COM+). Para mais informações, consulte o link http://www.clubedelphi.net/guinther
Leia todos artigos da série
- Curso de dbExpress e DataSnap
- Curso de dbExpress e DataSnap - Parte II
- Curso de dbExpress e DataSnap - Parte III
- Curso de dbExpress e DataSnap - Parte IV
- Curso de dbExpress e DataSnap - Parte V
- Curso de dbExpress e DataSnap - Parte VI
- Curso de dbExpress e DataSnap - Parte VII
- Curso de dbExpress e DataSnap - Parte VIII
- Curso de dbExpress e DataSnap - Parte IX
- Curso de dbExpress e DataSnap - Parte X
- Curso de dbExpress e DataSnap - Parte XI
- Curso de dbExpress e DataSnap - Parte XII
- Curso de dbExpress e DataSnap - Parte XIII
- Curso de dbExpress e DataSnap - Parte XIV
- Curso de dbExpress e DataSnap - Parte XV
- Curso de dbExpress e DataSnap - Parte XVI
- Curso de dbExpress e DataSnap - Parte XVII
- Curso de dbExpress e DataSnap - Parte XVIII
- Curso de dbExpress e DataSnap - Parte XIX
- Curso de dbExpress e DataSnap - Parte XX
- Curso de dbExpress e DataSnap - Parte XXI
- Curso de dbExpress e DataSnap - Parte XXII
- Curso de dbExpress e DataSnap - Parte XXIII
- Curso de dbExpress e DataSnap - Parte XXIV
- Curso de dbExpress e DataSnap - Parte XXV
- Curso de dbExpress e DataSnap - Parte XXVI
- Curso de dbExpress e DataSnap - Parte XXVII
- Curso de dbExpress e DataSnap - Parte XXVIII
- Curso de dbExpress e DataSnap - Parte XXIX
- Curso de dbExpress e DataSnap - Parte XXX