Erro SQL: Invalid expression in the select list
Tenho uma tela que possui um botão ´Filtrar´ e quando clico nele ele roda os seguintes comandos:
Se eu não informar nada ou apenas clicar no checkbox2 e deixa-lo como true, o sql roda redondinho... agora se eu por exemplo quiser filtrar a partir do CD_UF o programa gera o seguinte erro..
Mas eu não consigo entender o porque disso, pois quando eu rodo sql no ibexpert tudo funciona certinho...
Desde já agradeço, obrigado.
[/list]
procedure TFMBUMARKETING.Button2Click(Sender: TObject);
begin
qyres.Close;
qyres.SQL.Clear;
QYRES.SQL.ADD(´SELECT C.DS_FABRP, E.DS_SEGMERC, I.DS_CHART, A.CD_UF , A.DS_CIDADE, COUNT(A.NR_MARK_CHART) AS QT_EMAIL_ENVIADOS,´);
QYRES.SQL.ADD(´COUNT(A.DT_RETORNO_EMAIL) AS QT_EMAIL_RETORNADOS FROM MARKETING_CHART A´);
QYRES.SQL.ADD(´LEFT OUTER JOIN MARKETING_FABRP B ON (B.NR_MARKETING=A.NR_MARKETING)´);
QYRES.SQL.ADD(´LEFT OUTER JOIN TAB_FABR C ON (C.CD_FABRP=B.CD_FABRP)´);
QYRES.SQL.ADD(´LEFT OUTER JOIN MARKETING_SEGMERC D ON (D.NR_MARKETING=A.NR_MARKETING)´);
QYRES.SQL.ADD(´LEFT OUTER JOIN TAB_SEGMERC E ON (E.CD_SEGMERC=D.CD_SEGMERC)´);
QYRES.SQL.ADD(´LEFT OUTER JOIN MARKETING_E_MAIL_CONTATO F ON(F.NR_MARKETING=A.NR_MARKETING)´);
QYRES.SQL.ADD(´LEFT OUTER JOIN TAB_TIPO_CONTATO_EMAIL G ON(G.CD_TIPO_CONTATO_EMAIL=F.CD_TIPO_CONTATO_EMAIL)´);
QYRES.SQL.Add(´LEFT OUTER JOIN MARKETING_RAMO_ATIVIDADE H ON(H.NR_MARKETING=A.NR_MARKETING)´);
QYRES.SQL.ADD(´INNER JOIN TAB_CHART I ON (I.CD_CHART=A.CD_CHART)´);
qyres.SQL.Add(´WHERE´);
if (e_email3.text<>´´) then
begin
qyres.SQL.Add(´A.DS_EMAIL=:DS_EMAIL´);
qyres.ParamByName(´DS_EMAIL´).AsString := e_email3.text;
qyres.SQL.Add(´AND ´);
end;
if (edtp_contato3.text<>´´) then
begin
qyres.SQL.Add(´G.CD_TIPO_CONTATO_EMAIL=:CD_TIPO_CONTATO_EMAIL´);
qyres.ParamByName(´CD_TIPO_CONTATO_EMAIL´).asstring := edtp_contato3.text;
qyres.SQL.Add(´AND ´);
end;
if (edcd_segmerc3.text<>´´) then
begin
qyres.SQL.Add(´D.CD_SEGMERC=:CD_SEGMERC´);
qyres.ParamByName(´CD_SEGMERC´).asstring := edcd_segmerc3.text;
qyres.SQL.Add(´AND ´);
end;
if (edcd_fabr3.text<>´´) then
begin
qyres.SQL.Add(´C.CD_FABRP=:CD_FABRP´);
qyres.ParamByName(´CD_FABRP´).asstring := edcd_fabr3.text;
qyres.SQL.Add(´AND ´);
end;
if (edcd_ramo3.text<>´´) then
begin
qyres.SQL.Add(´H.CD_RAMO_ATIVIDADE=:CD_RAMO_ATIVIDADE´);
qyres.ParamByName(´CD_RAMO_ATIVIDADE´).asstring := edcd_ramo3.text;
qyres.SQL.Add(´AND ´);
end;
if (edcd_uf3.text<>´´) then
begin
qyres.SQL.Add(´A.CD_UF=:CD_UF´);
qyres.ParamByName(´CD_UF´).asstring := edcd_uf3.text;
qyres.sql.savetofile(´C:\sql.txt´);
qyres.SQL.Add(´AND ´);
end;
if not EMPTY(edds_cidade3.Text) then
Begin
qyres.SQL.Add(´A.DS_CIDADE LIKE ´´¬´+ edds_cidade3.Text+´´´´);
qyres.SQL.Add(´AND ´);
end;
if (CheckBox2.Checked = True) then
begin
qyres.SQL.Add(´A.DT_RETORNO_EMAIL IN(SELECT DT_RETORNO_EMAIL FROM MARKETING_CHART WHERE DT_RETORNO_EMAIL IS NOT NULL)´);
qyres.SQL.Add(´AND ´);
end;
if ((DateEdit3.text<>´ / / ´)and(DateEdit4.text<>´ / / ´)) then
begin
QYRES.SQL.ADD(´A.DT_EMISSA BETWEEN :DT1 AND :DT2´);
QYRES.PARAMBYNAME(´DT1´).ASSTRING := DATEEDIT3.TEXT;
QYRES.PARAMBYNAME(´DT2´).ASSTRING := DATEEDIT4.TEXT;
QYRES.SQL.ADD(´AND ´);
end;
if (NR_MARK_CHART3.text<>´´) then
begin
QYRES.SQL.ADD(´A.NR_MARK_CHART=:NR_MARK_CHART´);
QYRES.PARAMBYNAME(´NR_MARK_CHART´).ASSTRING := NR_MARK_CHART3.TEXT;
QYRES.SQL.ADD(´AND ´);
end;
if (edcd_chart3.text<>´´) then
begin
QYRES.SQL.ADD(´A.CD_CHART=:CD_CHART´);
QYRES.PARAMBYNAME(´CD_CHART´).ASSTRING := EDCD_CHART3.TEXT;
QYRES.SQL.ADD(´AND ´);
end;
QYRES.SQL.DELETE(QYRES.SQL.COUNT-1);
QYRES.SQL.ADD(´GROUP BY 1,2,3,4,5´);
QYRES.OPEN;
end;
Se eu não informar nada ou apenas clicar no checkbox2 e deixa-lo como true, o sql roda redondinho... agora se eu por exemplo quiser filtrar a partir do CD_UF o programa gera o seguinte erro..
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
Mas eu não consigo entender o porque disso, pois quando eu rodo sql no ibexpert tudo funciona certinho...
Desde já agradeço, obrigado.
[/list]
Douglass
Curtidas 0