Curso de ADO.NET e BDP - Parte XV

Acesso a dados no Delphi 8 for .NET

 

Parte XV – Expressions

Dando continuidade ao nosso curso sobre acesso a dados no Delphi for .NET com ADO.NET e BDP, veremos neste artigo como utilizar o recurso de Expressions do ADO.NET.

Um Expression permite que você crie um campo para um DataTable que pode exibir um resultado de operações em outros campos do DataTable, como somas, contagens, cálculos, médias etc. Esse recurso é semelhante aos Aggregates do ClientDataSet da VCL.

 

Nota: A partir desta parte do curso utilizaremos o Delphi 2005, no entanto sinta-se a vontade para usar o Delphi 8, caso queira.

Configurando os componentes do BDP e ADO.NET

Inicie uma nova aplicação do tipo Windows Forms Application. Expanda a conexão Employee no Data Explorer e arraste as tabelas Department e Employee para o designer. Isso cria um BdpConnection e dois BdpDataAdapters. Coloque um DataSet e aponte a propriedade DataSet do BdpDataAdapter para esse componente e configure seu Active para True. Faça o mesmo para o segundo BdpDataAdapter.

Use a propriedade Relations do DataSet para configurar um relação entre os dois DataTables, conforme mostrado a seguir:

 

 

Já discutimos Relations em partes anteriores deste curso, de forma que não entrarei em detalhes aqui.

Configurando a interface de usuário

Coloque no formulário u  DataGrid e configure-o para apontar para o DataTable1 do DataSet1. Coloque no formulário seis TextBoxes, cinco Labels e um Button.

Configure os componentes como mostrado a seguir:

 

 

No evento Load do formulário escreva o seguinte:

 

procedure TWinForm.TWinForm_Load(sender: System.Object; e: System.EventArgs);

var

 dgcol: DataGridTextBoxColumn;

begin

  { adiciona colunas com Expressions }

  DataTable1.Columns.Add('Count',

    TypeOf(Integer),'COUNT(DEPT_NO)');

  DataTable1.Columns.Add('MinSalary',

    TypeOf(Double),'MIN(SALARY)');

  DataTable1.Columns.Add('MaxSalary',

    TypeOf(Double),'MAX(SALARY)');

  DataTable1.Columns.Add('AvgSalary',

    TypeOf(Double),'AVG(SALARY)');

  DataTable1.Columns.Add('Calculado',

    TypeOf(string),'FIRST_NAME + '' '' + LAST_NAME');

  DataTable1.Columns.Add('Lookup',

    TypeOf(string),'Parent(EmployeeDeparment).DEPARTMENT');

  { configura DataBindings } 

  tbCount.DataBindings.Add(

    Binding.Create('Text',DataTable1,'Count'));

  tbMinSalary.DataBindings.Add(

    Binding.Create('Text',DataTable1,'MinSalary'));

  tbMaxSalary.DataBindings.Add(

    Binding.Create('Text',DataTable1,'MaxSalary'));

  tbAvgSalary.DataBindings.Add(

    Binding.Create('Text',DataTable1,'AvgSalary')); 

  // adiciona colunas

  dgcol := DataGridTextBoxColumn.Create;

  dgcol.MappingName := 'Calculado';

  dgcol.HeaderText := 'Calculado (First_Name+Last_Name)';

  dgcol.Width := 150;

  DataGridTableStyle1.GridColumnStyles.Add(dgcol);  

  dgcol := DataGridTextBoxColumn.Create;

  dgcol.MappingName := 'Lookup';

  dgcol.HeaderText := 'Lookup (Department)';

  dgcol.Width := 200;

  DataGridTableStyle1.GridColumnStyles.Add(dgcol);

 end;

 

Aqui usamos o método Add da propriedade Columns do DataTable para adicionar uma nova coluna. O último parâmetro indica a expressão que se encarregará de obter o valor para o campo. Uma expressão pode ser algo do tipo: COUNT(DEPT_NO), AVG(SALARY), MAX(SALARY) etc.

No exemplo contamos quantos registros existem na tabela, a média, menor e maior salário dos funcionários listados. A seguir usamos o recurso de DataBindings para exibir esses valores em TextBoxes.  Também usamos o recurso de Expressions para simular um campo calculado (unindo em um único campo o Fist_name e Last_Name  do empregado) e também um campo Lookup. Nesse último caso, obtemos a descrição do departamento do funcionário através da relação configurada (simulando um lookup). Isso e, como temos o DEPT_NO no DataTable atual, “puxamos” a descrição do departamento a partir do outro DataTable, usando a relação configurada. Exatamente como fazíamos campos Lookup na VCL.

A figura abaixo mostra a aplicação em execução, exibindo os valores para os campos com Expressions:

 

 

Observe que no último TextBox podemos digitar uma expressão customizada, em tempo de execução. Isso é feito no evento Click do botão:

 

procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);

begin

  DataTable1.Columns.Add('Custom',

    TypeOf(string),tbCustom.Text);

  { configura DataBindings }

  tbCustomResult.DataBindings.Add(

    Binding.Create('Text',DataTable1,'Custom'));

end;

Download

Você pode fazer download de todos os exemplos deste curso a partir do endereço http://cc.borland.com/cc/ccweb.exe/author?authorid=222668

Leia todos artigos da série