Ajuda em instrução SQL

Delphi

29/03/2007

Bom dia
Pessoal estou com uma instrução SQL (Delphi 6E + Access 2000/2003 + ADO), que ta dificil sair.
Vejam

QryAniv.Close;
QryAniv.SQL.Clear;
N_Dias:= StrToInt(FloatToStr(Dt_Fim - Dt_Ini));
QryAniv.SQL.Add(´Select CTR_Cont,CTR_Nome,CTR_End,CTR_Cep,´+
´CTR_Bairro,CTR_UF,CTR_Cidade,CTR_DTNasc,CTR_Status,Left(CTR_DTNasc, 5) AS Aniv from CONTRATO´);
QryAniv.SQL.Add(´Where CTR_Status = :Situacao´);
QryAniv.SQL.Add(´and Left(CTR_DTNasc, 5) = ´ + #39 + Copy(DateToStr(Dt_Ini), 1, 5)+39);
for i:= 2 to N_Dias do
QryAniv.SQL.Add(´ OR Left(CTR_DTNasc, 5) = ´+39+ Copy(DateToStr(Dt_Ini + i), 1, 5)+39);
if edCidade.text <> ´´ then begin
QryAniv.Sql.Add(´and CTR_Cidade = :Cid´);
end;
QryAniv.SQL.Add(´ORDER BY CTR_Cidade,CTR_Nome,CTR_DTNasc´);
QryAniv.Parameters.ParamByName(´Situacao´).Value := ´D´;
if edCidade.text <> ´´ then qryAniv.Parameters.ParamByName(´Cid´).Value := edCidade.Text;
QryAniv.Open;
----------------------------------
Não da erro , só que esta ignorando CTR_Status e CTR_Cidade
ele apresenta os aniversariantes , mas não separa os com status (Ativos ou não) e nem separa a cidade escolhida.


Renato

Renato

Curtidas 0

Respostas

Rjun

Rjun

29/03/2007

Dei uma arrumada no seu código. Veja se agora funciona.

  qryAniv.Close;
  qryAniv.SQL.Clear;

  N_Dias := StrToInt(FloatToStr(Dt_Fim - Dt_Ini));
  qryAniv.SQL.Add(´SELECT CTR_Cont, CTR_Nome, CTR_End, CTR_Cep, ´ +
                  ´CTR_Bairro, CTR_UF, CTR_Cidade, CTR_DTNasc, CTR_Status, ´ +
                  ´Left(CTR_DTNasc, 5) AS Aniv FROM Contrato´);
                  ´WHERE CTR_Status = :Situacao AND´);
                  ´(LEFT(CTR_DTNasc, 5) = ´ + #39 + Copy(DateToStr(Dt_Ini), 1, 5) + 39);

  for i:= 2 to N_Dias do
    qryAniv.SQL.Add(´ OR Left(CTR_DTNasc, 5) = ´ + 39 + Copy(DateToStr(Dt_Ini + i), 1, 5) + 39);

  qryAniv.SQL.Add(´)´);

  if edCidade.text <> ´´ then
  begin
    qryAniv.Sql.Add(´AND CTR_Cidade = :Cid´);
    qryAniv.Parameters.ParamByName(´Cid´).Value := edCidade.Text;
  end;

  qryAniv.SQL.Add(´ORDER BY CTR_Cidade, CTR_Nome, CTR_DTNasc´);
  qryAniv.Parameters.ParamByName(´Situacao´).Value := ´D´;
  qryAniv.Open;



GOSTEI 0
Renato

Renato

29/03/2007

RJun o que vc mudou ?
etsa parte ?
qryAniv.SQL.Add(´)´);

se for não deu certo, continua ignorando as opções


GOSTEI 0
Rjun

Rjun

29/03/2007

Mais alterações:

var
  DiaInicial, DiaFinal: integer;
begin
  qryAniv.Close;
  qryAniv.SQL.Clear;

  N_Dias := StrToInt(FloatToStr(Dt_Fim - Dt_Ini));
  qryAniv.SQL.Add(´SELECT CTR_Cont, CTR_Nome, CTR_End, CTR_Cep, ´ +
                  ´CTR_Bairro, CTR_UF, CTR_Cidade, CTR_DTNasc, CTR_Status, ´ +
                  ´Left(CTR_DTNasc, 5) AS Aniv FROM Contrato´ +
                  ´WHERE CTR_Status = :Situacao ´);
                  ´AND LEFT(CTR_DTNasc, 5) BETWEEN :DiaInicial AND :DiaFinal ´);

  if edCidade.text <> ´´ then
  begin
    qryAniv.Sql.Add(´AND CTR_Cidade = :Cid´);
    qryAniv.Parameters.ParamByName(´Cid´).Value := edCidade.Text;
  end;

  qryAniv.SQL.Add(´ORDER BY CTR_Cidade, CTR_Nome, CTR_DTNasc´);

  DiaInicial := Dt_Fim - Dt_Ini;
  DiaFinal := DiaInicial + N_Dias;

  qryAniv.Parameters.ParamByName(´DiaInicial´).Value := DiaInicial;
  qryAniv.Parameters.ParamByName(´DiaFinal´).Value := DiaFinal;
  qryAniv.Parameters.ParamByName(´Situacao´).Value := ´D´;
  qryAniv.Open;
end;



GOSTEI 0
Renato

Renato

29/03/2007

Rogerio da erro
nesta parte :
qryAniv.SQL.Add(´SELECT CTR_Cont, CTR_Nome, CTR_End, CTR_Cep, ´ +
´CTR_Bairro, CTR_UF, CTR_Cidade, CTR_DTNasc, CTR_Status, ´ +
´Left(CTR_DTNasc, 5) AS Aniv FROM Contrato´ +
´WHERE CTR_Status = :Situacao ´);
´AND LEFT(CTR_DTNasc, 5) BETWEEN :DiaInicial AND :DiaFinal ´);

ERRO : Statement expected,but expression of type string found


GOSTEI 0
Rjun

Rjun

29/03/2007

qryAniv.SQL.Add(´SELECT CTR_Cont, CTR_Nome, CTR_End, CTR_Cep, ´ + 
                  ´CTR_Bairro, CTR_UF, CTR_Cidade, CTR_DTNasc, CTR_Status, ´ + 
                  ´Left(CTR_DTNasc, 5) AS Aniv FROM Contrato´ + 
                  ´WHERE CTR_Status = :Situacao ´ + 
                  ´AND LEFT(CTR_DTNasc, 5) BETWEEN :DiaInicial AND :DiaFinal ´); 



GOSTEI 0
Renato

Renato

29/03/2007

eu corrigi logo apos mandar a resposta, mas mesmo assim não deu resultado.
Apareceu um erro nesta parte :
DiaInicial := Dt_Fim - Dt_Ini;

Corrigi assim , mas nada , agora não aparece nenhum registro

DiaInicial := StrToInt(FloatToStr(Dt_Fim - Dt_Ini));
//Dt_Fim - Dt_Ini;


GOSTEI 0
POSTAR