Problema com Listagem por Data

18/02/2013

0

Bom pessoal estou com um pequeno problema, quando vou fazer a listagem por data me aparece um erro [0x0005]: Operação Not Supported.


procedure TF_ListaChqData.btn_PesqClick(Sender: TObject);
// COMANDO PARA SELECIONAR SOMENTE POR DATA //

var Inicio: String;
Final: String;
begin
If DateTimePicker2.Date < DateTimePicker1.Date Then
begin
ShowMessage('Intervalo de datas inválido, a data inicial é maior que a data final!');
DateTimePicker2.Date := DateTimePicker1.Date;
end
else
begin
Inicio := DateToStr(DateTimePicker1.Date);
Final := DateToStr(DateTimePicker2.Date);
DM.Q_PesqChq.Close;
DM.Q_PesqChq.SQL.Clear;
DM.Q_PesqChq.SQL.Add('SELECT CODIGO, DATA_EMISSAO, DATA_VENCIMENTO, NUMCHEQUE, TITULAR, APELIDO_TITULAR, TEL_TITULAR, BANCO, AGENCIA, CONTA, VALOR, SITUACAO_CHQ, SACADOR, TEL_SACADOR, OBS FROM CHEQUES');
DM.Q_PesqChq.SQL.Add('WHERE DATA_VENCIMENTO >=:pInicio and DATA_VENCIMENTO<=:pFinal ORDER BY DATA_VENCIMENTO');
DM.Q_PesqChq.ParamByName('pInicio').Value := StrToDate(Inicio);
DM.Q_PesqChq.ParamByName('pFinal').value := StrToDate(Final);
// DM.Q_PesqChq.Prepared;//
DM.Q_PesqChq.Open;
DM.CDS_PesqChq.Open;
Label2.Caption := 'Total de Registros Localizados: ' + IntToStr(DM.Q_PesqChq.RecordCount)

end;
end;
Francielio Medeiros

Francielio Medeiros

Responder

Posts

18/02/2013

Rafael Cunha

Realizei uma pequena alteração no seu código abaixo, veja se resolve seu problema.

procedure TF_ListaChqData.btn_PesqClick(Sender: TObject);
begin
If DateTimePicker2.Date < DateTimePicker1.Date Then
begin
ShowMessage('Intervalo de datas inválido, a data inicial é maior que a data final!');
DateTimePicker2.Date := DateTimePicker1.Date;
end
else
begin
DM.Q_PesqChq.Close;
DM.Q_PesqChq.SQL.Clear;
DM.Q_PesqChq.SQL.Add('SELECT CODIGO, DATA_EMISSAO, DATA_VENCIMENTO, NUMCHEQUE, TITULAR, APELIDO_TITULAR, TEL_TITULAR, BANCO, AGENCIA, CONTA, VALOR, SITUACAO_CHQ, SACADOR, TEL_SACADOR, OBS FROM CHEQUES ');
DM.Q_PesqChq.SQL.Add('WHERE DATA_VENCIMENTO between :dtInicial and :dtFinal ORDER BY DATA_VENCIMENTO');
DM.Q_PesqChq.ParamByName('pInicio').Value := DateTimePicker1.Date;
DM.Q_PesqChq.ParamByName('pFinal').value := DateTimePicker2.Date;
// DM.Q_PesqChq.Prepared;//
DM.Q_PesqChq.Open;
DM.CDS_PesqChq.Open;
Label2.Caption := 'Total de Registros Localizados: ' + IntToStr(DM.Q_PesqChq.RecordCount)

end;
end;
Responder

18/02/2013

Joel Rodrigues

Em que linha ocorre o erro?
Por que você não passa para o parâmetro direto o valor dos DatePickers?
Responder

18/02/2013

Francielio Medeiros

Apresentou o seguinte erro:
Q_PesqChq:Parameter 'pInicial' Not Found.
Responder

18/02/2013

Joel Rodrigues

É que no código do amigo acima, ele nomeou os parâmetros como dtInicial e dtFinal. Depois tentou acessar os parâmetros usando pInicio e pFinal.
Basta usar os mesmos nomes.
Responder

18/02/2013

Francielio Medeiros

Outro erro foi apresentado:
Conversion error from string "41319.87095906250"
Responder

18/02/2013

Rafael Cunha

Passa os valores direto do DateTimePicker ao invés de converte para string e depois converter para Date novamente.
Responder

18/02/2013

Joel Rodrigues

Exato. Foi o que eu sugeri e o que o Rafael fez no exemplo dele. Passe os valores direto dos DatePickers para os parâmetros.
Responder

18/02/2013

Francielio Medeiros

Pessoal sou iniciante como assim nao entendi vocês podem me ajudar ?
como que posso fazer isso?
Responder

18/02/2013

Rafael Cunha

No exemplo que mandei acima ele já faz do jeito que estamos falando.

DM.Q_PesqChq.ParamByName('pInicio').Value := DateTimePicker1.Date;
DM.Q_PesqChq.ParamByName('pFinal').value := DateTimePicker2.Date;


Responder

18/02/2013

Perivaldo Martins

No exemplo que mandei acima ele já faz do jeito que estamos falando.

DM.Q_PesqChq.ParamByName('pInicio').Value := DateTimePicker1.Date;
DM.Q_PesqChq.ParamByName('pFinal').value := DateTimePicker2.Date;




Eu também concordo, ele poderia também fazer assim.
DM.Q_PesqChq.ParamByName('pInicio').asDate := DateTimePicker1.Date;
DM.Q_PesqChq.ParamByName('pFinal').asDate := DateTimePicker2.Date;



Boa sorte e bons códigos!
Responder

18/02/2013

Joel Rodrigues

Só explicando o que estamos falando:
Você primeiramente converteu as datas para string:
Inicio := DateToStr(DateTimePicker1.Date);
Final := DateToStr(DateTimePicker2.Date);

depois converteu de string para data:
DM.Q_PesqChq.ParamByName('pInicio').Value := StrToDate(Inicio);
DM.Q_PesqChq.ParamByName('pFinal').value := StrToDate(Final);


O que nós estamos dizendo é pare você passar os valores para os parâmetros diretamente dos DatePickers, conforme foi sugerido acima:
DM.Q_PesqChq.ParamByName('pInicio').asDate := DateTimePicker1.Date;
DM.Q_PesqChq.ParamByName('pFinal').asDate := DateTimePicker2.Date;


Abraço.
Responder

18/02/2013

Francielio Medeiros

Gente Muito obrigado a todos pela ajuda mais ainda continua com erro:

#Código
procedure TF_ListaChqData.btn_PesqClick(Sender: TObject);
begin
If DateTimePicker2.Date < DateTimePicker1.Date Then
begin
ShowMessage('Intervalo de datas inválido, a data inicial é maior que a data final!');
DateTimePicker2.Date := DateTimePicker1.Date;
end
else
begin
DM.Q_PesqChq.Close;
DM.Q_PesqChq.SQL.Clear;
DM.Q_PesqChq.SQL.Add('SELECT CODIGO, DATA_EMISSAO, DATA_VENCIMENTO, NUMCHEQUE, TITULAR, APELIDO_TITULAR, TEL_TITULAR, BANCO, AGENCIA, CONTA, VALOR, SITUACAO_CHQ, SACADOR, TEL_SACADOR, OBS FROM CHEQUES ');
DM.Q_PesqChq.SQL.Add('WHERE DATA_VENCIMENTO between :dtInicial and :dtFinal ORDER BY DATA_VENCIMENTO');
DM.Q_PesqChq.ParamByName('dtInicial').asDate := DateTimePicker1.Date;
DM.Q_PesqChq.ParamByName('dtFinal').asDate := DateTimePicker2.Date;
DM.Q_PesqChq.Prepared := True;
DM.Q_PesqChq.Open;
DM.CDS_PesqChq.Open;
Label2.Caption := 'Total de Registros Localizados: ' + IntToStr(DM.Q_PesqChq.RecordCount)

end;
end;

Responder

18/02/2013

Francielio Medeiros

o Erro Operation not suported.



esqueci de mencionar eu estou usando: SQLConnection1, TsqlQuery, TDataSetProvider, TclientDataset.
Responder

18/02/2013

Rafael Cunha

Quando você está debugando o erro ocorre em qual linha.
Responder

18/02/2013

Rafael Cunha

Como a sua Query está ligada em um ClientDataSet apenas de um open nele, o código ficaria assim:

procedure TF_ListaChqData.btn_PesqClick(Sender: TObject);
begin
If DateTimePicker2.Date < DateTimePicker1.Date Then
begin
ShowMessage('Intervalo de datas inválido, a data inicial é maior que a data final!');
DateTimePicker2.Date := DateTimePicker1.Date;
end
else
begin
DM.Q_PesqChq.Close;
DM.Q_PesqChq.SQL.Clear;
DM.Q_PesqChq.SQL.Add('SELECT CODIGO, DATA_EMISSAO, DATA_VENCIMENTO, NUMCHEQUE, TITULAR, APELIDO_TITULAR, TEL_TITULAR, BANCO, AGENCIA, CONTA, VALOR, SITUACAO_CHQ, SACADOR, TEL_SACADOR, OBS FROM CHEQUES ');
DM.Q_PesqChq.SQL.Add('WHERE DATA_VENCIMENTO between :dtInicial and :dtFinal ORDER BY DATA_VENCIMENTO');
DM.Q_PesqChq.ParamByName('dtInicial').Value := DateTimePicker1.Date;
DM.Q_PesqChq.ParamByName('dtFinal').value := DateTimePicker2.Date;
// DM.Q_PesqChq.Prepared;//
//DM.Q_PesqChq.Open;
DM.CDS_PesqChq.Open;
Label2.Caption := 'Total de Registros Localizados: ' + IntToStr(DM.CDS_PesqChq.RecordCount)

end;
end;


Espero que ajude.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar