Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-09-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 21
mosorio Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 12-09-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 13-09-2003
Rudi Rudi is offline
Miembro
 
Registrado: jul 2003
Ubicación: Venezuela
Posts: 78
Poder: 21
Rudi Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 13-09-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 13-09-2003
Rudi Rudi is offline
Miembro
 
Registrado: jul 2003
Ubicación: Venezuela
Posts: 78
Poder: 21
Rudi Va por buen camino
ok, gracias

no sabia para que era.
Responder Con Cita
  #6  
Antiguo 15-09-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 21
mosorio Va por buen camino
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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:29:47.


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
Copyright 1996-2007 Club Delphi