Fórum Erro numa consulta SQL em Delphi #373309

09/08/2009

0

Olá pessoa,
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

Carlosib

Responder

Posts

09/08/2009

Carlosib

O campo NOME existe nas DUAS tabelas.

Se fizer PF.NOME não tenho erro ... mas fazendo D.NOME tenho erro.


Responder

Gostei + 0

10/08/2009

Carlosib

sobe :oops:


Responder

Gostei + 0

11/08/2009

Emerson Nascimento

tente montar a instrução toda de uma vez, e depois passe os parâmetros.
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?


Responder

Gostei + 0

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

Aceitar