passagem de parametro

07/08/2008

4

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


Responder

Posts

07/08/2008

Jener

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;


Responder

07/08/2008

Leufmt

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

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


Responder

07/08/2008

Jener

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.


Responder

08/08/2008

Leufmt

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.


Responder
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]


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira