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: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
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, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
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, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
