passagem de parametro

Delphi

07/08/2008

como faço para passar a seguinte string por parametro: 001,002,003

para uma query que tem a seguinte consulta:
select * from tabela
where campo in(:parametro)


Desde já obrigado


Leufmt

Leufmt

Curtidas 0

Respostas

Jener

Jener

07/08/2008

Jovem, vc pode passar como parâmertos um array ou um stringlist para usar na sua cláusula Where.
ex.:

Procedure Selecionar(Itens: array[0..3] of Char);
Begin

Select
Campo1,
Campo2
From
Tabela
Where
Condicao in (Itens[1],Itens[2],Itens[3])

End;


GOSTEI 0
Leufmt

Leufmt

07/08/2008

isto não vai dar certo pois estou passando o parametro assim:

tabela.parameters[0].value := parametro;


GOSTEI 0
Jener

Jener

07/08/2008

Não entendi bem o motivo que apresentou para que não funcionasse. Pelo que entendi da sua primeira mensagem não vejo motivo para que não funcione.
Bem, mas se quiser pode me adicionar no MSN que terei prazer em tentar ajudá-lo.


GOSTEI 0
Leufmt

Leufmt

07/08/2008

E que na verdade os valores que estou enviando são do tipo string mas separados por vírgula, por este motivo não estou conseguindo enviar por parametro. já tentei fazer assim:

parametro := QuotedStr(´001´) + ´,´ + QuotedStr(´002´) + ´,´ +QuotedStr(´001´);

tabela.parameters[0].value := parametro;

para esta consulta que esta em um adoquery:
select * from tabela
where campo in(:parametro)

O parametro deveria chegar na consulta desta forma ´001´, ´002´, ´003´
mas não esta dando certo.
Já estou desesperado para resolver isto.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

07/08/2008

você terá de tratar isso de outra forma. não é possível passar um lista como parâmetro para a função [i:04ed31bd94]in[/i:04ed31bd94] do sql.

´desmonte´ a string e remonte-a no formato desejado. depois faça a concatenação na instrução, pois não dá para passar como parâmetro.

algo assim:
function TForm1.MontaSQL(tabela, campo, lista: string): string;
var
  lst: TStringList;
  i: integer;
  Parametro: string;
begin
  lst := TStringList.Create;
  lst.Delimiter := ´,´;
  lst.DelimitedText := Lista;

  parametro := ´´;

  for i := 0 to lst.Count-1 do
  begin
    parametro := parametro + QuotedStr(lst[i]);
    if i < lst.Count-1 then
      parametro := parametro + ´,´;
  end;

  lst.Free;

  result := ´select * from ´+tabela+´ where ´+campo+´ in (´+parametro+´)´;
end;


execute a função da seguinte forma:
ShowMessage(MontaSQL(´Cliente´, ´Codigo´, ´001,002,003,012,065´));
será exibida a instrução:
[i:04ed31bd94]select * from Cliente where Codigo in (´001´,´002´,´003´,´012´,´065´)[/i:04ed31bd94]


funciona mesmo que seja passado apenas um elemento na lista:
ShowMessage(MontaSQL(´Cliente´, ´Codigo´, ´012´));
retorna:
[i:04ed31bd94]select * from Cliente where Codigo in (´012´)[/i:04ed31bd94]


GOSTEI 0
POSTAR