Sim... bug.... do programador....
Parecia certo, mas não estava...
Código: Selecionar todos
CASE xField == "IDNOTFIS" .AND. xValue != StrZero( :Number( xField ), 6 )
Isso fazia com que fosse usada outra condição, quando o número fosse igual.
Agora sim:
Código: Selecionar todos
CASE xField == "IDNOTFIS"
IF xValue != StrZero( :Number( xField ), 6 )
lOk := .F.
SayScroll( jpnotfis->idNotFis + " - ID - [" + jpnotfis->idNotFis + "] - [" + StrZero( :Number( xField ), 6 ) + "]" )
ENDIF
Quando era igual, entrava na análise genérica como string.
Justo esse campo, é string no DBF e numérico no MySQL, por isso precisa comparar diferente.
E não dava erro ao entrar na validação como string.
Código: Selecionar todos
STATIC FUNCTION Update0210A()
LOCAL xValue, xField, xType, nCont, lOk, nTotal
LOCAL cnMySql := ADOClass():New( AppConexao() )
IF AppConexao() == NIL
RETURN NIL
ENDIF
SayScroll( "2020/02/10 Apagando DBF JPNOTFIS" )
IF ! UseSoDbf( "jpnotfis", .T. )
RETURN NIL
ENDIF
GrafTempo( "JPNOTFIS.DBF" )
DO WHILE RecNo() < 1000 .AND. ! Eof()
GrafTempo( RecNo(), LastRec() )
WITH OBJECT cnMySql
:cSql := "SELECT * FROM JPNOTFIS WHERE IDNOTFIS = " + StringSql( jpnotfis->IdNotFis )
:Execute()
lOK := .T.
FOR nCont = 1 TO FCount()
xValue := FieldGet( nCont )
xField := Upper( FieldName( nCont ) )
xType := ValType( xValue )
DO CASE
CASE xField == "IDNOTFIS"
IF xValue != StrZero( :Number( xField ), 6 )
lOk := .F.
SayScroll( jpnotfis->idNotFis + " - ID - [" + jpnotfis->idNotFis + "] - [" + StrZero( :Number( xField ), 6 ) + "]" )
ENDIF
CASE xType == "N"
IF xValue != :Number( xField )
lOk := .F.
SayScroll( jpnotfis->idNotFis + " - " + xField + " - [" + Str( xValue ) + "] - [" + Str( :Number( xField ) ) + "]" )
ENDIF
CASE xType == "D"
IF xValue != :Date( xField )
lOk := .F.
SayScroll( jpnotfis->idNotFis + " - " + xField + "- [" + Dtoc( xField ) + "] - [" + Dtoc( :Date( xField ) ) + "]" )
ENDIF
OTHERWISE
IF Trim( xValue ) != :String( xField )
lOk := .F.
SayScroll( jpnotfis->idNotFis + " - " + xField + " - [" + xValue + "] - [" + :String( xField ) + "]" )
ENDIF
ENDCASE
IF ! lOk
EXIT
ENDIF
NEXT
:CloseRecordset()
ENDWITH
IF lOK
RecLock()
DELETE
RecUnlock()
ENDIF
SKIP
ENDDO
COUNT TO nTotal
PACK
CLOSE DATABASES
SayScroll( "QT NFs Processadas " + Str( LastRec() - nTotal ) )
Inkey(100)
RETURN NIL
É um DBF que vou apagar.
Por precaução, antes de apagar de vez, estou comparando com o salvo no MySQL.