Banco De Dados
Trabalho Universitário: Banco De Dados. Pesquise 861.000+ trabalhos acadêmicosPor: Romualad • 3/12/2014 • 1.411 Palavras (6 Páginas) • 200 Visualizações
A maioria dos sistemas comerciais conta com várias telas de consulta, onde o usuário pode localizar registros específicos a partir de filtros pré-definidos. Porém, o comum é que cada janela seja voltada para uma única tabela (ou um conjunto delas).
Neste artigo, desenvolveremos uma tela de consulta genérica, onde o usuário poderá filtrar dados de uma tabela qualquer e definir o filtro dinamicamente, visualizando uma expressão representativa da consulta.
Para isso, utilizaremos o Microsoft SQL Server 2012 (outras versões podem ser utilizadas sem problemas) e o Delphi XE2. Como engine de conexão, usaremos o ADO.
Para iniciar, criemos uma nova aplicação VCL no Delphi a partir do menu File > New > VCL Forms Application.
No form principal, adicione um componente ADOConnection e, antes de tudo, desmarque a propriedade LoginPrompt para que a tela de login não seja exibida sempre que uma conexão como banco for requisitada. Em seguida, dê duplo clique sobre o controle e configure a conexão com o banco de dados, de acordo com as variáveis do seu computador e servidor.
Na tela exibida na Figura 1, clique em “Build...”.
Figura 1: Configurar Connection String
Na tela seguinte, selecione o provedor “Microsoft OLE DB Provider for SQL Server”, como mostra a Figura 2, e clique em “Avançar”.
Figura 2: Seleção do provedor de acesso ao banco
Na tela seguinte, insira as informações requisitadas, selecionando o servidor, o banco de dados e definindo as credenciais de acesso.
Figura 3: Definição de variáveis de conexão
Clique em “OK” e, na tela que voltará a aparecer, clique novamente em “OK”, finalizando a configuração.
Listando as tabelas do banco
O primeiro passo para a criação da consulta genérica, é disponibilizar a lista de tabelas do banco para o usuário escolher em qual deseja pesquisar.
Observação 1: o layout utilizado aqui é apenas uma sugestão, o leitor pode optar por organizar os componentes na tela da forma como preferir.
Adicione um GroupBox com a propriedade “Align” definida como “alTop”. Em seu interior, adicione um Label com “Caption” igual a “Tabelas disponíveis” e um ComboBox com “Name” definido como “cbbTabelas”. Esta configuração é mostrada na Figura 4.
Figura 4: ComboBox para listar as tabelas
Agora, no evento OnShow do formulário, adicione o código constangem na Listagem 1, onde é utilizado um componente ADOQuery instanciado em tempo de execução para listar as tabelas do banco no cbbTabelas.
Listagem 1: Listando as tabelas do banco
cbbTabelas.Items.Clear();
with TADOQuery.Create(Self) do
begin
Connection := ADOConnection1;
SQL.Text := 'SELECT * FROM Sys.Tables';
Open();
First();
while not Eof do
begin
cbbTabelas.Items.Add(FieldByName('name').AsString);
Next();
end;
end;
A tabela Sys.Tables armazena informações referentes às tabelas existentes no banco de dados para o qual a ADOConnection está configurada. A Figura 5 mostra o resultado, no meu caso, ao compilar o programa.
Figura 5: Tabelas listadas
Listando as colunas da tabela selecionada
Para filtrar os dados de uma tabela, é necessário escolher uma coluna pela qual se deseja pesquisar e, para isso, é preciso primeiramente que o usuário tenha acesso à lista de colunas da tabela selecionada. Adicione os mesmos componentes visuais utilizados para a listagem de tabelas (GroupBox, Label e ComboBox) e configure conforme a Figura 6. Altere o nome do ComboBox para “cbbColunas”.
Figura 6: ComboBox para listar as colunas
Em seguida, no evento OnChange do cbbColunas adicione o código da Listagem 2 para que, ao selecionar uma tabela, as suas colunas sejam listadas.
Listagem 2: Listando as colunas da tabela selecionada
cbbColunas.Items.Clear();
with TADOQuery.Create(Self) do
begin
Connection := ADOConnection1;
SQL.Text := 'SELECT '+
' c.name '+
'FROM '+
' Sys.Columns c '+
'LEFT OUTER JOIN '+
' sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id '+
'LEFT OUTER JOIN '+
' sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id '+
'WHERE '+
' c.object_id = OBJECT_ID(:tabela)';
Parameters.ParamByName('tabela').DataType := ftString;
Parameters.ParamByName('tabela').Value := cbbTabelas.Text;
Open();
First();
while not Eof do
begin
cbbColunas.Items.Add(FieldByName('name').AsString);
Next();
end;
end;
A
...