Buscar

Vendo o id (bd) quando selecionar um item no combobox ou listbox utilizando object

nome

João Marcos Sakalauska

Colunista ainda sem descrição. Caro colunista, por favor envie-nos sua descrição.

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!

Publicidade

Vote no artigo




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes do artigo

Categoria: Outros
Adicionado dia: 25/08/06
Por: João Marcos Sakalauska
Visualizado: 44626 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009