UPDATE DATA BUG DO MILENIO

XXXANGELSXXX 20/12/2009 22:52:20
#330124
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..

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



EDERMIR 20/12/2009 23:18:07
#330125
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
XXXANGELSXXX 21/12/2009 08:29:52
#330136
Amigo, tipo de dados incompativeis na expressao de criterio,
EDERMIR 21/12/2009 10:11:43
#330147
Resposta escolhida
Em qual das soluções?
Provavelmente do DATEADD do comando sql.

Tente a rotina conforme explicada em seguida.
XXXANGELSXXX 21/12/2009 10:21:52
#330149
Citação:

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

amigo.. essa funçao foi a que mais deu certo vamos se dizer assim..

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..
WCOSTA 21/12/2009 10:31:42
#330153
você já tentou importar para o Access com o cmpo data no formato dd/mm/yy somente?
EDERMIR 21/12/2009 10:53:40
#330155
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.
XXXANGELSXXX 21/12/2009 11:14:00
#330164
Citação:

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.

Amigo, funcionou assim ó.. rs, rs..

  • sql =
  • [Ô]SELECT * FROM DUPLS024 WHERE YEAR(VENCIMENTO) < 1950[Ô]
    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