mask Edit (problemas com literal caracteres)

Delphi

22/08/2006

seguinte... tenho um campo do tipo DATE na tabela... firebird 1.5.3

pra salvar nela eu uso um mask edit salvando os ´literais caracteres´

DM.Tbl_Eventos_ENASCIMENTO.AsDateTime   := StrToDateTime(Eventos_E.Nascimento.Text);


assim funciona beleza. só que eu nao gostaria de salvar os ´literais caracteres´, ou seja nao gostaria que fosse com o ´ / / ´ mas sim só os numeros...

ja sei que a formatação de data do firebird é xx.xx.xxx

se eu setar pra nao salvar os ´literais caracteres´ o sistema acusa o erro ´22082006´ is not a valid date time, quando eu dou o post na tabela

e se eu deixar o campo vazio ele da o erro:´´ is not a valid date time

Observações: o referido campo da tabela aceita NULL
NASCIMENTO        DATE,


Eu precisaria que nao salvasse os ´literais caracteres´ e que ele aceitasse efetivamente o valor NULL quando eu nao colocasse data alguma no mask edit

uso o Delphi 7

Alguem poderia me ajudar??

Abração!!


Mahdak

Mahdak

Curtidas 0

Respostas

Jonas_giron

Jonas_giron

22/08/2006

Voce tem que criar um campo Varchar para poder salvar sem os caracteres de data e cria uma função para remover as ´/´ da data, ai vc vai conseguir salvar somente os numeros.

codigo...

function RemoveBarra(Texto:String):String;
begin
Texto := Trim(Texto);
while (Pos(´/´,texto) <> 0) do
Delete(texto,Pos(´/´,texto),01);
Result := Texto;
end;

procedure TForm01.BotaoGravaClick(Sender: TObject);
begin
DM.Tbl_Eventos_ENASCIMENTO.Value := RemoveBarra(Eventos_E.Nascimento.Text);
end;


GOSTEI 0
Mahdak

Mahdak

22/08/2006

sim mas e depois se eu quiser usar o Extract(Day From NASCIMENTO) em um campo varchar???

só to perguntando isso pq ja passei por esse problema e tive que retornar para o campo do tipo DATE....
:cry:


GOSTEI 0
Marco Salles

Marco Salles

22/08/2006

assim funciona beleza. só que eu nao gostaria de salvar os ´literais caracteres´, ou seja nao gostaria que fosse com o ´ / / ´ mas sim só os numeros...


sinceramente , do jeito que ´vai´ , eu acho que é irrelevante . Acho que o importante é do Jeito que se apresenta para o usuário , isto é a sua interface.

ja sei que a formatação de data do firebird é xx.xx.xxx


eu desconhelo esta afirmação...O campo do tipo Tdate se apresenta para mim , salvo alguma formatação extra , da maneira que é imposta pelas as [b:f7f8afb1c7]configuraçoes do Windows[/b:f7f8afb1c7]...

Ate mesmo no IbExpert quando visualizo aparece as Barras /

se eu setar pra nao salvar os ´literais caracteres´ o sistema acusa o erro ´22082006´ is not a valid date time, quando eu dou o post na tabela

Isto ja é um ´problema´ do tipo TdateField .

Eu precisaria que nao salvasse os ´literais caracteres´

eu acho que , mesmo que voce faça alguma [b:f7f8afb1c7]codificação extra[/b:f7f8afb1c7], para isto , na hora de apresentar od dados , vale as configuraçoes regionais... Logo , o formato com esta no Firebird < que é algo interno> não nos devemos nos preocupar

e que ele aceitasse efetivamente o valor NULL quando eu nao colocasse data alguma no mask edit

Voce fazendo um If voce evita esse tipo de erro

if MaskEdit1.text <> ´  /  /    ´ Then //vale somente salvando Literais
DM.Tbl_Eventos_ENASCIMENTO.AsDateTime   := StrToDateTime(Eventos_E.Nascimento.Text);


boa sorte.


GOSTEI 0
Mahdak

Mahdak

22/08/2006

muito obrigado a todos...

primeiro gostaria de dizer que nao gostaria que os literais caracteres fossem salvos unica e exclusivamente pele fato de nao querer que apareçam só barras nos relatórios que nao tem data cadastrada... consegui resolver com a ajuda de um amigo (peplau) e do marcos salles da seguinte forma:

antes de dar o post no formulario....
// evita o problema da data vazia
            if NASCIMENTO.text = ´  /  /    ´ Then
            begin
               // passa batido e nao salva o nascimento
            end
              else
                  begin
                      DM.Tbl_Eventos_ENASCIMENTO.AsDateTime   := StrToDateTime(Eventos_E.Nascimento.Text);
                  end;



validando o relatório:

procedure TRelatEventos_E.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
    if label_nascimento.DataField = ´  /  /    ´ then
    label_nascimento.DataField := ´´;
end;


marcos, me expressei mal sobre a formatação de datas... o formato DATE no firebird tem pontos entre o dia.mes.ano, mas depende das configurações regionais sim... eu só tava me referindo ao ponto....

abração a todos!


GOSTEI 0
POSTAR