[Lazarus-es] Error al leer charset ISO8859_1 en Firebird 2.1.3con Lazarus

JoshyFun joshyfun en gmail.com
Mie Dic 2 19:30:25 CET 2009


Hello Ismael,

Wednesday, December 2, 2009, 6:43:51 PM, you wrote:

ILDGa> Con esa configuración nunca he tenido problemas ni con servidores Windows,
ILDGa> ni con servidores Debian, pero repito usando Visual Basic 6 Service Pack 6

Normal :) Ni yo cuando no usaba Unicode para nada :) Claro que cuando
me apareciron los datos en ruso tuve que tirar la base de datos (bueno
la parcheé para ir tirando, encapsulando a mano UTF8 en ISO8559-1...
un asco).

ILDGa> Ahora aunque antes no le respondí a JoshyFun no estoy de acuerdo con su
ILDGa> ponto de vista de que la propiedad CharSet del
ILDGa> componente TIBConnection esté

Bien... No problemo...

ILDGa> la base de datos para que está entonces dicha propiedad, si en todo caso
ILDGa> tuviera 2 propiedades CharSet, una para mostrar los datos y la otra para
ILDGa> leer los datos, entonces la cosa fuera diferente porque en una pondrías UTF8
ILDGa> que sería con la configuración que se mostrarían los datos y en la otra
ILDGa> pondrías la que tiene la base de datos, por lo que el componente entonces
ILDGa> tendría que tener un procedimiento implementado encargado de realizar las
ILDGa> conversiones tanto a la hora de consultar los datos como a la hora de
ILDGa> actualizar los mismos.

Es que lo que haces al poner el charset al IBConnection is justo eso
:) Supongamos la base de datos más sencilla del mundo, con una tabla
llamada tabla y un campo llamado campo de tipo "string". Nuestra
aplicación es en VB6 ISO8559-1 aunque más correcto sería decir VB6
ANSI ya que si la aplicación corre en un Windows ruso sería "VB6
Win1251" y los acentos, las ñ y todo eso no habría forma de hacerlos
funcionar. Nuestra base de datos tiene el "campo" definido como
Win1252 o ISO8559-1 que es lo mismo. Veamos como viajan los datos:

---Grabación---
Pantalla -> (ANSI) -> Aplicación -> (ANSI) -> Firebird -> (8859-1) -> Tabla -> Campo
---Lectura-----
Campo -> Tabla -> (8859-1) -> Firebird -> (ANSI) -> Aplicación -> (ANSI) -> Pantalla

Ahora supongamos un Lazarus con charset en IBConnection en UTF8

---Grabación---
Pantalla -> (UTF8) -> Aplicación -> (UTF8) -> Firebird -> (8859-1) -> Tabla -> Campo
---Lectura-----
Campo -> Tabla -> (8859-1) -> Firebird -> (UTF8) -> Aplicación -> (UTF8) -> Pantalla

Ahora supongamos un Lazarus con charset en IBConnection en ISO8559-1

---Grabación---
Pantalla -> (UTF8) -> Aplicación -> (8859-1*) -> Firebird -> (8859-1) -> Tabla -> Campo
---Lectura-----
Campo -> Tabla -> (8859-1) -> Firebird -> (8859-1) -> Aplicación -> (UTF8*) -> Pantalla

Las casillas marcadas con un '*' son conversiones que tiene que hacer
la aplicación manualmente para que los datos se puedan entregar
correctamente al otro extremo del flujo de datos.

Recapitulando, el charset del IBConnection no define los datos de la
base de datos, esta puede tener campos en ISO8559-1, otros en Unicode
y otros en ASCII, lo único que define es el formato en que la
aplicación enviará y recibirá datos desde y hacia el server de
firebird.

ILDGa> Y espero que con este comentario no se ofenda JoshyFun ya que es mi simple
ILDGa> opinión, y aunque soy un especialista, no lo soy en Object Pascal en sí,
ILDGa> sino en otros lenguajes.

Me voy a enfadar muchísimo, tanto que voy a buscar donde vives en
Google Maps :) :) :) Si uno no puede tener una opinión diferente a
otro mal vamos, lo que estopea las conversaciones son las formas;
mientras estas sean correctas siempre se llegará a algo :)

-- 
Best regards,
 JoshyFun





More information about the Lazarus-es mailing list