Fórum Novo erro sql no delphi segue código #416501
09/05/2012
0
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
Curtir tópico
+ 0Posts
09/05/2012
Joel Rodrigues
Gostei + 0
09/05/2012
Marcelo Augusto
Não esta faltando o parentese no delphi ja tentei la está com o parentese final
Gostei + 0
09/05/2012
Marcelo Augusto
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
Gostei + 0
09/05/2012
Marcelo Augusto
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;
Gostei + 0
10/05/2012
Joel Rodrigues
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.
Gostei + 0
10/05/2012
Marcelo Augusto
Gostei + 0
10/05/2012
Emerson Nascimento
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.
Gostei + 0
10/05/2012
Joel Rodrigues
Bom, mas a dica servirá para outras expressões no futuro.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)