Fórum mask Edit (problemas com literal caracteres) #327870

22/08/2006

0

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´

1
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
1
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

Responder

Posts

22/08/2006

Jonas_giron

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;


Responder

Gostei + 0

22/08/2006

Mahdak

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:


Responder

Gostei + 0

22/08/2006

Marco Salles

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

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


boa sorte.


Responder

Gostei + 0

22/08/2006

Mahdak

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....
1
2
3
4
5
6
7
8
9
// 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:

1
2
3
4
5
6
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!


Responder

Gostei + 0

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

Aceitar