passagem de parametro
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
para uma query que tem a seguinte consulta:
select * from tabela
where campo in(:parametro)
Desde já obrigado
Leufmt
Curtidas 0
Respostas
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;
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
07/08/2008
isto não vai dar certo pois estou passando o parametro assim:
tabela.parameters[0].value := parametro;
tabela.parameters[0].value := parametro;
GOSTEI 0
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.
Bem, mas se quiser pode me adicionar no MSN que terei prazer em tentar ajudá-lo.
GOSTEI 0
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.
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
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:
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]
´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