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
- Curso de ADO.NET e BDP - Parte I
- Curso de ADO.NET e BDP - Parte II
- Curso de ADO.NET e BDP - Parte III
- Curso de ADO.NET e BDP - Parte IV
- Curso de ADO.NET e BDP - Parte V
- Curso de ADO.NET e BDP - Parte VI
- Curso de ADO.NET e BDP - Parte VII
- Curso de ADO.NET e BDP - Parte VIII
- Curso de ADO.NET e BDP - Parte IX
- Curso de ADO.NET e BDP - Parte X
- Curso de ADO.NET e BDP - Parte XI
- Curso de ADO.NET e BDP - Parte XII
- Curso de ADO.NET e BDP - Parte XIII
- Curso de ADO.NET e BDP - Parte XIV
- Curso de ADO.NET e BDP - Parte XVI
- Curso de ADO.NET e BDP - Parte XVII
- Curso de ADO.NET e BDP - Parte XVIII
- Curso de ADO.NET e BDP - Parte XIX
- Curso de ADO.NET e BDP - Final