Talvez interesse esta, que é o que uso:
No DBF é caractere, mas no MySQL é numérico.
Uso mesmos campos pra atualizar DBF e MySQL, então....
No MySQL ACEITA:
SET CHAVE = '000010'
E no DBF:
REPLACE CHAVE WITH "000010"
Desta forma, uso a mesma string pra atualizar DBF e MySQL
E também uso esse recurso de incremental.
METHOD QueryExecuteInsert( cTable, lIgnore ) CLASS ADOClass
LOCAL oField, cSQL, Rs, nValue
hb_Default( @lIgnore, ! SQL_INSERTIGNORE )
cSQL := "INSERT " + iif( lIgnore, "IGNORE ", "" ) + "INTO " + cTable + " ( "
FOR EACH oField IN ::aQueryList
cSQL += oField[ 1 ]
IF ! oField:__EnumIsLast
cSQL += ", "
ENDIF
NEXT
cSQL += " ) VALUES ( "
FOR EACH oField in ::aQueryList
cSQL += ValueSQL( oField[ 2 ] )
IF ! oField:__EnumIsLast
cSQL += ", "
ENDIF
NEXT
cSQL += " )"
::ExecuteCmd( cSQL )
Rs := ::ExecuteCmd( "SELECT LAST_INSERT_ID()" )
nValue := Rs:Fields( 0 ):Value
IF ValType( nValue ) == NIL
nValue := 1
ENDIF
Rs:Close()
RETURN nValue
Basicamente:
:QueryCreate()
:QueryAdd( "NOME", cNome )
:QueryAdd( "ENDERECO", cEndereco )
:QueryAdd( "VENDEDOR", StrZero( nVendedor, 6 ) ) // numérico no MySQL
:QueryAdd( "STATUS", StrZero( nStatus, 6 ) ) // numérico no MySQL
nIdCliente := :QueryExecuteInsert( "CLIENTES" )
:QueryAdd( "IDCLIENTE", StrZero( mIdCliente, 6 ) )
:DBFQueryExecuteInsert() // grava no DBF usando mesmo array, adicionado o código obtido do mysql