Ir para conteúdo
Fórum Script Brasil
  • 0

Datas


AllNet

Pergunta

Olá pessoal, em meu cadastro estou colocando a data, porem a data é colocada pelo servidor com o campo date (PostgreSql).

O formato da data esta assim: aaaa-mm-dd

a questaõ é:

qual a melhor forma para se trabalhar com datas?

Está certo fazer o cadastro e banco colocar a data? ou o delphi tem q colocar a data?

e no caso de uma consulta entre datas??

Obrigado.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

O PostGre salva a data nesse formato que você mencionou (2009-02-06), onde é ao contrário, e '-' ao invés d '/'..

e para você salvar no banco terá que ser nesse formato..

Por exemplo, se você for salvar no banco a data que você pega do DateTimePicker, você terá que 'desmembrar' o dia, mês e ano,

porque no DateTimePicker a data é 06/02/2009.

Ex: converte a data do DateTimePicker para string, pega 1º o ano, dpois o mês e por último o dia, sendo que entre eles você põe o '-'.

data:= Copy(datetostr(DateTimePicker1.Date), 1, 2)+'-'+Copy(datetostr(DateTimePicker1.Date), 4, 2)+'-'+Copy(datetostr(DateTimePicker1.Date), 7, 4);

aí você salva no banco a data em string mesmo:

Ex: Tabela.FieldByName('DATA').asString:=data;

Espero que tenha ajudado.

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0
Olá Polyanna, mais se eu salvar em string depois não vai ser complicado pra mim trabalhar entre datas, ou seja, de tal data a tal data.?
Acho que não foi o que ela quiz dizer.

Ela refereiu-se a string porque usou o método AsString para atribuir um valor ao campo (Field).

aí você salva no banco a data em string mesmo:

Ex: Tabela.FieldByName('DATA').asString:=data;

O que para falar a verdade não é muito interessante já que, considerando o mesmo TDateTimePicker, você poderia fazer:

Ex: Tabela.FieldByName('DATA').asDate := DateTimePicker1.Date; // Direto ao ponto - sem conversões

ou ainda, se estivesse lendo de um TEdit ou TMaskEdit:

Ex: Tabela.FieldByName('DATA').asDate := StrToDate(Edit1.Text);

Ex: Tabela.FieldByName('DATA').asDate := StrToDate(MaskEdit1.Text);

Na prática, você terá que se preocupar com este formato, apenas se for gerar instruções SQL (a string SQL) com a data concatenada. O que não recomendo. Sempre que for necessário, utilize a parametrização pois como sempre digo, você não precisará se preocupar com que formato de data/hora o banco trabalha.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Não vai ter problema não, porque você pode salvar o campo data como string ou como DateTime.. No exemplo que coloquei, eu salvei o field 'data' em string porque eu tive que 'desmontar' o DateTimePicker, e transformá-lo em string, colocando no formato q o PostGre salva (yyyy-mm-dd).

'Trabalhar entre datas' é fazer consulta usando data como filtro??

Bom, quando eu faço uma pesquisa utilizando como parâmetro datas, eu uso DateTimePicker também, onde eu 'desmonto' a propriedade Date do DateTimePicker, ponho numa variável string no formato do PostGre (2009-01-31), porque s você for pesquisar como '31/01/2009' vai dar erro ou não vai retornar nenhum registro, porque você vai passar como parâmetro dd/mm/yyyy ao invés do yyyy-mm-dd..

Exemplo usando 2 DateTimePicker para pesquisar cupons gerados em um período:

DateTimePicker.Date <- seleciono a primeira data (01/01/2009)

DateTimePicker2.Date <- seleciono a última data (31/01/2009)

inicio:= Copy(datetostr(DateTimePicker1.Date), 1, 2)+'-'+Copy(datetostr(DateTimePicker1.Date), 4, 2)+'-'+Copy(datetostr(DateTimePicker1.Date), 7, 4);

fim:= Copy(datetostr(DateTimePicker2.Date), 1, 2)+'-'+Copy(datetostr(DateTimePicker2.Date), 4, 2)+'-'+Copy(datetostr(DateTimePicker2.Date), 7, 4);

Tabela.active:=false;

Tabela.SQL.Clear;

Tabela.SQL.Add('SELECT * FROM CUPONS WHERE DATA BETWEEN :INICIO AND :FIM');

Tabela.ParamByName('INICIO').asString:=inicio;

Tabela.ParamByName('FIM').asString:=fim;

Tabela.active:=true;

Spero tr ajudado...

Link para o comentário
Compartilhar em outros sites

  • 0

Polyanna Wenze, caso seu campo seja do tipo Date (parece ser este o tipo em questão neste tópico), este processo de "desmontagem" não é necessária. Voce pode fazer apenas assim:

Tabela.active:=false;

Tabela.SQL.Clear;

Tabela.SQL.Add('SELECT * FROM CUPONS WHERE DATA BETWEEN :INICIO AND :FIM');

Tabela.ParamByName('INICIO').asDate := DateTimePicker1.Date;

Tabela.ParamByName('FIM').asDate := DateTimePicker2.Date;

Tabela.active:=true;

Mas se o campo no banco for do tipo VARCHAR, ou seja, uma string, ai sim fica ruim trabalhar com a data e por várias razões:

- não consegue usar o beetwen;

- a ordenação por este campo fica incorreta se você não o gravar no formato "yyyy-mm-dd";

- fica difícil de extrair partes da data, já que não dá para usar as funções específicas;

- ....

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...