Página 1 de 1

Agilizar número pra string

Enviado: 22 Dez 2019 19:12
por JoséQuintas
Minha rotina de backup do MySQL está lenta, e parece que a causa disso é a conversão.
Números de origem fora do Harbour são tratados diferentes de números internos do Harbour.
Uso:

- ValType() pra testar o tipo de conversão
- No caso de números, se resultar em 1.00000, vou removendo os zeros, e o ponto
- E vou acumulando numa string até 500KB, antes de gravar no disco.

Já removi o Len() que fazia no texto de até 500kb, substituindo pelo Len() dos trechos individuais
Imagino que texto menor calcula mais rápido...

É algo do tipo:

Código: Selecionar todos

FOR nCont = 1 TO FCount()
   xValue := FGet( nCont )
   DO CASE
   CASE ValType( xValue ) == "N"; xValue := NumberSql( xValue )
   CASE ValType( xValue ) == "D"; xValue := DateSql( xValue )
   OTHERWISE                          ; xValue := StringSql( xValue )
   ENDCASE
  cTexto += xValue
NEXT
Alguma idéia pra agilizar isso?
Agora durante post.... talvez cType := ValType( xValue ) uma única vez agilize alguma coisa.

Agilizar número pra string

Enviado: 15 Jan 2020 14:45
por Marcos Kieron
hb_valtostr()?

Agilizar número pra string

Enviado: 15 Jan 2020 16:28
por JoséQuintas
Melhor esquecer, não vai ter opção melhor.

Na verdade trata-se do conjunto.
o conteúdo pode ser NULL pra qualquer um deles, e além disso:

Data: '2020-01-01'
Número: 1, 1.52, 1.5, 1.57892
String: 'dd\'dd'

1.000000000000000
Não compensa isso no backup, então minha rotina transforma em 1, apenas um caractere.

O Harbour trata números de forma diferente, conforme vém de DBF ou MySQL/OLE.
E tem o SET DECIMALS, que pode interferir no resultado.

São essas coisas que deixam mais demorado.

Deixar como está, e se as bases crescerem muito, deixo de fazer pelo Harbour.

Agilizar número pra string

Enviado: 17 Jan 2020 12:21
por Marcos Kieron
Usar as ferramentas nativas do MySQL não servem no seu caso?