Locate campo data ClientDataSet

Delphi

22/01/2014

Olá pessoal.
Estou com o seguinte cenário.
Tenho uma tabela em SQL Server com um campo "SaidaEntrada Datetime".
Utilizando o delphi 2010, conexao ao banco com ADOConnection e para buscar os registros o ADOQuery + DataSetProvider + ClientDataSet + DataSource os quais jogo em um Grid.
Muito bem, ai vem o meu problema. Quando uso o ClientDataSet.Locate('SaidaEntrada','10/10/2013',[]), o ponteiro não vai para a data solicitada.
Se faço uma pesquisa com outro campo qualquer, tipo Varchar ou Integer da tudo certo.
Fico no aguar de uma luz dos colegas.
Thiago Portes

Thiago Portes

Curtidas 0

Respostas

Fabio Cardoso

Fabio Cardoso

22/01/2014

Amigo nao sei se o sql server e assim, mas o firebird voce tem que pesquisar de duas formas
1 - '01.01.2013' para data '01/01/2013'
2 - '2013/01/01 para data '01/01/2013'


tenta ver como esta registrada a data no teu banco e insira a data no teu locate do jeito que esta formatado no banco
GOSTEI 0
Nathan Boneti

Nathan Boneti

22/01/2014

(yyyy-mm-dd) padrão SQL SERVER

essa data está vindo de algum componente Date? ou já é pré definida?
GOSTEI 0
Thiago Portes

Thiago Portes

22/01/2014

Amigo nao sei se o sql server e assim, mas o firebird voce tem que pesquisar de duas formas
1 - '01.01.2013' para data '01/01/2013'
2 - '2013/01/01 para data '01/01/2013'


tenta ver como esta registrada a data no teu banco e insira a data no teu locate do jeito que esta formatado no banco


Obrigado pelo retorno.
Fiz os testes como mostrado, mas não resolveu. O engraçado é que se eu fizer o Locate na ADOQuery, localiza certinho, e quando faço pelo clientdataset,
que por sua vez está ligado ao DataSetProvider que está ligado no ADOQuery, não posiciona o ponteiro sobre o registro pesquisado, mas me traz o return como true (localizado).

Aguardando uma ajuda.
GOSTEI 0
Thiago Portes

Thiago Portes

22/01/2014

(yyyy-mm-dd) padrão SQL SERVER

essa data está vindo de algum componente Date? ou já é pré definida?


Não. Está vindo de um Edit.Text.
Exemplo que estou utilizado como teste.

Edit2.Text := '10/10/2013' // Já tentei '2013-10-10' - '10-10-2013' - '10.10.2013'
if not cds1.Locate('SaidaEntrada',Edit2.Text,[]) then
showmessage('Nao localizou')
else
showmessage('LOCALIZADO ');

Já estou acostumado a fazer este procedimento que não tem erro, é muito eficiente mas com os componentes conexão da paleta InterBase quando utilizando o banco com o mesmo.
GOSTEI 0
Nathan Boneti

Nathan Boneti

22/01/2014

Não. Está vindo de um Edit.Text.
Exemplo que estou utilizado como teste.

Edit2.Text := '10/10/2013' // Já tentei '2013-10-10' - '10-10-2013' - '10.10.2013'
if not cds1.Locate('SaidaEntrada',Edit2.Text,[]) then
showmessage('Nao localizou')
else
showmessage('LOCALIZADO ');

Já estou acostumado a fazer este procedimento que não tem erro, é muito eficiente mas com os componentes conexão da paleta InterBase quando utilizando o banco com o mesmo.


O código está certo, no edit tem que estar dessa forma:dd/mm/yyyy
GOSTEI 0
Thiago Portes

Thiago Portes

22/01/2014

É isso ai meus caros. Fiz todas as tentativas, outras pesquisas mas não consegui fazer a o Locate funcionar como é para funcionar utilizando a ligação da ADO com o provider e clientdataset.
Se tiver algum outro colega que utiliza do mesmo cenário e puder me ajudar, ainda estarei aguardando.
Se eu conseguir matar o problema, postarei aqui.
Abraços.
GOSTEI 0
Gustavo Pinheiro

Gustavo Pinheiro

22/01/2014

Acho que resolvi o problema, pelo no meu deu certo, faça o seguinte:

dm1.ztable.Locate('campo da tabela',(copy(maskedit1.text,7,4)+'-'+copy(maskedit1ext,4,2)+'-'+copy(maskedit1.text,1,2)),[lopartialkey]);

Transformei a data digitada no maskedit para o formato aaaa-mm-dd, e usei o traço como separador.

Espero que tenha ajudado...
GOSTEI 0
POSTAR