UPDATE DATA BUG DO MILENIO
Caros amigos, Quase 10 anos ja se passaram com a [Ô]revolução[Ô] do governo e acerto do bug do milênio, e eu aqui garrado em uma customização de um determinado sistema, vejam bem, tenho uma cliente que não quer de jeito nenhum deixar de utilizar o sistema financeiro dela em DOS , cuja as datas estão na formatação DD/MM/YY, ou seja, até o ano de 2009 o sistema dela interpretava o ano 09 como 2009 normalmente, e conseguia emitir os relatorios dela certinhos.. de contas a pagar e receber.. só que agora, ela faz o lancamento la informando a data por exemplo.. VENCIMENTO = 02/01/10, ou seja o lancamento é da data 02/01/2010, ele grava no banco 02/01/10 pois o sistema de datas dela nao contem 4 digitos no ano.. apenas 2 digitos, então o que estou fazendo, estou importando os dados da mesma para um banco de dados auxiliar e fiz uma interface simples para ela conseguir emitir relatório nda data que ela tanto quer.. que é apartir de 2010, só que .. quando importo para o acess a tabela, esse mesmo lancamento acima citado da data 02/01/10 vem importado como 02/01/1910, entao o que estava querendo fazer, [Ô]coisa simples mas que ta me garrando[Ô], eu queria fazer uma funçao que fizesse o update no banco ou replace alterando todos os lancamentos com a data 1910 para 2010, mas eu nao posso alterar o dia e o mes, so preciso alterar o ano, o campo no meu banco esta definido como date, 8 caracteres,.. tentei fazer de varias formas e nao consegui, vejam a ultima forma que tentei fazer..
tentei tambem..
tentei usando @, sem sucesso.. se alguem puder dar uma forcinha ai.. agradeceria muito.. , estou enviando a tela so para vcs verem como esta ficando.. olharem o gerenciado do relatorio...
Citação:sql = [Ô]UPDATE DUPLS024 SET VENCIMENTO = [ô]dd/mm/2010[ô] where VENCIMENTO=[ô][Ô] & [Ô]dd/mm/1910[Ô] & [Ô][ô][Ô]
db.Execute sql
tentei tambem..
Citação:sql = [Ô]UPDATE DUPLS024 SET VENCIMENTO = [Ô]##/##/2010[ô] where VENCIMENTO=[ô][Ô] & [Ô]##/##/1910[Ô] & [Ô][ô][Ô]
db.Execute sql
tentei usando @, sem sucesso.. se alguem puder dar uma forcinha ai.. agradeceria muito.. , estou enviando a tela so para vcs verem como esta ficando.. olharem o gerenciado do relatorio...
sql = [Ô]UPDATE DUPLS024 SET VENCIMENTO = dateadd([Ô]yyyy[Ô],100,VENCIMENTO) where year(VENCIMENTO) < 1950
db.Execute sql
Se esta sql não funcionar (não interpretar o DATEADD), então faça um loop:
SQL = [Ô]SELECT * FROM DUPLS024 WHERE YEAR(VENCIMENTO) < 1950[Ô]
rs.open SQL,db,.....
DO WHILE rs.eof = false
Wdata = dateadd([Ô]yyyy[Ô],100,rs!VENCIMENTO)
sql = [Ô]UPDATE DUPLS024 SET VENCIMENTO = [ô][Ô] & format(Wdata,[Ô]mm/dd/yyyy[Ô]) & [Ô][ô] where ID = [Ô] & rs!ID
db.execute sql
rs.movenext
LOOP
Amigo, tipo de dados incompativeis na expressao de criterio,
Em qual das soluções?
Provavelmente do DATEADD do comando sql.
Tente a rotina conforme explicada em seguida.
Provavelmente do DATEADD do comando sql.
Tente a rotina conforme explicada em seguida.
Citação:amigo.. essa funçao foi a que mais deu certo vamos se dizer assim..EDERMIR escreveu:
sql = [Ô]UPDATE DUPLS024 SET VENCIMENTO = dateadd([Ô]yyyy[Ô],100,VENCIMENTO) where year(VENCIMENTO) < 1950
db.Execute sql
Se esta sql não funcionar (não interpretar o DATEADD), então faça um loop:SQL = [Ô]SELECT * FROM DUPLS024 WHERE YEAR(VENCIMENTO) < 1950[Ô]
rs.open SQL,db,.....
DO WHILE rs.eof = false
Wdata = dateadd([Ô]yyyy[Ô],100,rs!VENCIMENTO)
sql = [Ô]UPDATE DUPLS024 SET VENCIMENTO = [ô][Ô] & format(Wdata,[Ô]mm/dd/yyyy[Ô]) & [Ô][ô] where ID = [Ô] & rs!ID
db.execute sql
rs.movenext
LOOP
sql = [Ô]UPDATE DUPLS024 SET VENCIMENTO = dateadd([Ô]yyyy[Ô],100,VENCIMENTO) where year(VENCIMENTO) < 1950
db.Execute sql
ela deu um errinho faltando parametros.. ajustei e ficou assim..
sql = [Ô]UPDATE DUPLS024 SET VENCIMENTO = [ô][Ô] & DateAdd([Ô]yyyy[Ô], 100, VENCIMENTO) & [Ô][ô] where year(VENCIMENTO) < 1950[Ô]
db.Execute sql
so que ele trocou todas as datas menores para 31/12/1999, isso nao ta certo nao.. rs rs rs.. Abraços..
você já tentou importar para o Access com o cmpo data no formato dd/mm/yy somente?
O [Ô]ajuste[Ô] que você fez não vai surtir efeito pois VENCIMENTO é uma campo da tabela e desta forma transforma-se em uma variável.
Vamos ver a rotina:
Coloquei um IF teoricamente desnecessário pois o select retorna todos os registros com data MENOR que 1950 (que é o caso do erro de importação).
Note que cito o campo ID. Se você não tem um campo chave na tabela, não vai funcionar.
Vamos ver a rotina:
SQL = [Ô]SELECT * FROM DUPLS024 WHERE YEAR(VENCIMENTO) < 1950[Ô]
rs.open SQL,db,.....
DO WHILE rs.eof = false
Wdata = dateadd([Ô]yyyy[Ô],100,rs!VENCIMENTO)
if year(rs!VENCIMENTO) < 1950 then
sql = [Ô]UPDATE DUPLS024 SET VENCIMENTO = [ô][Ô] & format(Wdata,[Ô]mm/dd/yyyy[Ô]) & [Ô][ô] where ID = [Ô] & rs!ID
db.execute sql
endif
rs.movenext
LOOP
Coloquei um IF teoricamente desnecessário pois o select retorna todos os registros com data MENOR que 1950 (que é o caso do erro de importação).
Note que cito o campo ID. Se você não tem um campo chave na tabela, não vai funcionar.
Citação:Amigo, funcionou assim ó.. rs, rs..EDERMIR escreveu:
O [Ô]ajuste[Ô] que você fez não vai surtir efeito pois VENCIMENTO é uma campo da tabela e desta forma transforma-se em uma variável.
Vamos ver a rotina:SQL = [Ô]SELECT * FROM DUPLS024 WHERE YEAR(VENCIMENTO) < 1950[Ô]
rs.open SQL,db,.....
DO WHILE rs.eof = false
Wdata = dateadd([Ô]yyyy[Ô],100,rs!VENCIMENTO)
if year(rs!VENCIMENTO) < 1950 then
sql = [Ô]UPDATE DUPLS024 SET VENCIMENTO = [ô][Ô] & format(Wdata,[Ô]mm/dd/yyyy[Ô]) & [Ô][ô] where ID = [Ô] & rs!ID
db.execute sql
endif
rs.movenext
LOOP
Coloquei um IF teoricamente desnecessário pois o select retorna todos os registros com data MENOR que 1950 (que é o caso do erro de importação).
Note que cito o campo ID. Se você não tem um campo chave na tabela, não vai funcionar.
Set rs = db.OpenRecordset(sql)
Do While rs.EOF = False
Wdata = DateAdd([Ô]yyyy[Ô], 100, rs!VENCIMENTO)
If Year(rs!VENCIMENTO) < 1950 Then
sql = [Ô]UPDATE DUPLS024 SET VENCIMENTO = [ô][Ô] & Format(Wdata, [Ô]mm/dd/yyyy[Ô]) & [Ô][ô] where XREF = [ô][Ô] & rs!XREF & [Ô][ô][Ô]
db.Execute sql
End If
rs.MoveNext
Loop
muito obrigado pela dica.. vc salvou meu natal..rs rs rs.. abraçaoooo
Tópico encerrado , respostas não são mais permitidas