Problema com consulta parametrizada

22/05/2008

1

Bom Dia galera ,um bom feriado a todos!!!

Tenho uma instrução SQL asssim:
select * from MUSICA where upper(nome) like(:nome) or (artista) like (:Artista) or (Album) like(:Album) or (Estilo) like (:Estilo) order by codigo

coloquei um radiogruop com os seguintes itens:Nome,Artista,Album e Estilo.
no evento change do edit o seguinte código:

DM.cdsMusica.Close;
Edit1.SetFocus;
if RadioGroup1.ItemIndex = 0 then
DM.cdsMusica.Params[0].AsString:=UpperCase(Edit1.Text) + ´¬´;
DM.cdsMusica.Open;


if RadioGroup1.ItemIndex = 1 then
DM.cdsMusica.Close;
DM.cdsMusica.Params[1].AsString:=UpperCase(Edit1.Text) + ´¬´;
DM.cdsMusica.Open;


if RadioGroup1.ItemIndex = 2 then
DM.cdsMusica.Close;
DM.cdsMusica.Params[2].AsString:=UpperCase(Edit1.Text) + ´¬´;
DM.cdsMusica.Open;


if RadioGroup1.ItemIndex = 3 then
DM.cdsMusica.Close;
DM.cdsMusica.Params[3].AsString:=UpperCase(Edit1.Text) + ´¬´;
DM.cdsMusica.Open;

Se eu buscar por artista e o album ou o estilo tiver o mesmo começo de busca traz todos , só que eu queria só os do campo artista.
Alguém sabe resolver esse problema?

Desde já eu fico grato!!!!


Responder

Posts

tente assim:
procedure TForm1.Edit1Change(Sender: TObject);
const
  acampos: array[0..3] of string = (´nome´, ´artista´, ´album´, ´estilo´);
var
  instrucao: string;
begin
  DM.cdsMusica.Close;
  DM.cdsMusica.CommandText := 
    ´select * from MUSICA ´+
    ´where upper(´+acampos[RadioGroup1.ItemIndex]+´) like :parametro ´;
  DM.cdsMusica.Params[0].AsString := UpperCase(Edit1.Text) + ´¬´;
  DM.cdsMusica.Open;
end;

se o ClientDataset não permitir a alteração da propriedade CommandText, vá até o DatasetProvider e, na propriedade Options, adicione o item poAllowCommandText.


Responder

23/05/2008

Lsksskyblu

Cara Deeculpe-me pelo atrazo sua dica foi mais que boa, foi ótima.
Obrigado!!!


Responder