Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Error al insertar con dbexpress (https://www.clubdelphi.com/foros/showthread.php?t=3609)

mosorio 12-09-2003 22:13:27

Error al insertar con dbexpress
 
Hola!

Al intentar insertar registros en una tabla que se toman los datos de un fichero texto y estos datos tienen acentos da un error y no me permite continuar con la inserción de los otros registros.
El error es exactamente este:
Cita:

"Project xxx raised ecexption class EDatabaseError with message 'arithmetic exception, numeric overflow or string truncation
Cannot transliterate character between chararter sets' "
He visto en los datos que el segundo registro tiene una letra con acento y no quiero que esto me arroje un error, cómo podría oviar esto o que realice la respectiva convesrión si ese es el caso?.
Lo otro es que si ocurre un error no importa, que continue pero controlar donde ocurrió el error, esto lo hago insertando un mensaje en un memo, pero cuando salta el error estoy en delphi, pero cuando estoy lanzando la aplicacion no salta el error.

Cómo puedo controlar esto??

Gracias de antemano.
He efectuado las modificaciones que me ha dicho marc en el hilo anterior, pero siempre da este error y quiero controlarlo, si da que se registre, pero no lo hace.

guillotmarc 12-09-2003 22:39:49

Hola.

Para que Interbase/Firebird te acepte los carácteres con acentos, eñes, ..., tienes que especificar el character_set adecuado. Yo utilizo el iso8859_1.

Tienes que especificarlo tanto en la Base de Datos (al crearla), como en el componente TSQLConnection (en la propiedad Params el ServerCharSet).

Si ya tienes creada la Base de Datos, puedes crear una de nueva mediante el Gestor IB-Expert. (el link apunta a la versión Personal que es gratuita)http://www.hksoftware.net/download/i....0.56_full.exe
En la opción Tools -> Extract Metadata, escoge todos los objetos, y también todos los datos, esto te va a crear un Script para generar una nueva bases de datos con las tablas/objetos y datos iguales. Modifica ese Script, y en las primeras lineas, en el CREATE DATABASE, especifica el DEFAULT CHARACTER SET a ISO8859_1
Ahora ya solo te queda ejecutar el Script, para crear una nueva Base de Datos, con el character_set que te interesa.

Saludos.

Rudi 12-09-2003 23:03:32

Cita:

Mensaje original de guillotmarc
Para que Interbase/Firebird te acepte los carácteres con acentos, eñes, ..., tienes que especificar el character_set adecuado. Yo utilizo el iso8859_1.
solo es necesario especificar el character_set?
yo en mis bases de datos ademas de hacer lo que comentas, en la definicion del campo especifico el collate es_es, algo asi
Código:

SET SQL DIALECT 3;

CREATE DATABASE 'ruta\mi_db.gdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET ISO8859_1;

CREATE TABLE "xxx" (
"Mi Dato" VARCHAR (n) CHARACTER SET ISO8859_1 COLLATE ES_ES);

estoy haciendo algo de mas al especificar el collate o sirve de algo? pregunto porque no he tenido problemas con la tilde ni con la ñ pero tampoco he probado hacerlo sin especificar el collate pues desde mi primera base de datos he usado esta definicion en los campos de texto.

Gracias.

guillotmarc 12-09-2003 23:39:27

Hola.

Tal como lo tengo entendido, el Collate_set es para las ordenaciones. Evidentemente es mejor especificar la ordenación es_es que dejarlo por defecto (como hago yo).

Esto te sirve, por ejemplo, para que al hacer un SELECT con un ORDER BY, las ñ vayan detras de las n, y no al final (como me pasa a mi, aunque hasta ahora tampoco le he dado mayor importancia).

Saludos.

Rudi 13-09-2003 00:36:06

ok, gracias

no sabia para que era.

mosorio 15-09-2003 14:18:22

Hola Marc!

Gracias por las respuestas, pero tal vez en lo que este fallando es en asignar la propiedad de character set en el sqlconn, pero la BD tiene el iso8859_1 al momento de crearla, verificaré hoy estoy, claro que viendo esto, voy a modificar algunas cosas para que el usuario asigne estos parámetros en runtime y asi no haya problemas al ejecutar.

Gracias nuevamente y a Rudi y todos los que leen.


La franja horaria es GMT +2. Ahora son las 20:07:48.

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