Valor nulo em campo data (Delphi)

08/08/2014

0

Olé pessoal!

Estou precisando de uma ajuda.

Eu quero atribuir valor nulo ao campo do tipo data pelo Delphi.

Estou usando Firebird como banco de dados e o componente IBDataSet e já tentei o comando Database.TableDATA.clear; e não deu certo.

Agradeço quem puder me ajudar!
Marcos Roberto

Marcos Roberto

Responder

Post mais votado

13/08/2014

A data zero é 30/12/1899.
Tenta na trigger:

create trigger zerar_data for soc_socios
before insert or update
as
begin
  if (new.DATA_FILIACAO = '30.12.1899') then
  new.DATA_FILIACAO = null;
end

Renato Rubinho

Renato Rubinho
Responder

Mais Posts

08/08/2014

Alessandro Folk

Coloca seu código aqui pra gente analisar melhor!
Responder

08/08/2014

Marcos Roberto

Quero apertar um botão e limpar o valor da data.


procedure TFormCadSocios.Button1Click(Sender: TObject);
begin
Database.TableSoc_SociosDATA_FILIACAO.Clear;
end;
Responder

08/08/2014

Alessandro Folk

Não sei bem como está montado sua tela...
Mas tente fazer o seguinte teste:

1 - Colocar o seu DataSet em Edição antes de limpar? e depois gravar...
procedure TFormCadSocios.Button1Click(Sender: TObject);
begin
   if TableSoc_Socios.State = DsBrowse then
      TableSoc_Socios.Edit;
   TableSoc_SociosDATA_FILIACAO.Clear;
   TableSoc_Socios.Post;
end;
Responder

08/08/2014

Marcos Roberto

sim , ele já está em modo de edição antes. (O botão de limpar faz parte de uma aba que só aparece se estiver em modo de edição.)

Outro detalhe eu tentei usar o comando que vc sugeriu a cima, o if TableSoc_Socios.State = DsBrowse then e deu o seguinte erro:

[DCC Error] UCadSocios.pas(497): E2010 Incompatible types: 'TIBDataSet' and 'TDataSetState'


Alguma dica??
Responder

09/08/2014

Renato Rubinho

Buenos,

O "Clear" deveria funcionar. Veja se a propriedade "Required" do campo TableSoc_SociosDATA_FILIACAO na TableSoc_Socios está como True. Para aceitar null, tem que estar como False.

Tenta também da seguinte forma para passar null.

procedure TFormCadSocios.Button1Click(Sender: TObject);
begin
  Database.TableSoc_SociosDATA_FILIACAO.Value := null;
end;


Abraççç,
Renato
Responder

09/08/2014

Marcos Roberto

Olá Renato!

a propriedade "Required" do campo TableSoc_SociosDATA_FILIACAO está false sim já tentei true e tbm não vai.

Também tentei do seu jeito: Database.TableSoc_SociosDATA_FILIACAO.Value := null; e me retorna o seguinte erro. Could not convert variant of type (Null) into type (Double).


Sabe me dizer o que pode ser??

Grato.
Responder

09/08/2014

Marcos Roberto

Olá Renato!

a propriedade "Required" do campo TableSoc_SociosDATA_FILIACAO está false sim já tentei true e tbm não vai.

Também tentei do seu jeito: Database.TableSoc_SociosDATA_FILIACAO.Value := null; e me retorna o seguinte erro. Could not convert variant of type (Null) into type (Double).


Sabe me dizer o que pode ser??

Grato.
Responder

10/08/2014

Renato Rubinho

Qual sua versão de Delphi e qual banco de dados está usando ?
Pela mensagem de erro que você postou, o tipo de campo não está como Date ou Timestamp. Está acusando do tipo Double.
Confirma qual o DataType no campo TableSoc_SociosDATA_FILIACAO.
Se o tipo de campo estiver correto, deveria funcionar tanto o clear quanto o value=null.
Tenta:

TableSoc_SociosDATA_FILIACAO.AsSQLTimeStamp := null;
ou
TableSoc_SociosDATA_FILIACAO.AsDateTime := null;
ou
TableSoc_SociosDATA_FILIACAO.AsVariant := null;
Responder

10/08/2014

Marcos Roberto

Estou usando Delphi 2010 e o Firebird 2.5 como banco de dados e o componente IBDataSet.

E o tipo do meu campo e do tipo DATE mesmo.

Renato eu testei no Delphi XE6 e o camando clear e o value=null funcionou. Acredito que este problema deve ser com o Delphi 2010!!


Porque será este problema??
Responder

11/08/2014

Renato Rubinho

Também acho que é bug... Não tenho o 2010 para validar.

Você tentou colocando AsSQLTimeStamp, AsDateTime ou AsVariant atribuir null?
Se não funcionar também, tenta também "AsString = null". Por que? Aí já é POG... rsrs

Abraççç,
Renato
Responder

11/08/2014

Marcos Roberto

Coloquei sim Renato, mas ou não retorna nenhum erro mas tbm não limpa a data ou da aquele erro de como se o campo não fosse do tipo data.


Cara estou vendo se consigo instalar meus companentes no Delphi XE5, mas já tive outro problema: depois que instalo o Delphi ele mudou a posição dos menus de todo Windows.

Se liga só!
ele fica pra esquerda

[img]http://arquivo.devmedia.com.br/forum/imagem/362394-20140811-201357.jpg[/img]

Enquanto que o normal é ficar para a direita.
[img]http://arquivo.devmedia.com.br/forum/imagem/362394-20140811-201620.jpg[/img]

Pode me ajudar?? :)
Responder

11/08/2014

Gabriel Silva

procedure TFormCadSocios.Button1Click(Sender: TObject);
begin
Database.TableSoc_SociosDATA_FILIACAO.datatype:= ftDate;
Database.TableSoc_SociosDATA_FILIACAO.Value := null;
end;
Responder

11/08/2014

Steve Narancic

Tenta da maneira que o gabriel falou que da certo!
Responder

11/08/2014

Marcos Roberto

Tentei do seu jeito Gabriel mas retorna o seguinte erro: [DCC Error] UCadSocios.pas(594): E2129 Cannot assign to a read-only property.

O componente é o IBDATASET.
Responder

12/08/2014

Renato Rubinho

Que novela... rsrs

E debugando ? Tentou limpar o valor ?

Mais dois testes:

TField(Database.TableSoc_SociosDATA_FILIACAO).Value := null;

ou

TField(Database.TableSoc_SociosDATA_FILIACAO).Clear;

Abraççç,
Renato
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar