Page 1 of 1

Problemas con dbfs y acentos

Posted: Tue Oct 09, 2018 10:00 pm
by Claudio C
Estimados
Tengo una aplicacióin que comparte dbf con otra en xharbour ( xailer y harbour)
El problema lo tengo con los caracteres especiales ... acentos, etc.
En la imagen puede verse el problema. Arriba en xharbour y debajo en clipper

[img]codigos.jpg[/img]

En la dbf usa cdx y Collation= ESMWIN .

Ha intentado muchas cosas ( collation, languaje, codepage ) pero no logro que los dos sistemas me muestren lo mismo.
EN el que grabo se ve bien ( y en el otro no)
Agradeceria cualquier ayuda.
Claudio

Re: Problemas con dbfs y acentos

Posted: Wed Oct 10, 2018 9:04 am
by XeviCOMAS
Claudio,

yo lo estoy utilizando así, con XailerHarbour

Code: Select all

   //permite crear indices con el orden alfabético Español, respetando la ñ y la Ñ... tambè la Ç i la ç
   REQUEST HB_LANG_ES
   HB_LangSelect( "ES" )
   REQUEST HB_CODEPAGE_ESMWIN
   HB_CDPSelect( "ESMWIN" )

Re: Problemas con dbfs y acentos

Posted: Thu Oct 11, 2018 2:15 am
by Claudio C
Gracias Xevi por ti respuesta pero no me funcionó.

Agregué lo que me dijiste en xHarbour y en Xailer...

//permite crear indices con el orden alfabético Español, respetando la ñ y la Ñ... tambè la Ç i la ç
REQUEST HB_LANG_ES
HB_LangSelect( "ES" )
REQUEST HB_CODEPAGE_ESMWIN
HB_CDPSelect( "ESMWIN" )

Pero no funciono...
codigos2.jpg
codigos2.jpg (32.28 KiB) Viewed 1054 times


Evidentemente el caracter que se guarda en la dbf es diferente cuando grabo la í desde un programa y desde otro.
Agradeceria una respuesta, pista, sugerencia...
Gracias por su tiempo

Re: Problemas con dbfs y acentos

Posted: Thu Oct 11, 2018 10:50 pm
by avitalini
A ver si esto te puede ayudar, así lo tengo con 2 aplicaciones que hasta hace algunos años compartía con Clipper. FW y ahora Xailer

Code: Select all

   REQUEST HB_CODEPAGE_ES850C
   REQUEST HB_CODEPAGE_ESMWIN
   
   HB_CDPSELECT( "ESMWIN" )
   HB_SETTERMCP( "ESMWIN" )
   
   SET(_SET_DBCODEPAGE, "ES850C" )

Saludos

Re: Problemas con dbfs y acentos (resuelto)

Posted: Thu Oct 11, 2018 11:48 pm
by Claudio C
El problema estaba en que la aplicación xHarbour grababa códigos ASCII y Xailer ANSI.
Como el requerimiento del proyecto exige la 'retrocompatibilidad' con los sistemas existentes ( que estan en xHarbour ) se resolvio 'grabar' las dbf como lo hacían éstas aplicaciones ( ASCII )

Al grabar:
if ValType( uVALOR ) = 'C' // El valor a grabar es un string -> convertirlo
Fieldput( i , hb_ansiTOoem( uVALOR ) ) // Convierte ANSI a OEM y graba el campo
else
Fieldput( i , uVALOR )
endif

Al leer:
uValor:= FieldGet( i ) // Obtiene Valor del campo
if ValType( uValor ) = 'C' // El valor leido es un string
uValor:=hb_oemTOansi( uValor ) // Convierte OEM a ANSI
endif

Por suerte solo accedemos a las DBF mediante una clase ( 'wrap' ) unica con lo cual se hicieron cambios mínimos y salio andando...

Un saludo,
Claudio