Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 4106 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Bom dia ...

Preciso de um help aqui com uma consulta sql. Faço assim:

qEstoque.Close;
qEstoque.Sql.Clear;
qEstoque.Sql.Text := 'select * from PRODUTOS where LOJA in (4,5)';
qEstoque.Open;

Funciona certinho.

 

Dessa forma:

var Lojas: String;
...
Lojas := '4,5';
qEstoque.Close;
qEstoque.Sql.Clear;
qEstoque.Sql.Text := 'select * from PRODUTOS where LOJA in (:vLojas)';
qEstoque.ParamByName('vLojas').Value := Lojas;
qEstoque.Open;

Só mostra na grid os produtos da LOJA 4.

Onde estou errando ?

 

Obrigado.

 

Sérgio

 

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

  • Consultores
Postado

Verifique o tipo do parâmetro.

Mas até onde sei, você não pode usar um Param para incluir uma parte configurável do seu Select, em especial um conjunto de valores.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

Ao inves de .value no parâmetro, tente .AsString.

Ou concatene a string diretamente na string do SQL em SQL.TEXT.

Fazendo qEstoque.ParamByName('vLojas').AsString := Lojas; só puxou a LOJA 4.

 

Já dessa forma: qEstoque.Sql.Text := 'select * from PRODUTOS where LOJA in ('+Lojas+')'; deu certo.

 

Obrigado.

 

Sérgio

 

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

Postado (editado)

Verifique o tipo do parâmetro.

Mas até onde sei, você não pode usar um Param para incluir uma parte configurável do seu Select, em especial um conjunto de valores.

Deu certo aqui a segunda opção mencionada pelo Regys.

 

Agradeço muito a atenção.

 

Sérgio

Editado por gigainfo
Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

  • Consultores
Postado

Exato. Não dá pra usar um param, o que pode ser feito é modificar a SQL como o Régys mencionou. Mas daí sua query não pode ser preparada para múltiplas execuções alterando apenas o parâmetro. No entanto, dependendo do caso, isso não atrapalha em nada.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

Aproveitando mais um pouco da atenção... mais uma dúvida. Eu uso muito o "Value" nos parametros nas minhas instruções SQL.

 

Exemplo: qEstoque.ParamByName('Loja').Value := 4;

 

Seria dessa forma qEstoque.ParamByName('Loja').AsInteger := 4; o correto ?

 

O que muda ?

 

Sérgio

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

  • Consultores
Postado

Value usa o tipo nativo da classe TParam, ao passo que AsInteger ou AsString faz uma conversão conforme você passou.

Não existe meio correto ou incorreto.

O que muda é que a conversão é feita ou não. A explanação foi breve, mas espero que ajude.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado

Só para complementar o tipo padrão é "Variant" que aceita qualquer coisa dentro dele, o problema de usar ele ao meu ver é na hora das conversões, nem tudo pode ser convertido dependendo da situação e como variant aceita qualquer coisa dentro fica um tanto quanto complicado.

Se você tem certeza do que tem dentro do TParam não é problema usar .value, mas se não tem, o ideal e fazer o cast ".As...", outra coisa que vejo de vantagem no cast é que se o valor passado não for possível de converter, o próprio compilador já mata abortando a compilação, se não é gerada uma exceção durante o processo.

  • Curtir 2

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • Este tópico foi criado há 4106 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.