Valor nulo em campo data (Delphi)
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!
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
Curtidas 0
Melhor post
Renato Rubinho
13/08/2014
A data zero é 30/12/1899.
Tenta na trigger:
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
GOSTEI 2
Mais Respostas
Alessandro Folk
08/08/2014
Coloca seu código aqui pra gente analisar melhor!
GOSTEI 0
Marcos Roberto
08/08/2014
Quero apertar um botão e limpar o valor da data.
procedure TFormCadSocios.Button1Click(Sender: TObject);
begin
Database.TableSoc_SociosDATA_FILIACAO.Clear;
end;
procedure TFormCadSocios.Button1Click(Sender: TObject);
begin
Database.TableSoc_SociosDATA_FILIACAO.Clear;
end;
GOSTEI 0
Alessandro Folk
08/08/2014
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...
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;
GOSTEI 0
Marcos Roberto
08/08/2014
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??
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??
GOSTEI 0
Renato Rubinho
08/08/2014
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.
Abraççç,
Renato
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
GOSTEI 0
Marcos Roberto
08/08/2014
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.
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.
GOSTEI 0
Marcos Roberto
08/08/2014
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.
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.
GOSTEI 0
Renato Rubinho
08/08/2014
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:
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;
GOSTEI 0
Marcos Roberto
08/08/2014
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??
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??
GOSTEI 0
Renato Rubinho
08/08/2014
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
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
GOSTEI 0
Marcos Roberto
08/08/2014
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?? :)
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?? :)
GOSTEI 0
Gabriel Silva
08/08/2014
procedure TFormCadSocios.Button1Click(Sender: TObject);
begin
Database.TableSoc_SociosDATA_FILIACAO.datatype:= ftDate;
Database.TableSoc_SociosDATA_FILIACAO.Value := null;
end;
begin
Database.TableSoc_SociosDATA_FILIACAO.datatype:= ftDate;
Database.TableSoc_SociosDATA_FILIACAO.Value := null;
end;
GOSTEI 0
Steve Narancic
08/08/2014
Tenta da maneira que o gabriel falou que da certo!
GOSTEI 0
Marcos Roberto
08/08/2014
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.
O componente é o IBDATASET.
GOSTEI 0
Renato Rubinho
08/08/2014
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
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
GOSTEI 0
Marcos Roberto
08/08/2014
Então eu testei os dois comandos mas tbm não da nada nem retorna erro.
E como Debugo??
Abraço.
E como Debugo??
Abraço.
GOSTEI 0
Renato Rubinho
08/08/2014
Ponha um ponto de parada (F5) na linha:
Database.TableSoc_SociosDATA_FILIACAO.Clear;
Quando estiver em execução, ao parar nessa linha, pressione F7 para ver se entra nas funções da classe.
Última chance, rsrs:
Database.TableSoc_SociosDATA_FILIACAO.SetData(nil);
Se não funcionar, seta como zero quando for nulo e, nos comandos enviados ao banco, grava como nulo quando o valor for zero.
Abraççç
Database.TableSoc_SociosDATA_FILIACAO.Clear;
Quando estiver em execução, ao parar nessa linha, pressione F7 para ver se entra nas funções da classe.
Última chance, rsrs:
Database.TableSoc_SociosDATA_FILIACAO.SetData(nil);
Se não funcionar, seta como zero quando for nulo e, nos comandos enviados ao banco, grava como nulo quando o valor for zero.
Abraççç
GOSTEI 0
Marcos Saffran
08/08/2014
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.
O componente é o IBDATASET.
Bom dia Marcos,
verifique a propriedade "Read Only" da tabela e do campo, que deve estar como false.
GOSTEI 0
Marcos Roberto
08/08/2014
To osso aqui viu Renato! rsrsrs
você sugeriu em fazer uma trigger né??
Então eu atribuo zero para o campo data, o que faz com que ele fique com a data de 30/12/1899, até ai blza... mas quando vou salvar ele me retorna esse erro:
conversion error from string "0" At trigger 'ZERAR_DATA' line:6, col:3
Criei minha trigger assim. (Será que fiz káka:??)
create trigger zerar_data for soc_socios
before insert or update
as
begin
if (new.DATA_FILIACAO = 0) then
new.DATA_FILIACAO = null;
end
Abraço!
você sugeriu em fazer uma trigger né??
Então eu atribuo zero para o campo data, o que faz com que ele fique com a data de 30/12/1899, até ai blza... mas quando vou salvar ele me retorna esse erro:
conversion error from string "0" At trigger 'ZERAR_DATA' line:6, col:3
Criei minha trigger assim. (Será que fiz káka:??)
create trigger zerar_data for soc_socios
before insert or update
as
begin
if (new.DATA_FILIACAO = 0) then
new.DATA_FILIACAO = null;
end
Abraço!
GOSTEI 0
Marcos Roberto
08/08/2014
Marcos Alfredo,
não existe a propriedade "Read Only" do componente IBDataSet , essa propriedade só aparece quando clico no campo, ai sim esta lá, e ela esta como False.
Teria que ter a propriedade "Read Only" no componente IBDataSet???
Abraço.
não existe a propriedade "Read Only" do componente IBDataSet , essa propriedade só aparece quando clico no campo, ai sim esta lá, e ela esta como False.
Teria que ter a propriedade "Read Only" no componente IBDataSet???
Abraço.
GOSTEI 0
Marcos Roberto
08/08/2014
E ae Renato!
cara deu certo com a trigger... ueepaaa :)
Te agradeço de verdade, você tentou me ajudar mesmo... muito agradecido.
Cara se você me permitir tenho algumas duvidas que surgiram recorrente a este problema do tópico, e como você foi um cara prestativo e a pessoa que mais me deu alternativas , então sua opinião para mim é muito importante!! (se vc puder responder eu agradeço.)
Só vou terminar esse projeto que estou fazendo e pretendo mudar para outra versão do Delphi, você me sugeriria qual?
Você usa qual versão?
Fiz alguns testes com algumas versões e depois de instalar o Delphi mudou o posicionamento dos menus das janelas do Windows para a esquerda, tipo assim:
[img]http://arquivo.devmedia.com.br/forum/imagem/362394-20140814-160248.jpg[/img]
Isso ocorreu com você?
Renato te agradeço mais uma vez!
um grande Abraço.
cara deu certo com a trigger... ueepaaa :)
Te agradeço de verdade, você tentou me ajudar mesmo... muito agradecido.
Cara se você me permitir tenho algumas duvidas que surgiram recorrente a este problema do tópico, e como você foi um cara prestativo e a pessoa que mais me deu alternativas , então sua opinião para mim é muito importante!! (se vc puder responder eu agradeço.)
Só vou terminar esse projeto que estou fazendo e pretendo mudar para outra versão do Delphi, você me sugeriria qual?
Você usa qual versão?
Fiz alguns testes com algumas versões e depois de instalar o Delphi mudou o posicionamento dos menus das janelas do Windows para a esquerda, tipo assim:
[img]http://arquivo.devmedia.com.br/forum/imagem/362394-20140814-160248.jpg[/img]
Isso ocorreu com você?
Renato te agradeço mais uma vez!
um grande Abraço.
GOSTEI 0
Renato Rubinho
08/08/2014
Faz pouquíssimo tempo que passei a participar do fórum. Já aprendi muito caçando soluções na net e acho justo compartilhar também.
Sua instalação deve ter mudado algum registro do windows. Olha esse link que achei: DevMedia
Tenta gerar um projetinho com isso e veja se consegue inverter.
Pesquise por MFT_RIGHTJUSTIFY e MFT_LEFTJUSTIFY na net e ve se descobre como corrigir no windows.
Eu uso atualmente o Delphi 7. Já usei muito o 5 e tenho um projetinho no XE.
Sinceramente não sei quais os recursos e evolução das novas versões. Veja se já não existe algum tópico sobre isso que alguém que conheça as novas versões poderá te sugerir algo melhor que eu.
Abraççç,
Renato
Sua instalação deve ter mudado algum registro do windows. Olha esse link que achei: DevMedia
Tenta gerar um projetinho com isso e veja se consegue inverter.
Pesquise por MFT_RIGHTJUSTIFY e MFT_LEFTJUSTIFY na net e ve se descobre como corrigir no windows.
Eu uso atualmente o Delphi 7. Já usei muito o 5 e tenho um projetinho no XE.
Sinceramente não sei quais os recursos e evolução das novas versões. Veja se já não existe algum tópico sobre isso que alguém que conheça as novas versões poderá te sugerir algo melhor que eu.
Abraççç,
Renato
GOSTEI 0
Marcos Roberto
08/08/2014
Olá Renato!
Cara desculpa pela demora em responder pois estava viajando.
Deu certo sua dica para arrumar a direção do menu...
Simplesmente muito obrigado!
um grande abraço.
Cara desculpa pela demora em responder pois estava viajando.
Deu certo sua dica para arrumar a direção do menu...
Simplesmente muito obrigado!
um grande abraço.
GOSTEI 0
Rogerio Bras
08/08/2014
A data zero é 30/12/1899.
Tenta na trigger:
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
Nota 10. Funcionou 100% aqui comigo.
GOSTEI 0