PDA

Ver la Versión Completa : Error al insertar con dbexpress


mosorio
12-09-2003, 22:13:27
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:

"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/ibep_2.5.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
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
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.