Fórum Locate campo data ClientDataSet #467628

22/01/2014

0

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

Responder

Posts

22/01/2014

Fabio Cardoso

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
Responder

Gostei + 0

22/01/2014

Nathan Boneti

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

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

Gostei + 0

22/01/2014

Thiago Portes

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.
Responder

Gostei + 0

22/01/2014

Thiago Portes

(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.
Responder

Gostei + 0

22/01/2014

Nathan Boneti

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
Responder

Gostei + 0

23/01/2014

Thiago Portes

É 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.
Responder

Gostei + 0

15/04/2014

Gustavo Pinheiro

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...
Responder

Gostei + 0

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

Aceitar