Olá amigos leitores!
Esse é meu primeiro artigo, entãoo vamos começar bem simples, porém eficaz.
Nesse artigo vou mostrar como carregar dinamicamente as informações
do Banco de Dados em componentes não data-aware (ComboBox e ListBox) e em seguida obter o valor da Chave
Primária do item selecionado.
As ferramentas utilizadas para esse artigo foram Delphi 7, Firebird 1.5 e IBExpert. Lembrando que para o exemplo do artigo funcionar de
primeira sem necessidade de alterações, utilize o mesmo padrão de caminho usado no artigo, criando a pasta "Objeto" em c:\ e a pasta "Dados"
dentro da pasta objeto.
O Objetivo principal desse artigo é mostrar a utilização do object nos combobox e listbox.
Esse recurso possibilita que informações como id e descrição do banco de dados sejam trabalhados nesses componentes.
Dessa forma quando precisarmos fazer uma gravação dos itens que estão no combo/list ja teremos além do texto o id e isso facilita muito o
trabalho quando precisamos referenciar determinado registro nesses componentes.
Em primeiro lugar vamos criar nossa tabela:
CREATE TABLE INFO (
IDINFO INTEGER NOT NULL,
NOME VARCHAR(50),
EMAIL VARCHAR(50)
);
Depois de criar a tabela lembre-se de setar o campo "IDINFO" como chave primária e também criar os generators e triggers necessários.
Agora vamos inserir as informações na nossa tabela (Observe que os ID estão fora de ordem justamente para que nosso
aplicativo se proponha a realizar o objetivo).
INSERT INTO INFO (IDINFO, NOME, EMAIL) VALUES (1, 'JOÃO MARCOS SAKALAUSKA', 'JSAKALAUSKA@GMAIL.COM');
INSERT INTO INFO (IDINFO, NOME, EMAIL) VALUES (27, 'ENEAS TOLEDO ALVES', 'ENEASTALVES@GMAIL.COM');
INSERT INTO INFO (IDINFO, NOME, EMAIL) VALUES (64, 'APARECIDO NEVES', 'ANEVES@BOL.COM.BR');
INSERT INTO INFO (IDINFO, NOME, EMAIL) VALUES (15, 'KATIA MANTORANIA', 'KATMAN@HOTMAIL.COM');
INSERT INTO INFO (IDINFO, NOME, EMAIL) VALUES (3, 'SILVIA MANDROVICK', 'SMANDRO@YAHOO.COM.BR');
Após criar a tabela abra o Delphi e Insira os componentes descritos abaixo:
Paleta Standard -> Edit - em branco
Paleta Standard -> Button - Caption: Carregar Informações do Banco
Paleta Standard -> ListBox - em branco
Paleta Standard -> ComboBox - em branco
Paleta Standard -> Label - Valor do ID no Banco
Paleta DBEXPRESS -> SQL Connection
Agora que já temos a Base de Dados e o esqueleto da Apliacação devemos configurar a conexão entre o aplicativo e a Base de Dados.
Para isso clique duas vezes no componente SQL Connection.
Na janela "dbExpress Connections" clique no botão "+" para criar uma nova conexão.
Na janela "New Connection" selecione "Interbase" em "Driver Name" e em "Connection Name" digite "Dados", após isso clique no botão OK.
Dessa forma um novo nome de conexão estará sendo criado em "dbExpress Connections" sem a necessidade de alterarmos as
configurações defaults fornecidas pelo SQL Connection.
Bom, agora só falta mesmo editarmos os campos "Database" e "SQLDialect".
Em "Database" digite "127.0.0.1:c:\objeto\dados\dados.fdb"(Obs. Só use esse caminho caso você tenha criado as pastas objeto em c:\
e a pasta dados em c:\objetos\).
Em "SQLDialect" digite 3 (Para usarmos o dialeto mais atual no SQL).
Obs.: Caso a propriedade "Login Prompt" do SQL Connection esteja "True", passe-a para "False", pois você não vai querer uma janela chata de
login e senha aparecendo cada vez que você for utilizar sua aplicação.
Para testar a conexão entre a aplicação e a base de dados basta mudar a propriedade Connected do SQLConnection passando-a de "False" para "True".
Se não houver problemas de configuração a propriedade irá permanecer em "True".
Agora na unit principal devemos criar um procedimento que irá buscar os dados da nossa base de dados e preencher no componente StringList.
O componente StringList será utilizado para manter os dados armazenados até que os componentes ListBox e ComboBox solicitem esses dados.
Em "public" na nossa unit coloque a declaração do procedimento "procedure ListaDados( TmpStringList : TStrings );".
Aproveitando que ela foi declarada em public utilize as teclas CTRL + SHIFT + C para que o corpo da função seja colocada na unit.
No corpo da procedure coloque a declaração abaixo, mas por favor, leia cada linha para entender o que está acontecendo:
procedure TForm1.ListaDados( TmpStringList : TStrings );
var
TmpQuery : TSQLQuery; // Var TmpQuery do tipo TSQLQuery
begin
TmpQuery := TSQLQuery.Create( Self ); // Criamos uma inst?ncia do objeto TSQLQuery
try
TmpQuery.SQLConnection := Self.SQLConnection; // Passamos o nome do nosso SQL Connection para
// a propriedade SQLConnection do TmpQuery
TmpQuery.SQL.Text := 'SELECT * FROM info';
TmpQuery.Open;
// Se a Query não estiver vazia após o select nós descarregamos os valores do banco na StringList
if(
not TmpQuery.IsEmpty )
then
begin
TmpQuery.First;
repeat
// Repare que aqui já começamos trabalhar com o Objeto, nesse caso além de pegar o campo nome
// que est? no banco eu armazeno também o ID
TmpStringList.AddObject( TmpQuery.FieldByName('NOME').AsString,
Pointer( TmpQuery.FieldByName('IDINFO').AsInteger ) );
TmpQuery.Next;
until TmpQuery.EOF;
end;
finally
TmpQuery.Free; // Estamos libertando a nossa Query da senzala
end;
end;
Em seguida, no evento on click do botão "Carregar informações do Banco", digite:
Self.ListaDados( ListBox1.Items ); // Nesse ponto o ListBox usa como referencia o conteúdo da StringList
Self.ListaDados( ComboBox1.Items ); // Nesse ponto o ComboBox usa como referencia o conteúdo da StringList
Nesse ponto já temos quase tudo pronto, se não fosse o fato do ID não estar aparecendo no Edit.
Mas, para visualizarmos o ID devemos colocar a seguinte linha no evento on click do ListBox:
Edit1.Text := IntToStr( Integer( ListBox1.Items.Objects[ ListBox1.ItemIndex ] ) ); //Joga para o Texto do Edit o Objeto que está no item selecionado
E para finalizar devemos colocar a seguinte linha no evento on change do combobox:
Edit1.Text := IntToStr( Integer( ComboBox1.Items.Objects[ ComboBox1.ItemIndex ] ) );
É isso ai pessoal, dessa forma será possível visualizar o ID de cada item selecionado.
Espero que esse exemplo ajude no seu dia-a-dia. Estou deixando o exemplo do arquivo disponível para download.
No caso de dúvidas basta enviar uma mensagem para mim no jsakalauska@gmail.com - João Marcos Sakalauska. Fui!