Ajuda com atualização de dada somente no SQL.
Olá.
A situação é a seguinte.
Tenho:
ID do USUARIO;
Data de Nascimento;
e o campo Idade.
Queria atualizar este campo somente utilizando comandos SQL. Eu forneceria a data atual e ele atualizaria.
Preciso desta data no banco de dados e atualizada.
Obrigado.
A situação é a seguinte.
Tenho:
ID do USUARIO;
Data de Nascimento;
e o campo Idade.
Queria atualizar este campo somente utilizando comandos SQL. Eu forneceria a data atual e ele atualizaria.
Preciso desta data no banco de dados e atualizada.
Obrigado.
Cb
Curtidas 0
Respostas
Cb
19/10/2009
Esqueci de falar. Uso Firebird.
GOSTEI 0
Rweberich
19/10/2009
Ola amigo,
faz o seguinte: capture essa ano da data que esta no banco, carregue em uma variavel, e depois manipule a idade de acordo com o ano corrente;
Pra capturar o ano da data de nascimento vc pode fazer da seguinte forma:
Var
dt: TDateTime;
begin
dt := StrToDate (edtData.Text);
DM.qryUsuario.FieldByName(´DATANASCIMENTO´).AsString := FormatDateTime(´yyyy´, dt);
end;
Abraco.
faz o seguinte: capture essa ano da data que esta no banco, carregue em uma variavel, e depois manipule a idade de acordo com o ano corrente;
Pra capturar o ano da data de nascimento vc pode fazer da seguinte forma:
Var
dt: TDateTime;
begin
dt := StrToDate (edtData.Text);
DM.qryUsuario.FieldByName(´DATANASCIMENTO´).AsString := FormatDateTime(´yyyy´, dt);
end;
Abraco.
GOSTEI 0
Afarias
19/10/2009
|Queria atualizar este campo somente utilizando comandos SQL. Eu
|forneceria a data atual e ele atualizaria.
O campo idade pode ser CALCULADO com base na data atual. Vc pode usar uma UDF ou fazer com comandos suportados pelo FB (dependendo da versão q esteja usando), ex:
SELECT extract(year from current_date)-extract(year from nascimento)-case
when extract(month from current_date)<extract(month from nascimento) or
(extract(month from current_date)=extract(month from nascimento) and
extract(day from current_date)<extract(day from nascimento)) then 0 else 1 end as idade
from sua_tabela
vc pode usar no select ou criar um campo calculado:
alter table minha_tabela add idade computed by ( ...cálculo... );
outra forma mais simples mas apenas aproximada:
select (current_date-data_nasc)/365.25 as idade from sua_tabela
estes são apenas exemplos, existem várias formas de fazer.
T+
|forneceria a data atual e ele atualizaria.
O campo idade pode ser CALCULADO com base na data atual. Vc pode usar uma UDF ou fazer com comandos suportados pelo FB (dependendo da versão q esteja usando), ex:
SELECT extract(year from current_date)-extract(year from nascimento)-case
when extract(month from current_date)<extract(month from nascimento) or
(extract(month from current_date)=extract(month from nascimento) and
extract(day from current_date)<extract(day from nascimento)) then 0 else 1 end as idade
from sua_tabela
vc pode usar no select ou criar um campo calculado:
alter table minha_tabela add idade computed by ( ...cálculo... );
outra forma mais simples mas apenas aproximada:
select (current_date-data_nasc)/365.25 as idade from sua_tabela
estes são apenas exemplos, existem várias formas de fazer.
T+
GOSTEI 0
Cb
19/10/2009
Este primeiro eu tentei, mas estranho que o FB não reconhece como instrução...
Vou tentar as outras formas e posto quando terminar.
Obrigado.
Vou tentar as outras formas e posto quando terminar.
Obrigado.
GOSTEI 0
Afarias
19/10/2009
CASE só funciona no FB 2 e acima (q eu lembre)
T+
T+
GOSTEI 0
Cb
19/10/2009
Tentei o:
Ele mostra a idade mas não salva.
O
attempt to store duplicate value, já existe o IDADE lá. kekekeke!! Mas isto é de menos, se for preciso eu removo antes de ´atualizar´ a data.
Uma outra questão o FB não está reconhecendo o ´/´
Tentei o
Deu mas sem atualizar ainda. kekeke.
Aguardo qualquer ajuda.
Obrigado novamente.
select (current_date-data_nasc)/365.25 as idade from sua_tabela
Ele mostra a idade mas não salva.
O
alter table minha_tabela add idade computed by ( ...cálculo... );
attempt to store duplicate value, já existe o IDADE lá. kekekeke!! Mas isto é de menos, se for preciso eu removo antes de ´atualizar´ a data.
Uma outra questão o FB não está reconhecendo o ´/´
Tentei o
SELECT extract(year from current_date)-extract(year from nascimento)-case
when extract(month from current_date)<extract(month from nascimento) or
(extract(month from current_date)=extract(month from nascimento) and
extract(day from current_date)<extract(day from nascimento)) then 0 else 1 end as idade
from sua_tabela
Deu mas sem atualizar ainda. kekeke.
Aguardo qualquer ajuda.
Obrigado novamente.
GOSTEI 0
Cb
19/10/2009
Desculpem ficar postando seguido, mas não dá pra editar.
O FB só não reconhce o ´/´
dentro do calculo de:
Grato.
O FB só não reconhce o ´/´
dentro do calculo de:
alter table minha_tabela add idade computed by ( ...cálculo... );
Grato.
GOSTEI 0
Afarias
19/10/2009
|Ele mostra a idade mas não salva.
Achei q estava CLARO isso. Este é um comando SELECT !! Seu objetivo não é gravar nada!! Pq gravar qualquer coisa se posso calcular na hora??
|attempt to store duplicate value, já existe o IDADE lá. kekekeke!! Mas isto
| é de menos, se for preciso eu removo antes de ´atualizar´ a data.
O erro é pq vc já tem 1 campo com o nome IDADE. Se vai criar um novo campo vc tem q dropar o antigo ou mudar o nome do novo campo!!!!!
|Deu mas sem atualizar ainda.
Novamente. A idéia não é atualizar. [b:7048aa6618]Não faz sentido[/b:7048aa6618] guardar um campo IDADE e mudar todo ano!!! Vc apenas calcula na hora q precisa -- os SELECTS q passei mostram como fazer isso
T+
Achei q estava CLARO isso. Este é um comando SELECT !! Seu objetivo não é gravar nada!! Pq gravar qualquer coisa se posso calcular na hora??
|attempt to store duplicate value, já existe o IDADE lá. kekekeke!! Mas isto
| é de menos, se for preciso eu removo antes de ´atualizar´ a data.
O erro é pq vc já tem 1 campo com o nome IDADE. Se vai criar um novo campo vc tem q dropar o antigo ou mudar o nome do novo campo!!!!!
|Deu mas sem atualizar ainda.
Novamente. A idéia não é atualizar. [b:7048aa6618]Não faz sentido[/b:7048aa6618] guardar um campo IDADE e mudar todo ano!!! Vc apenas calcula na hora q precisa -- os SELECTS q passei mostram como fazer isso
T+
GOSTEI 0
Cb
19/10/2009
Consegui resolver seguindo sua ajuda acima. :D
Eu tambem estranhei aquele select com o AS criando a variável atualizar alguma coisa. kekekeke.
Só tiver que fazer uma correção:
Não faz realmente sentido, mas eu não sou o chefe. :P
No principio eu alertei sobre isto, mas alegaram que eu não sei o que foi pedido, ou algo assim. Então...
Eu vou fazer para melhorar uma rotina que assim que ao 1o acesso do dia atualize. Seja o que deus quiser. :lol: :lol: :lol:
Eu tambem estranhei aquele select com o AS criando a variável atualizar alguma coisa. kekekeke.
Só tiver que fazer uma correção:
SELECT extract(year from current_date)-extract(year from nascimento)-case
when extract(month from current_date)<extract(month from nascimento) or
(extract(month from current_date)=extract(month from nascimento) and
extract(day from current_date)<extract(day from nascimento)) then [b:89cd665ba6]1[/b:89cd665ba6] else [b:89cd665ba6]0[/b:89cd665ba6] end as idade
from sua_tabela
Não faz realmente sentido, mas eu não sou o chefe. :P
No principio eu alertei sobre isto, mas alegaram que eu não sei o que foi pedido, ou algo assim. Então...
Eu vou fazer para melhorar uma rotina que assim que ao 1o acesso do dia atualize. Seja o que deus quiser. :lol: :lol: :lol:
GOSTEI 0
Cb
19/10/2009
Aproveitando.
Se me pedirem depois pra mudar, como eu coloco a idade calculada num dbstringgrid usando delphi 7?
Obrigado pela ajuda.
Se me pedirem depois pra mudar, como eu coloco a idade calculada num dbstringgrid usando delphi 7?
Obrigado pela ajuda.
GOSTEI 0
Afarias
19/10/2009
|Só tiver que fazer uma correção:
perfeito!
|Não faz realmente sentido, mas eu não sou o chefe.
:lol:
T+
perfeito!
|Não faz realmente sentido, mas eu não sou o chefe.
:lol:
T+
GOSTEI 0
Cb
19/10/2009
Aproveitando.
Se me pedirem depois pra mudar, como eu coloco a idade calculada num dbstringgrid usando delphi 7?
Obrigado pela ajuda.
REspondendo minha própria duvida.
Basta adicionar (<calculo>) as <VARIAVEL>
:D
Obrigado pelo Apoio gente.
GOSTEI 0
Carlos Mazzi
19/10/2009
Valeu, mais uma vez.. abracos++
GOSTEI 0