Dúvida com IN

12/05/2008

2

Pessoal, eu tenho um campo em uma tabela, que diz quais terminais podem fazer a impressão de uma determinada ordem.
Os nomes dos terminais são numeros, exemplo: 1,2,3,4...

Eu tenho um campo chamado: terminais_podem_imprimir e no if, eu fiz o seguinte:

if varTerminal IN [DM1.qryConfiguracoesterminais_podem_imprimir.AsInteger] then

acontece que o campo possui valores: 1,2 (apenas os terminais 1 e 2 podem imprimir).

Como eu to colocando .AsInteger, ele me retorna um erro falando que o valor 1,2 não é um valor inteiro.
Mas acontece que eu só consigo colocar valores inteiros no IN.
Tem alguma forma de eu colocar AsString dentro do IN?

Abraços..
t+


Responder

Posts

12/05/2008

Rjun

De que tipo é esse seu campo na tabela?


Responder

12/05/2008

[vaza]

tipo string...
eu fiz desse jeito para a pessoa separar por ´,´ (vírgula) os terminais que podem imprimir

dai

se terminal IN [1,2] entao
imprime;


Responder

12/05/2008

Rjun

O que você quer fazer não vai dar certo. Se a variavel [b:b955e873ed]terminal[/b:b955e873ed] vai receber um valor único, você pode fazer a procura na string, usando a função Pos.

if Pos(Terminal, DM1.qryConfiguracoesterminais_podem_imprimir.AsString) > 0 then
  //faça o que tem que fazer.



Responder

12/05/2008

[vaza]

mas eu fazendo dessa forma, se eu adicionar o valor:
1,20
ele vai entender que 2 seria um terminal para imprimir também, não é? por causa do 2 que esta no valor 20


Responder

12/05/2008

Joaoshi

Colega, você poderia gravar os valores formatados (evitando o problema anterior).

Ex.:

1 = 001
2 = 002
3 = 003

Espero ter ajudado.


Responder

12/05/2008

[vaza]

é uma boa ideia mesmo..vlw ;)


Responder

13/05/2008

Orpolonio

O IN funciona perfeitamente com inteiros, veja este exemplo funcional

While( cds.Eof=False ) Do Begin
var_sIn:=var_sIn+cds.FieldByName(´GUIA´).AsString+´,´;
cds.Next;
End;
var_sIn:=Copy(var_sIn,01,Length(var_sIn)-1);


NA CLAUSULA SQL
´ Where R.GUIA In(´+var_sIn+´)´


Responder

13/05/2008

Paulo

O problema todo é que no campo foi gravado assim: 1,2, logo se ele der um FieldByName aí, virá o valor 1,2(Para o programa é um valor só e não dois como ele quer), logo o erro de que não é um cmpo Integer está correto. Vc deve gerar esse campo como Integer mesmo, e dar um While e ir pegando valor a valor e ir guardando em uma variável(pode ser string esta variável e ir separando por vírgula cada valor), e depois descarregar a variável na cláusula IN.


Responder

13/05/2008

[vaza]

Eu fiz com o Pos como o RJun falou, mas dai também mudei o nome dos terminais para 001, 002 e assim por diante..
dessa forma eu já consigo ter o que eu queria :D
vlw ai pela força pessoal.


Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar