Alterar campo de um DBF via sistema
Moderador: Moderadores
Alterar campo de um DBF via sistema
Altere a cadeia de conexão após a instalação do provedor VFP OLE DB.
- JoséQuintas
- Administrador

- Mensagens: 20416
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
Alterar campo de um DBF via sistema
Cheguei a ver isso na SIXCDX para o Clipper 5.2Itamar M. Lins Jr. escreveu:Eu nem sabia que era assim o VARIANTE. O campo aceita tudo, qualquer coisa: DATE/LOGICAL/NUMERIC/CHAR
Achei perigoso o uso, porque trata-se de um campo MEMO.
Ainda bem que nunca usei, porque teria acabado com o aplicativo obrigando MEMO.
No Harbour deve funcionar.
Uma grande coincidência, exatamente do ponto flutuante.
Minha rotina de recálculo ficou demorada.
Motivo: PONTO FLUTUANTE
Número igual está dizendo que é diferente.
NÃO se trata de arredondamento em divisão/multiplicação, apenas a simples SOMA, com DUAS DECIMAIS.
Agora imagine um INT() multiplicando por 100, pode ser meio imprevisível, e dar diferença de 1.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20416
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
Alterar campo de um DBF via sistema
Pensei que ia atrapalhar.
Alterei pra isto:
Alterou de 5 minutos pra meio segundo !!!!!
Trocentas mil vezes mais rápido !!!!
É porque se for igual, não precisa gravar nada....
Foi uma grande coincidência, relacionada com isso dos números, que acabou de acontecer.
É o bancário que estou convertendo pra MySQL. A rotina foi esta:
Alterei pra isto:
Código: Selecionar todos
IF Str( :Number( "BASALDO" ), 16, 2 ) != Str( nSaldo, 16, 2 )
Trocentas mil vezes mais rápido !!!!
É porque se for igual, não precisa gravar nada....
Foi uma grande coincidência, relacionada com isso dos números, que acabou de acontecer.
É o bancário que estou convertendo pra MySQL. A rotina foi esta:
Código: Selecionar todos
FUNCTION BARecalcula() // , dDataInicial, m_RecGeral )
LOCAL cConta, cAplic, nSaldo, dBanco, dEmissao, cImpSld
LOCAL cnSQL := ADOClass():New( AppConexao() )
Mensagem( "Recalculando" )
WITH OBJECT cnSQL
:cSQL := "SELECT BACONTA, BAAPLIC, IDBANCARIO, BADATBAN, BADATEMI, BAVALOR, BASALDO, BAIMPSLD" + ;
" FROM JPBANCARIO" + ;
" ORDER BY BACONTA, BAAPLIC, BADATBAN, BADATEMI, IDBANCARIO"
:Execute()
GrafTempo( "Fase1" )
DO WHILE ! :Eof()
cConta := :String( "BACONTA" )
cAplic := :String( "BAAPLIC" )
nSaldo := 0
DO WHILE cConta == :String( "BACONTA" ) .AND. cAplic == :String( "BAAPLIC" ) .AND. ! :Eof()
GrafTempo( :AbsolutePosition(), :RecordCount() )
nSaldo += :Number( "BAVALOR" )
IF Str( :Number( "BASALDO" ), 16, 2 ) != Str( nSaldo, 16, 2 )
:QueryCreate()
:QueryAdd( "BASALDO", nSaldo )
Encontra( StrZero( :Number( "IDBANCARIO" ), 6 ), "jpbancario", "primary" )
jpbancario->( :DBFQueryExecuteUpdate() )
:QueryExecuteUpdate( "JPBANCARIO", "IDBANCARIO = " + NumberSQL( :Number( "IDBANCARIO" ) ) )
ENDIF
:MoveNext()
ENDDO
ENDDO
:CloseRecordset()
:cSQL := "SELECT BACONTA, BAAPLIC, IDBANCARIO, BADATBAN, BADATEMI, BAVALOR, BASALDO, BAIMPSLD" + ;
" FROM JPBANCARIO" + ;
" ORDER BY BACONTA DESC, BAAPLIC DESC, BADATBAN DESC, BADATEMI DESC, IDBANCARIO DESC"
:Execute()
GrafTempo( "Fase 2" )
dBanco := Ctod("")
dEmissao := Ctod("")
cConta := :String( "BACONTA" )
cAplic := :String( "BAAPLIC" )
DO WHILE ! :Eof()
GrafTempo( :AbsolutePosition(), :RecordCount() )
IF cConta != :String( "BACONTA" ) .OR. ;
cAplic != :String( "BAAPLIC" ) .OR. ;
dBanco != :Date( "BADATBAN" ) .OR. ;
( dBanco = Stod( "29991231" ) .AND. dEmissao != :Date( "BADATEMI" ) )
cImpSld := "S"
ELSE
cImpSld := "N"
ENDIF
IF :Number( "BAVALOR" ) == 0
cImpSld := "N"
ENDIF
IF :String( "BAIMPSLD" ) != cImpSld
:QueryCreate()
:QueryAdd( "BAIMPSLD", cImpSld )
jpbancario->( Encontra( StrZero( :Number( "IDBANCARIO" ), 6 ), "jpbancario", "primary" ) )
jpbancario->( :DBFQueryExecuteUpdate() )
:QueryExecuteUpdate( "JPBANCARIO", "IDBANCARIO = " + NumberSQL( :Number( "IDBANCARIO" ) ) )
ENDIF
cConta := :String( "BACONTA" )
cAplic := :String( "BAAPLIC" )
dBanco := :Date( "BADATBAN" )
dEmissao := :Date( "BADATEMI" )
:MoveNext()
ENDDO
:CloseRecordset()
ENDWITH
RETURN .T.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
