AllNet Postado Fevereiro 6, 2009 Denunciar Share Postado Fevereiro 6, 2009 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-dda 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Polyanna Wenze Postado Fevereiro 6, 2009 Denunciar Share Postado Fevereiro 6, 2009 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 AllNet Postado Fevereiro 6, 2009 Autor Denunciar Share Postado Fevereiro 6, 2009 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.? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Fevereiro 6, 2009 Denunciar Share Postado Fevereiro 6, 2009 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õesou 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Polyanna Wenze Postado Fevereiro 6, 2009 Denunciar Share Postado Fevereiro 6, 2009 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... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Fevereiro 6, 2009 Denunciar Share Postado Fevereiro 6, 2009 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 AllNet Postado Fevereiro 10, 2009 Autor Denunciar Share Postado Fevereiro 10, 2009 è isso mesmo que precisava, usei o exemplo do Micheus.vlw pessoal. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
AllNet
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
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.