Ir para conteúdo
  • Cadastre-se

dev botao

Ajuda Com Sql


Ver Solução Respondido por Régys Silveira,
  • Este tópico foi criado há 4051 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

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]

Link para o comentário
Compartilhar em outros sites

  • Consultores

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.
Link para o comentário
Compartilhar em outros sites

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]

Link para o comentário
Compartilhar em outros sites

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]

Link para o comentário
Compartilhar em outros sites

  • Consultores

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.
Link para o comentário
Compartilhar em outros sites

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]

Link para o comentário
Compartilhar em outros sites

  • Consultores

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.
Link para o comentário
Compartilhar em outros sites

  • Moderadores

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
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 4051 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.