Erro numa consulta SQL em Delphi
Olá pessoa,
estou com problemas numa consulta SQL. Uso Firebird 1.5, Delphi7 e IBX.
Meu código:
O erro ocorre no where o campo D.NOME não é localizado.
Onde estou errando?
estou com problemas numa consulta SQL. Uso Firebird 1.5, Delphi7 e IBX.
Meu código:
SQL.Clear; SQL.Add(´SELECT PF.NOME AS RS, PF.IDENTIFICADOR, D.NOME, 4 AS TIPO, 0 AS IDENTIFICADOR_PJ,´); SQL.Add(´FONE_RESIDENCIAL AS FONE1, FONE_CELULAR AS FONE2, FONE_COMERCIAL AS FONE3, EMAIL AS FONE4, D.IDENTIFICADOR AS MSN, REMUNERACAO ´); SQL.Add(´, D.NOME AS NOME_GRUPO, CLIENTE_DESDE, DATA AS DATA_NASCIMENTO, TIPO_CLIENTE, EXTRACT(DAY FROM D.DATA) AS DIA´); SQL.Add(´FROM PESSOAFISICA PF INNER JOIN DEPENDENTE D ON D.ID_PESSOA = PF.IDENTIFICADOR ´); SQL.Add(´WHERE (UPPER(LOGIN) = :LOGIN OR PUBLICA = :PUBLICA)´); ParamByName(´PUBLICA´).AsInteger := 1; ParamByName(´LOGIN´).AsString := AnsiUpperCase(Usuario._Login); case op of 2 : begin SQL.Add(´and UPPER(D.NOME) LIKE :NOME´); ParamByName(´NOME´).AsString := ´¬´+AnsiUpperCase(edtNomeNovo.Text)+´¬´; end; ....
O erro ocorre no where o campo D.NOME não é localizado.
SQL.Add(´and UPPER(D.NOME) LIKE :NOME´);
Onde estou errando?
Carlosib
Curtidas 0
Respostas
Carlosib
09/08/2009
O campo NOME existe nas DUAS tabelas.
Se fizer PF.NOME não tenho erro ... mas fazendo D.NOME tenho erro.
Se fizer PF.NOME não tenho erro ... mas fazendo D.NOME tenho erro.
GOSTEI 0
Carlosib
09/08/2009
sobe :oops:
GOSTEI 0
Emerson Nascimento
09/08/2009
tente montar a instrução toda de uma vez, e depois passe os parâmetros.
D.NOME será listado duas vezes. é isso mesmo?
cSQL := ´SELECT ´+ ´ PF.NOME AS RS, PF.IDENTIFICADOR, D.NOME, 4 AS TIPO, 0 AS IDENTIFICADOR_PJ, ´+ ´ PF.FONE_RESIDENCIAL AS FONE1, PF.FONE_CELULAR AS FONE2, PF.FONE_COMERCIAL AS FONE3, ´+ ´ PF.EMAIL AS FONE4, D.IDENTIFICADOR AS MSN, PF.REMUNERACAO, ´+ ´ D.NOME AS NOME_GRUPO, PF.CLIENTE_DESDE, D.DATA AS DATA_NASCIMENTO, PF.TIPO_CLIENTE, ´+ ´ EXTRACT(DAY FROM D.DATA) AS DIA ´+ ´FROM PESSOAFISICA PF INNER JOIN DEPENDENTE D ON D.ID_PESSOA = PF.IDENTIFICADOR ´+ ´WHERE (UPPER(LOGIN) = :LOGIN OR PUBLICA = :PUBLICA) ´; if op = 2 then cSQL := cSQL + ´ and UPPER(D.NOME) LIKE :NOME´; SQL.Text := cSQL; ParamByName(´PUBLICA´).AsInteger := 1; ParamByName(´LOGIN´).AsString := AnsiUpperCase(Usuario._Login); if op = 2 then ParamByName(´NOME´).AsString := ´¬´+AnsiUpperCase(edtNomeNovo.Text)+´¬´;
D.NOME será listado duas vezes. é isso mesmo?
GOSTEI 0