Curso de ADO.NET e BDP - Parte IX

Acesso a dados no Delphi 8 for .NET

 

Parte IX– DataRelations

Neste artigo veremos como trabalhar com relacionamentos, usando a propriedade Relations do componente DataSet. Como já comentamos em artigos anteriores, o DataSet permite que você armazene em uma mesma estrutura informações retornadas de múltiplas tabelas do BD, em objetos DataTable. A seguir, você pode especificar como esses dados se relacionam, configurando inclusive regras de integridade, que serão verificadas na aplicação cliente.

Configurando os BdpDataAdapters

Inicie uma nova aplicação do tipo Windows Forms Application. Expanda a conexão Employee no Data Explorer e arraste a tabela Department para o designer. Isso cria um BdpConnection e um BdpDataAdapter. Arraste também a tabela Employee, para criar um segundo BdpDataAdapter.

Veja como ficou a instrução SQL do primeiro BdpDataAdapter, que recupera informações da tabela DEPARMENT (para ver a instrução configurada, clique de direita sobre o componente e selecione Configure Data Adapter, ou abra o editor da propriedade SelectCommand.CommandText):

 

SELECT

  DEPT_NO,

  DEPARTMENT,

  HEAD_DEPT,

  MNGR_NO,

  BUDGET,

  LOCATION,

  PHONE_NO

  FROM

  DEPARTMENT

 

E aqui está a instrução do BdpDataAdapter2, que recupera informações sobre a tabela EMPLOYEE:

 

SELECT

  EMP_NO,

  FIRST_NAME,

  LAST_NAME,

  PHONE_EXT,

  HIRE_DATE,

  DEPT_NO,

  JOB_CODE,

  JOB_GRADE,

  JOB_COUNTRY,

  SALARY,

  FULL_NAME

FROM

  EMPLOYEE

Gerando o DataSet

Clique de direita sobre o BdpDataAdapter1 e selecione a opção Configure Data Adapter. Na aba DataSet selecione a opção New DataSet:

 

 

Clique em Ok. Isso deverá gerar um DataSet no formulário:

 

 

Clique de direita sobre o BdpDataAdapter2 e selecione a opção Configure Data Adapter. Na aba DataSet selecione a opção Existing DataSet:

 

 

Clique em Ok. Observe que geramos ambas as consultas em um mesmo DataSet. Defina como True a propriedade Active de ambos os BdpDataAdapters. Observe ainda que a propriedade DataSet dos dois BdpDataAdapters aponta para DataSet1.

Abra a propriedade Tables do DataSet e você deverá ver os dois DataTables gerados:

 

   

Criando o relacionamento

Abra o editor da propriedade Relations do DataSet e no editor clique no botão Add:

 

 

Na janela que aparece dê um nome para o relacionamento. Em Parent Table defina qual a tabela mestre e em Child table escolha a tabela detalhe. Em Columns relacione os campos DEPT_NO das duas tabelas, conforme mostrado a seguir:

 

 

Com isso, configuramos uma relação “mestre-detalhe” entre os dois DataTables, semelhante ao que estávamos acostumados a fazer usando DataSets da VCL (lembra do MasterSource e MasterField?).

A grande novidade é que podemos configurar regras de integridade para os dados do DataSet, semelhante ao que se consegue em bancos relacionais usando Foreign Keys. A diferença, claro, é que tudo será feito na aplicação cliente.

Por exemplo, configure o Update rule para Cascade. Com isso, quando o campo DEPT_NO da tabela DEPARTMENT for atualizado para 1000, por exemplo, todos os registros relacionados na tabela EMPLOYEE terão o valor do campo DEPT_NO atualizados para 1000, garantindo a integridade dos dados.

Delete rule indica o que deve ser feito quando um registro na tabela mestre for excluído. Cacade indica que todos os registros relacionados serão apagados. Clique no botão Help para obter mais informações sobre cada um dos tipos disponíveis nessas opções.

Configurando o DataGrid

Coloque no formulário um DataGrid. Configure sua propriedade DataSource para DataSet1. Observe que em DataMember são listados todos os DataTables disponíveis:

 

 

Escolha DEPARTMENT e rode a aplicação. Observe que o DataGrid exibe um sinal “+” para que você possa recuperar os registros do DataTable relacionado:

 

 

Por exemplo, selecione o DEPTARMENT 100, clique em “+” e a seguir no link que aparece mostrando o nome do relacionamento. Com isso vamos obter todos empregados (EMPLOYEE) do departamento selecionado:

 

 

Você também pode querer exibir os dados da tabela mestre e da tabela detalhe ao mesmo tempo na tela. Para isso, coloque um segundo DataGrid e aponte sua propriedade DataSource para DataSet1. Agora o segredo não é apontar o DataMember para o DataTable EMPLOYEE, mas sim para o próprio relacionamento:

 

 

Execute a aplicação e veja o resultado:

 

 

Na próxima parte do curso veremos como o DataSet pode ser representado em formato XML.Até lá!

Download

Você pode fazer download de todos os exemplos deste curso de acesso a dados no Delphi 8 com ADO.NET e BDP a partir do endereço http://cc.borland.com/cc/ccweb.exe/author?authorid=222668

Leia todos artigos da série