unir select

MySQL

14/09/2012

Uso MySql 5 e delphi 7

Preciso fazer um select onde a condição pode ser um nome específico de uma coluna (select 1)
ou trazer todos os campos da coluna (select 2)

select 1
MyQuery1.SQL.add('select nome, cpf');
MyQuery1.SQL.add('from aluno');
MyQuery1.SQL.add('where nome =: parametro');
MyQuery1.Params[0].Value := Combobox1.Text;

select 2
MyQuery1.SQL.add('select nome, cpf');
MyQuery1.SQL.add('from aluno');

Como posso unir estes dois select. No form(Delphi) tem um CheckBox, que se for selecionado indica que o usuário quer exibir todos os alunos(select 2), ou ele clica em um Combobox onde escolhe o nome a ser exibido(select 1)

Claudivan Lopes

Claudivan Lopes

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

14/09/2012

Você pode montar a query sem parâmetros e, caso o usuário deseje filtrar um único nome, você adiciona a cláusula where e o parâmetro.
Se tiver duvida com relação a implementação, é só avisar.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

14/09/2012

Uso MySql 5 e delphi 7

Preciso fazer um select onde a condição pode ser um nome específico de uma coluna (select 1)
ou trazer todos os campos da coluna (select 2)

select 1
MyQuery1.SQL.add('select nome, cpf');
MyQuery1.SQL.add('from aluno');
MyQuery1.SQL.add('where nome =: parametro');
MyQuery1.Params[0].Value := Combobox1.Text;

select 2
MyQuery1.SQL.add('select nome, cpf');
MyQuery1.SQL.add('from aluno');

Como posso unir estes dois select. No form(Delphi) tem um CheckBox, que se for selecionado indica que o usuário quer exibir todos os alunos(select 2), ou ele clica em um Combobox onde escolhe o nome a ser exibido(select 1)



  if (not CbTodos.Checked) and (Combobox1.Text = '') then
  begin
    ShowMessage('Escolha o aluno');
    Combobox1.SetFocus;
    Exit;
  end;
  MyQuery1.Close;
  MyQuery1.SQL.Clear;
  if CbTodos.Checked then
  begin
    MyQuery1.SQL.add('select nome, cpf');
    MyQuery1.SQL.add('from aluno');
  end
  else
  begin
    MyQuery1.SQL.add('select nome, cpf');
    MyQuery1.SQL.add('from aluno');
    MyQuery1.SQL.add('where nome =: parametro');
    MyQuery1.Params[0].Value := Combobox1.Text;
  end;
  MyQuery1.Open;
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

14/09/2012

Só mais uma coisa. Isso pode ser feito de muitas maneiras, eu só propus um complemento a um código que você já está utilizando.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

14/09/2012

Bom, apenas modificando um pouco o código da Claudiadnh, seguindo o meu raciocínio inicialmente proposto, a ideia era a seguinte:
MyQuery1.SQL.add('select nome, cpf');
MyQuery1.SQL.add('from aluno');

if (not CbTodos.Checked) then
begin
  if comboAlunos.Text = '' then
  begin
    Application.MessageBox('Selecione um aluno!', 'Atenção', MB_OK+MB_ICONWARNING);
    comboAlunos.SetFocus();
    Exit;
  end	
  MyQuery1.SQL.add('where nome =: parametro');
  MyQuery1.Params[0].Value := Combobox1.Text;
end

MyQuery1.Open;


Ou seja, o SELECT * FROM é feito independente do filtro. Caso o usuário deseje filtrar, aí sim adiciona-se a cláusula where.
Boa sorte.
GOSTEI 0
Alisson Santos

Alisson Santos

14/09/2012

só lembrando que para carregar um combox deverá fazer um while para carrega-lo
GOSTEI 0
POSTAR