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:

Archive08_1.gif 

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:

Archive08_2.gif 

Figura 2.

Adicione todos os TField no ClientDataSet, e observe que teremos um DataSetField:

Archive08_3.gif 

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.

Archive08_4.gif 

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.

Archive08_5.gif 

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