Erro no Select

Delphi

15/04/2009

Bom dia a todos,

Estou com dificuldades no select através do Delphi 7, será que alguem poderia me ajudar?
Estou utilizando o Delphi 7 com firebird 2.0 e IBExpert Personal Edition.

Quando executo o select abaixo pelo Delphi 7 ele da um erro, mas quando utilizo o mesmo no IBExpert é perfeito. O que pode estar acontecendo?

SELECT * FROM (select * from orc
Where ( ´2´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´1´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´1´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´1´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´1´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10)))
as uel
Where TIPO_SIST = ´TIPO_INST´


A janela de Erro mostra a seguinte mensagem:
Nome da Janela: Debugger Exception Notification
Mensagem: Project SGKB.exe raised exception class EIBInterBaseError with message ´Dynamic SQL Error SQL error code = -104 Token unknown - line 1, char 16 Select´. Process stopped. Use Step or Run to continue.

Se alguem puder me ajudar, agradeço.


Uelinton_reis

Uelinton_reis

Curtidas 0

Respostas

Maikel

Maikel

15/04/2009

Bom, a mensagem de erro quer dizer que vc está com problemas quanto a sintaxe do seu código SQL, onde provavelmente o erro está no uso das aspas pelo Delphi.

Tente fazer o seguinte, ao passar a SQL para o Delphi, em todo lugar onde aparece uma aspa simples, adicione mais uma, onde vai ficar duas aspas uma ao lado da outra... assim:

SELECT * FROM (select * from orc
Where ( ´´2´´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´´1´´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´´1´´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´´1´´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´´1´´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10)))
as uel
Where TIPO_SIST = ´´TIPO_INST´´ 


Att


GOSTEI 0
Uelinton_reis

Uelinton_reis

15/04/2009

Então amigo, fiz um teste e quando não utilizo um select dentro de outro select ele não da o erro: Exemplo utilizado que não da o erro esta abaixo:

SELECT * FROM orc
Where ( ´31´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´14´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
or ( ´´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))

Mas quando utilizo o IBExpert para rodar o script com o select dentro do select funciona é apenas jogar no delphi que da o erro.

-------------------------------------------------

Outra questão se vc puder me ajudar.
Neste mesmo script eu gostaria que o select fosse acumulativo tipo:
SELECT * FROM orc
Where ( ´31´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
[b:77e716350b]and[/b:77e716350b] ( ´14´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
[b:77e716350b]and[/b:77e716350b] ( ´´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
[b:77e716350b]and[/b:77e716350b] ( ´´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))
[b:77e716350b]and[/b:77e716350b] ( ´´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))

No lugar do [b:77e716350b]OR[/b:77e716350b] utilizar [b:77e716350b]AND[/b:77e716350b], mas não funciona, porque? Qual outra opção posso utilizar para ser acumulativo.

Obrigado.

Uelinton


GOSTEI 0
Maikel

Maikel

15/04/2009

Faça o post da rotina que vc está usando no Delphi para jogar a SQL... é através de algum componente ou está adicionando a SQL direto no código?

Faça o post de todo o código que ficará mais fácil de lhe ajudar.

Att


GOSTEI 0
Uelinton_reis

Uelinton_reis

15/04/2009

Faça o post da rotina que vc está usando no Delphi para jogar a SQL... é através de algum componente ou está adicionando a SQL direto no código? Faça o post de todo o código que ficará mais fácil de lhe ajudar. Att


Boa tarde.

if (PesqSistemas.RadioGroup1.ItemIndex = 0) then
begin
statusbar1.Panels[2].Text:= ´ Tipo Sistema: Instalação´;
strSql:= ´select * from ´ + nomeTabela;
strSql:= strSql + ´ where ( ´ + #39 + PesqSistemas.IBQOpcao1.FieldByName(´id´).AsString + 39 + ´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))´;
strSql:= strSql + ´ or ( ´ + 39 + PesqSistemas.IBQOpcao2.FieldByName(´id´).AsString + 39 + ´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))´;
strSql:= strSql + ´ or ( ´ + 39 + PesqSistemas.IBQOpcao3.FieldByName(´id´).AsString + 39 + ´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))´;
strSql:= strSql + ´ or ( ´ + #39 + PesqSistemas.IBQOpcao4.FieldByName(´id´).AsString + 39 + ´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))´;
strSql:= strSql + ´ or ( ´ + 39 + PesqSistemas.IBQOpcao5.FieldByName(´id´).AsString + 39 + ´ in (sist1, sist2, sist3, sist4, sist5, sist6, sist7, sist8, sist9, sist10))) as Orcamentos ´;
strSql:= strSql + ´ Where TIPO_SIST = ´ + 39 + ´TIPO_INST´ + 39;
end;

Tomara que ajude.

Obrigado.


GOSTEI 0
POSTAR