Fórum Ajuda em instrução SQL #339512
29/03/2007
0
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
Curtir tópico
+ 0Posts
29/03/2007
Rjun
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
29/03/2007
Renato
etsa parte ?
qryAniv.SQL.Add(´)´);
se for não deu certo, continua ignorando as opções
Gostei + 0
29/03/2007
Rjun
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
29/03/2007
Renato
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
29/03/2007
Rjun
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
29/03/2007
Renato
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
Clique aqui para fazer login e interagir na Comunidade :)