Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
Caracteres chinos en Firebird

Hola, antes que nada gracias de antemano por su atencion, mi problema es el siguiente:

Tengo que desarrollar un proyecto cuya interfaz y datos muestren caracteres chinos, 欢迎参加第七届中青年呼吸医师论坛, el asunto de la imterfaz lo tengo resuelto con el delphi 2009, me permite escribir captions en chino.

Ahora el problema es con la Base de datos utilizo Firebird, y no he podido almacenar correctamente este tipo de letras, e definido el charset=UTF8, Big5, ChineseBig5, etc.... pero al hacer el commit solo me muestra signos de interrogacion, alguien me puede ayudar?
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes
Responder Con Cita
  #2  
Antiguo 01-04-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Piensa que esta definición la tienes que hacer en dos sitios. Primero en la base de datos, al crearla, y después en el componente Delphi que utilices para conectarte a Firebird.

Asegúrate de que tu base de datos tiene los campos con charset unicode (UTF8). Posiblemente tengas que volver a crear la base de datos, con IB-Expert es muy sencillo hacerlo, vas a Tools -> Extract Metadata, y le indicas de hacer un Script con todos tus objetos y datos.

Eso te va a generar un archivo de Script para regenerar la base de datos, una de las primeras instrucciones es el CREATE DATABASE, allí asegúrate de modificar el DEFAULT CHARACTER SET para que los campos de texto se creen con Unicode.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 01-04-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
Unhappy Otra cuestion...

Gracias por tu pronta respuesta... ya he podido almacenarlos en la base de datos.... ahora mi problema es a la hora de tratar de recuperar los datos de la misma.... utilizo los componentes de InterBase que vienen con el delphi 2009, (InterBase Express 12.12), y cuando abro una consulta select en el IBDataSet, IBQuery o IBTable, me da un error que dice 'Division by Zero'; esto solo pasa con estos tres componentes, si utilizo el IBSQL me recupera bien los valores de los campos (respetando los caracteres chinos). pero como sabes este IBSQL, no permite desplazarte con un .First, .Last, .Prior, ni asignarlo como Dataset a un DataSource para ponerlo en una Grid...

estoy intentando recuperarlos con los DBExpress, pero resulta que los Dataset de este son Unidireccional (por ende tampoco puedo ver los datos en una rejilla). Podiras ayudarme al respecto?

P.D. el 'Division by zero' solo me lo da cuando jalo los campos VarChar usando el UTF8, si jalo solo campos numericos o de otro tipo, no hay problema
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes
Responder Con Cita
  #4  
Antiguo 01-04-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Lamentablemente no conozco los IBExpress, pero utilizar dbExpress es muy sencillo (por eso lo utilizo en bastantes programas).

Como bien dices no puedes conectar directamente una grid a un SQLQuery, para hacerlo necesitas poner un ClientDataset de intermediario. NOTA: Necesitas también un DatasetProvider para actuar de intermediario entre el SQLQuery y el ClientDataset. Ambos componentes se encuentran en la pestaña "Data Access".

En definitiva el SQLQuery no hace más que leer los datos de la base de datos.

Se añade un DatasetProvider para poder pasar esos datos a un ClientDataset.

Finalmente se añade un ClientDataset que mantiene esos datos en memoria, por lo que puede hacer movimientos .Next, .Prior, .etc. ..., y por lo tanto se puede conectar a la Grid.

Es un poco engorroso puesto que tienes que añadir dos componentes más de lo normal, pero es muy útil, y al final tienes los datos en un ClientDataset que es un componente fantástico, y tiene muchas opciones para manejar tus datos en memoria (aplicar filtros, mantener campos de agregado, etc. ...).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 01-04-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
Talking Excelente!

Muchas gracias!!! ha sido una excelente solucion... lo he realizado como me comentas y funciona del uno... probablemente mas adelante te moleste de nuevo, pero de momento ya quedo... dejo mi codigo de conexion por si a alguien le sirve de algo:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
With Cnn.Params do
  begin
  Add('DriverName=Interbase');
  Add('Database=C:\CHINOFUNCA.NEW');
  Add('RoleName=RoleName');
  Add('User_Name=sysdba');
  Add('Password=masterkey');
  Add('ServerCharSet=UTF8');
  Add('SQLDialect=3');
  Add('ErrorResourceFile=');
  Add('LocaleCode=0000');
  Add('BlobSize=-1');
  Add('CommitRetain=False');
  Add('WaitOnLocks=True');
  Add('Interbase TransIsolation=ReadCommited');
  Add('Trim Char=False');
  end;
Cnn.Connected:=True;
DSet.SQLConnection:=Cnn;
DSet.CommandText:='Select * From New_Table';
DSet.Active:=True;
DSPrvdr.DataSet:=DSet;
CDst.ProviderName:='DSPrvdr';
CDst.Active:=True;
DSrc.DataSet:=CDst;
DBGrid1.DataSource:=Dsrc;
end;

* Cnn: TSQLConnection.
* DSet: TSQLDataSet.
* DSPrvd: TDataSetProvider.
* CDst: TClientDataSet.
* DSrc: TDataSource.

Nueva mente Gracias!!!
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Caracteres chinos en aplicación Cmmv Varios 8 07-10-2010 13:20:40
Caracteres ilegibles al leer Bold (de texto) de firebird Yaco Conexión con bases de datos 3 26-11-2009 16:24:45
Uno de chinos FGarcia Humor 0 27-08-2008 17:51:12
De chinos... DarkByte Humor 0 17-05-2004 22:30:40
caracteres arabe y Firebird acertij022 Firebird e Interbase 4 28-11-2003 15:36:00


La franja horaria es GMT +2. Ahora son las 18:07:23.


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