Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   SQLite + acentos y eñes (https://www.clubdelphi.com/foros/showthread.php?t=93962)

cmfab 27-05-2019 17:20:09

SQLite + acentos y eñes
 
Buenos días a todos!

He tratado de buscar información al respecto pero la que he encontrado no resuelve mi problema.

Tengo una conexión con Firedac y SQLite, lo que me sucede es que cuando inserto en un campo registros con acentos, otros caracteres como "ñ", me los sustituye por símbolos extraños dentro de la tabla de la BD, como rombos, signos de interrogación, etc.

He probado cambiando las opciones de OpenMode y StringFormat de la conexión pero ninguna de ellas me ha resuelto este problema.

La inserción la hago desde código Deplhi hacia SQLite.

Alguien se ha topado con este problema que me pueda echar una mano?.

Gracias de antemano!

Casimiro Notevi 27-05-2019 20:56:17

¿Usas utf8 en tu programa delphi?

cmfab 27-05-2019 21:04:20

Hola, los parámetros básicos de la conexión son los siguientes:

Código Delphi [-]
  conexion.params.Add  ('DriverID=SQLite');
  conexion.params.Add  ('Database=mibase.s3db');
  conexion.Params.Append('OpenMode=CreateUTF8');

cmfab 27-05-2019 21:07:22

Lo he probado creando los parámetros en tiempo de ejecución como lo expuesto anteriormente, como directo en las parámetros del componente desde el inspector de Delphi.

Casimiro Notevi 27-05-2019 21:18:57

¿Y los datos que guardas son utf8 o iso8859?

cmfab 27-05-2019 22:25:03

Bueno, la verdad es que eso no lo tengo claro, estoy ejecutando una consulta de prueba desde Delphi con la sintaxis siguiente:

Código Delphi [-]
consPrueba.Close;
consPrueba.ParamByName('vCliente').Value := 'Jesús Alarcón';
consPrueba.ExecSQL;

Básicamente actualizo un registro con ese nombre, me parecía algo normal, pero desde Delphi tengo el problema, obviamente si lo hago dentro de un editor de SQLite dentro de la propia BD me escribe correctamente los caracteres.

roman 28-05-2019 17:03:42

¿Qué versión de Delphi usas?

// Saludos

cmfab 28-05-2019 18:49:22

10.2 Tokyo

Casimiro Notevi 28-05-2019 20:30:57

Comprueba qué "encoding" tiene.


PRAGMA encoding;
PRAGMA encoding = "UTF-8";
PRAGMA encoding = "UTF-16";
PRAGMA encoding = "UTF-16le";
PRAGMA encoding = "UTF-16be";

In first form, if the main database has already been created, then this pragma returns the text encoding used by the main database, one of "UTF-8", "UTF-16le" (little-endian UTF-16 encoding) or "UTF-16be" (big-endian UTF-16 encoding). If the main database has not already been created, then the value returned is the text encoding that will be used to create the main database, if it is created by this session.
The second through fifth forms of this pragma set the encoding that the main database will be created with if it is created by this session. The string "UTF-16" is interpreted as "UTF-16 encoding using native machine byte-ordering". It is not possible to change the text encoding of a database after it has been created and any attempt to do so will be silently ignored.
Once an encoding has been set for a database, it cannot be changed.
Databases created by the ATTACH command always use the same encoding as the main database. An attempt to ATTACH a database with a different text encoding from the "main" database will fail.

cmfab 28-05-2019 21:46:01

El pragma de la base es UTF-8

cmfab 28-05-2019 21:47:37

Rectifico, el econding que devuelve el PRAGMA es UTF-8

Casimiro Notevi 29-05-2019 01:17:13

Pues entonces, por algún motivo, estás enviando texto que no es utf8 a la base de datos.
¿Has probado desde un software externo? (sqlite studio admin, sqliteman, etc.?

cmfab 29-05-2019 04:40:00

Cuando ejecuto dentro del Admin de SQLite funciona bien, bueno, seguiré revisando a ver que puede ser, por el momento he optado por eliminar los acentos y otros caracteres del string que paso desde Delphi.

Casimiro Notevi 29-05-2019 09:29:21

A ver si estás enviando ansistring('ñÑáéíóú') en lugar de string('ñÑáéíóú')

cmfab 30-05-2019 19:55:21

En realidad opté por quitar los acentos, me he topado con varios quebraderos de cabeza con sqlite y este tema. más adelante cambiaré el motor de bases de datos. Gracias a todos por sus atenciones.

Casimiro Notevi 30-05-2019 19:59:01

Vaya, qué raro, yo llevo 7 años usando sqlite para android y nunca he tenido problemas con eso.


La franja horaria es GMT +2. Ahora son las 02:33:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi