Invertendo datas...???

Delphi

04/04/2005

Boa noite gostaria de saber se alguem tem uma função que eu possa usar para inverter uma data.

de: dd/mm/aaaa 00:00:00

para: aaaa-mm-dd 00:00:00

para poder fazer uma consulta numa tabela do MySQL ...

tipo, o Delphi tem alguma função de substring que eu possa usar??

Desde já muito obrigado!

Raimundo Farias


Raimundo_farias

Raimundo_farias

Curtidas 0

Respostas

Maicongabriel

Maicongabriel

04/04/2005

Utilize a função [b:e3b3cb709e]FormatDateTime()[/b:e3b3cb709e]. Você deve passar a mascara de formatação e o valor para o campo data. Ela retorna uma string.

Exemplo:
var
  data : TDateTime;
  sDt  : String;
begin
  data := Now;
  sDt  := FormatDateTime(´yyyy-mm-dd hh:nn:ss´, data);
end;



GOSTEI 0
Raimundo_farias

Raimundo_farias

04/04/2005

Muito Obrigado!


GOSTEI 0
Raimundo_farias

Raimundo_farias

04/04/2005

meu problema se agravou...

tenho dois campos de mascara para receber um intervalo de datas tipo:

DataInicial.Text e DataFinal.Text

e quero fazer uma busca com esse intervalo.. tambem não sei se a SQL está correta mais eu to fazendo assim e ñ retorna nada...

 with dmobjSimpi.BuscaUser do begin
             if Active then Close;
             SQL.Clear;
             SQL.Add(´SELECT usuarios.nome, usuarios.id, acessos.id_user, acessos.data, acessos.origem´);
             SQL.Add(´ FROM usuarios, acessos WHERE acessos.data BETWEEN (:dataIni) AND (:dataFim) AND usuarios.id = acessos.id_user´);
             SQL.Add(´ ORDER BY acessos.data DESC´);
             Parameters[0].Name := ´dataIni´;
             Parameters[0].Value := StrToDateTime(DataInicial.Text);
             Parameters[0].DataType := ftDateTime;
             Parameters[1].Name := ´dataFim´;
             Parameters[1].Value := StrToDateTime(DataFinal.Text);
             Parameters[1].DataType := ftDateTime;
             Open;
             First;


tirando a SQL que eu não sei se é o problema. Eu acho q deve ser a converção de tipos pois na minha tabela o campo é DateTime e o Edit da mascara só fornece a data e eu concateno assim:

 DataIni := DataInicial.Text + ´ 00:00:00´
 DataFim := DataFinal.Text + ´ 23:59:59´


Espero que alguem possa me ajudar e que tenha sido claro em minha dúvida!

Obrigado!


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

04/04/2005

Colega,

Quando for manipular DATAS dê preferência ao DateTimerPicker da aba Win32 ao invés de Edits ou MaskEdits.
Se estiver usando parâmetros, não é necessário fazer formatação. Exemplo:

Qry.Close;
Qry.ParamaByNames(´DataInicial´).AsDateTime := DateTimePicker1.DateTime;
Qry.Open;


No próprio componente há uma propriedade (time) para ´Setar´ a hora. Portanto, no objeto para data iniciail, atribua o valor ´00:00:00´ é para o objeto para a data final, atribua ´23:59:39´.


GOSTEI 0
Raimundo_farias

Raimundo_farias

04/04/2005

Ta funcionando ja só que ainda tem um problema no SQL....

a clausula BETWEEN busca em um intervalo aberto né??? tipo:

... WHERE acessos.data BETWEEN (:inicial) AND (:final)

desse jeito se eu informar 04/04/2005 e 04/04/2005 ou 03/04/2005 e 04/04/2005 ... quer dizer so os acessos de hoje ele não retorna nada... se eu informar 04/04/2005 e 05/04/2005 funciona.

tem como eu mudar isso???


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

04/04/2005

Colega,

Você alterou os valores da propriedade Time conforme citei anteriormente? Pode colocar um fragmento do código que você está utilizando agora?


GOSTEI 0
Raimundo_farias

Raimundo_farias

04/04/2005

cara ta assim...

           with dmobjSimpi.BuscaUser do begin
             if Active then Close;
             SQL.Clear;
             SQL.Add(´SELECT usuarios.nome, usuarios.id, acessos.id_user, acessos.data, acessos.saida, acessos.origem´);
             SQL.Add(´ FROM usuarios, acessos WHERE acessos.id_user = usuarios.id AND acessos.data BETWEEN :dataIni AND :dataFim´);
             SQL.Add(´ ORDER BY acessos.data DESC´);
             Parameters[0].Name := ´dataIni´;
             Parameters[0].Value := inicial.DateTime;
             Parameters[0].DataType := ftDateTime;
             Parameters[1].Name := ´dataFim´;
             Parameters[1].Value := final.DateTime;
             Parameters[1].DataType := ftDateTime;
             Open;
             First;
             if not Eof then
             begin
                while not Eof do
                begin
                    ListaHistorico.Cells[0,row] := Fields.Fields[0].Value;
                    ListaHistorico.Cells[1,row] := Fields.Fields[3].Value;
                    ListaHistorico.Cells[2,row] := Fields.Fields[4].Value;
                    ListaHistorico.Cells[3,row] := Fields.Fields[5].Value;
                    ListaHistorico.RowCount := ListaHistorico.RowCount + 1;
                    Inc(row);
                    Next;
                end;
                ListaHistorico.RowCount := ListaHistorico.RowCount - 1;
             end;
           end;


Acho que o problema ta na SQL.... se eu passar tanto a inicial como a final igual a 04/04/2005 não retorna nada...


GOSTEI 0
Raimundo_farias

Raimundo_farias

04/04/2005

do outro jeito q eu fiz tambem funciona...

fica identico... mas dá o mesmo problema...


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

04/04/2005

Colega,

Pressione Alt - F12 e copie o conteúdo dos objetos DateTimePicker apenas e coloque aqui para uma análise das propriedades.


GOSTEI 0
POSTAR