Você está na página 1de 4

DBLoockUpComboBox em um DBGrid

Por Marcos Soares

Um efeito interessante e de muito auxlio ao usurio o uso de ComboBoxes em um Grid


de dados. A tcnica mostrada a seguir simples, direta, de fcil implementao e
demanda quase nenhuma digitao de cdigo.

Para nosso exemplo utilizaremos o banco de dados exemplo employee do


InterBase/FireBird.

Inicie uma nova aplicao e em File/New insira um DataModule. Salve o projeto


renomeando o DataModule para uDtmEmployee, a unit para ExLookUp e o projeto para
LookUp.

No DataModule insira e renomeie os seguintes componentes: um SQLConnection


(SQLConnection), dois SQLQuery (QryEmployee, QryDepartment), dois DataSetProvider
(DspEmployee, DspDepartment), dois ClientDataSet (CdsEmployee, CdsDepartment) e dois
DataSource (DtsEmployee ,DtsDepartment). Seu Datamodule ficar na forma da Fig 1.

Fig 1 Datamodule com os componentes Data Access e DbExpress

Ainda no DataModule conecte os componentes da seguinte forma: propriedade


SQLConnection dos SQLQuery apontando para SQLConnection, propriedade DataSet dos
DataSetProvider com os respectivos SQLQuery, propriedade ProviderName dos
ClientDataSet com os respectivos DataSetProvider e finalmente a propriedade DataSet
dos DataSource com os respectivos ClientDataSet.

No componente SQLConnection crie uma conexo com o InterBase de nome Employee.

Em QryEmployee, propriedade SQL, digite: select * from employee a, department b where


a.dept_no = b.dept_no. Essa instruo SQL retornar todos os funcionrios e os seus
respectivos departamentos.

D dois cliques em QryEmployee. No editor de campos clique com o boto direito e acione
add all fields, marque e apague teclando Delete os campos que no interessarem de
forma que o editor fique na forma da Fig 2.
Fig 2 Editor de campos

Agora clique duas vezes em CdsEmployee, e no editor de campos com o boto direito
acione tambm add all fields, o editor do ClientDataSet deve ter a mesma aparncia da
Fig 2.

Ainda sobre o editor de campos d um clique de direita, acione a opo New Field e na
janela que se abre preencha os campos como na Fig 3.

Fig 3 Configurando um campo lookup do ClientDataSet

Perceba que o novo campo do tipo LookUp e definimos CdsDepartment como o DataSet
de LookUp Definition. Nada mais lgico j que este o ClientDataSet que retornar todos
os departamentos cadastrados.

Feche a janela e clique no campo Dept_No. No evento OnChange digite o seguinte:

CdsEmployee['Department']:=CdsDepartment.FieldByName ('Department').AsString;

Isso far com que toda vez que o usurio alterar o cdigo do departamento, sua descrio
ser alterada no ClientDataSet sendo mostrado no DbGrid.
Em QryDepartment, propriedade SQL, digite: select * from department. Acione o editor de
campos com um clique duplo e adicione todos os campos. Faa o mesmo com o
CdsDepartment. Essa operao similar a feita anteriormente com o CdsEmployee.

O nosso DataModule est completo, agora devemos construir a interface com o usurio.
Alterne para Form1 e insira um DbGrid. Na unit ExLookUp digite na seo implementation:
uses uDtmEmployee.

Aponte a propriedade DataSource do DbGrid para DtsEmployee. D dois cliques no DbGrid


e o editor de campos surgir, com o boto direito acione a opo add all fields, apague os
campos que no interessam de forma que o editor fique como a Fig 4.

Fig 4 Editor de campos do DbGrid

Note que o terceiro campo o campo que definimos anteriormente e que ser o mostrado
no DbGrid.

No evento OnShow do form digite:

DtmEmployee.CdsEmployee.Open;
DtmEmployee.CdsDepartment.Open;

Pronto! Agora basta executar o programa.

At a prxima.

Download dos Fontes


Marcos Soares Analista de Sistemas, scio da InterSystem Consultoria e Informtica
Ltda e trabalha com o Delphi desde suas primeiras verses. Pode ser contactado em
marcos@intersystem.eti.br