Fórum Novo erro sql no delphi segue código #416501

09/05/2012

0

Procedure TF_Opcao_Relatorio_Pessoa.Consulta_Sql;
Begin
With QueryRelatorio do
begin
close;
Sql.Clear;
Sql.Add(_Sql);
Open;
end;

end;
if RbTodos.Checked then
_sql:=Select * from pessoa where clas_cadastro in(Select Clas_cadastro from pessoa where clas_cadastro=+QuotedStr(Membro);

If RbCompleto.Checked then
begin
consulta_sql;
F_Rel_Membro_Compl.QuickRep1.Preview;

Este sql não funciona
_sql:=Select * from pessoa where clas_cadastro in(Select Clas_cadastro from pessoa where
clas_cadastro=+QuotedStr(Membro);

ja outros bem mais conplexos funcionam normalmente


Marcelo Augusto

Marcelo Augusto

Responder

Posts

09/05/2012

Joel Rodrigues

Não estaria faltando um parêntese no fim?
Responder

Gostei + 0

09/05/2012

Marcelo Augusto

Não estaria faltando um parêntese no fim?


Não esta faltando o parentese no delphi ja tentei la está com o parentese final
Responder

Gostei + 0

09/05/2012

Marcelo Augusto

Não estaria faltando um parêntese no fim?


Não esta faltando o parentese no delphi ja tentei la está com o parentese final


testando novamente estava funcionando com outras sqls mas depois começou a dar erros algumas funcionan outras não

coloquei da seguinte forma
_sql:=Select * from pessoa where clas_cadastro in(Select Clas_cadastro from pessoa where clas_cadastro=+ QuotedStr(Membro));

o delphi compila mas o banco retorna erro
mas a sql no banco roda normal colocando Membro entre aspas porque membro é um atributo do tipo char
deu o seguinte erro:

projecto PrProj... .exe raised exception clas EOleException with message ORA-009900:instrução SQL Inválida.

se coloco aspas em membro no delphi da o erro 00900 e não 009900

mas se jogo esta sql detro do componente adoquery ela conecta e funciona normalmente

Responder

Gostei + 0

09/05/2012

Marcelo Augusto

Não estaria faltando um parêntese no fim?


Não esta faltando o parentese no delphi ja tentei la está com o parentese final


testando novamente estava funcionando com outras sqls mas depois começou a dar erros algumas funcionan outras não

coloquei da seguinte forma
_sql:=Select * from pessoa where clas_cadastro in(Select Clas_cadastro from pessoa where clas_cadastro=+ QuotedStr(Membro));

o delphi compila mas o banco retorna erro
mas a sql no banco roda normal colocando Membro entre aspas porque membro é um atributo do tipo char
deu o seguinte erro:

projecto PrProj... .exe raised exception clas EOleException with message ORA-009900:instrução SQL Inválida.

se coloco aspas em membro no delphi da o erro 00900 e não 009900

mas se jogo esta sql detro do componente adoquery ela conecta e funciona normalmente

ja estas que seguem abaixo funcionan normalmente !
if (CbNome.checked) and (CbEndereco.checked)and
(Cbcontatos.Checked) and (CbDocumentos.Checked)
and (cbparentes.Checked = false) then
{execução do relatório Nome endereco contatos documentação da pessoa = membro}
begin
_sql:=SELECT P.CODIGO,NOME,CPF,RG,DATA_NASC,FONE,CELULAR,EMAIL+
C.ID_CEP,CEP_NOME,+
B.BAIRRO_NOME,CI.CIDADE_NOME,E.ESTADO_NOME,PA.PAIS_NOME+
FROM PESSOA P,CEP C, BAIRRO B,CIDADE CI,ESTADO E,PAIS PA+
WHERE (P.ID_CEP = C.ID_CEP)+
AND(C.CEP_BAI_COD = B.BAIRRO_CODIGO)+
AND (B.BAIRRO_COD_CID = CI.CIDADE_CODIGO)+
AND (CI.CIDADE_COD_ESTADO = E.ESTADO_CODIGO)+
AND (E.ESTADO_CODPAIS = PAIS_COD)+
AND p.clas_cadastro in (Select x.Clas_cadastro from pessoa x+
where p.codigo = x.codigo and x.clas_cadastro = Membro);
F_RelatMembroEndContato.quickrep1.preview;
end;
end
else
if (Rbresumido.Checked) then
_Sql:=select * from pessoa where codigo =+ dm.tblPessoaCODIGO.Text;
consulta_Sql;
F_Rel_Pessoa_Resumido.QuickRep1.Preview;
end;

Responder

Gostei + 0

10/05/2012

Joel Rodrigues

Duas possibilidades:
1) Só pra garantir, verifique se a expressão SQL que você está passando está correta, efetuando o debug da aplicação nesse ponto. Deve ser assim:
_sql:=´Select * from pessoa where clas_cadastro in(Select Clas_cadastro from pessoa where clas_cadastro=´+ QuotedStr(Membro)+´)´;


2) Use parâmetros ao invés de passar o valor pelo QuotedStr:
[code]
_sql:=´Select * from pessoa where clas_cadastro in(Select Clas_cadastro from pessoa where clas_cadastro= :CLASSE)´;
query.SQL.Text = _sql;
query.Parameters.ParamByName(´CLASSE´).Value := Membro;
[code]

Teste aí e veja no que dá, pois o erro aparentemente é na expressão SQL.
Responder

Gostei + 0

10/05/2012

Marcelo Augusto

Amigo, Joel valeu pela orientação funcionou perfeitamente por param. obrigado,
Responder

Gostei + 0

10/05/2012

Emerson Nascimento

e porque não faz somente:

query.SQL.Text = ´Select * from pessoa where clas_cadastro = :CLASSE´;
query.Parameters.ParamByName(´CLASSE´).Value := Membro;
query.Open;

porque aquela instrução toda elaborada, com o not in ? é totalmente desnecessário nesse caso.
Responder

Gostei + 0

10/05/2012

Joel Rodrigues

Caramba, Emerson, pode crer. Só agora que você falou foi que eu parei pra ler a instrução SQL direitinho.
Bom, mas a dica servirá para outras expressões no futuro.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar