Pessoal, neste artigo vou demonstrar como criar um componente derivado do TComboBox que carregue valores de uma tabela do Interbase via SQL.
Inicialmente com o Delphi aberto vamos acessar no Menu Component a opção New Component e na tela que for exibida preencher com os seguintes valores.:
Ancestor type.: TComboBox
Class Name.: TSQLComboBox
Palette Page.: Standart
Unit file name.:
Indicar o nome da unit com o caminho onde será salvo o arquivo do código fonte
do componente.
Cabe lembrar que estes valores
poderão ser alterados conforme o gosto de cada um, o único que não poderá ser
alterado é o Ancestor type, pois é dele que nosso componente irá herdar as suas
propriedades.
Feito isso, o delphi nos irá gerar a
estrutura básica do arquivo. Altere o restante conforme código descrito abaixo.:
unit
SQLComboBox;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
StdCtrls, DB, IBDatabase, IBQuery;
type
TSQLComboBox = class(TComboBox)
private
{ Private declarations }
FConnection : TIBDatabase;
FTransaction: TIBTransaction;
FSQLText : string;
FFieldName : string;
qryDados : TIBQuery;
{ Query
interna para efetuar a consulta sql }
procedure SetIBXConnection(Value :
TIBDatabase);
{ procedure
para Setar a conexão ao banco de dados }
procedure
SetFTransaction(const Value: TIBTransaction);
{ procedure para Setar a transação da query }
protected
{ Protected declarations }
public
{ Public declarations }
procedure LoadItems;
published
{ Published declarations }
property Connection :
TIBDatabase read FConnection write SetIBXConnection;
{ propriedade onde será selecionada o componente de conexão ao BD }
property
Transaction : TIBTransaction read FTransaction write
SetFTransaction;
{ propriedade onde será selecionado o componente transaction }
property
SQLText : string read FSQLText write FSQLText;
{ propriedade onde definimos a intrução sql de consulta }
property
FieldName : string read FFieldName write FFieldName;
{ propriedade para informar o nome do campo da tabela cujos valores
serão exibidos na listagem do nosso componente }
end;
procedure
Register;
implementation
{ procedure para registrar o componente no delphi }
procedure
Register;
begin
RegisterComponents('Standard',
[TSQLComboBox]);
end;
{ Setar o componente de conexão ao banco de dados }
procedure
TSQLComboBox.SetIBXConnection(Value: TIBDatabase);
begin
if FConnection <> Value then
FConnection := Value;
if Value <> nil then
Value.FreeNotification(self);
end;
{ Setar o componente transaction para a
query de consulta }
procedure
TSQLComboBox.SetFTransaction(const Value: TIBTransaction);
begin
FTransaction := Value;
if Value <> nil then
Value.FreeNotification(Self);
end;
{ procedure responsavel em carregar os valores da
tabela }
procedure
TSQLComboBox.LoadItems;
begin
Items.Clear;
{
limpar os itens já existentes }
qryDados
:= TIBQuery.Create(Self);
{
criar em run-time a query para consulta }
qryDados.Database
:= FConnection;
qryDados.Transaction := FTransaction;
qryDados.SQL.Text := FSQLText;
qryDados.Open;
{ executar a
consulta }
with
qryDados do
begin
DisableControls;
First;
{ posicionar no
1º registro da tabela
e caso a mesma não seja vazia ou no final... }
while not Eof do
begin
Items.Add(qryDados.FieldByName(FFieldName).asstring);
{
incluir o valor na lista de itens }
Next;
{ próximo
registro }
end;
EnableControls;
end;
qryDados.Close;
{ fechar a query
}
qryDados.Free;
{ destruir a
query da memória }
end;
end.
Não podemos nos esquecer de incluir
na cláusula USES as seguintes units.: DB, IBDatabase e IBQuery.
O nosso componente estará pronto para
ser compilado e instalado no Delphi.
Para usar, basta setar as
propriedades Connection e Transaction. E informar a condição SQL
na propriedade SQLText e o nome do campo a ser usado na propriedade
FieldName.
Para carregar os registros, na lista
do ComboBox, por exemplo, bastará no evento OnShow do Form colocar o seguinte.:
procedure
TForm1.OnShow(Sender: TObject);
begin
SQLComboBox1.LoadItems;
end;
Vale lembrar que o componente tem as
mesmas funcionalidades de um ComboBox comum, a única diferença esta na opção de
poder adquirir os itens de uma tabela.
Clique
aqui para fazer download dos fontes.
Observação: John Klaus Kanenberg
kanenberg@yahoo.com.br
|