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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-05-2011
Quim Herrera Quim Herrera is offline
Miembro
 
Registrado: may 2004
Posts: 33
Poder: 0
Quim Herrera Va por buen camino
D2009 no funcionan los componentes Interbase

Hola compañeros,

Tengo un problema en Delphi 2009 (uno más): los componentes Interbase no funcionan con collate en español

En Firebird 2.5, en una base de datos creada con character set ISO8859_1, creo una tabla:

Código SQL [-]
create table PRUEBA
 (  CODIGO    int default 0 not null , 
    NOMBRE    varchar( 50 ) not null  collate ES_ES_CI_AI 
 CONSTRAINT pk_PRUEBA PRIMARY KEY ( CODIGO )
 );

En Delphi2009 , utilizo un TIBDatabase, y un TIBTransaction
Conecto tIBDatabase con lc_ctype=ISO8859_1

Abro la tabla con TIBTable y da error Division by zero

con un TIBquery:
select * from PRUEBA da error Division by zero
select codigo from PRUEBA funciona bien
select nombre from PRUEBA da error Division by zero

Parece ser que el problema es del collate ES_ES_CI_AI del campo ya que si creo una tabla sin el collate, funciona bien.

El mismo programa, en delphi 7, funciona sin problemas (maldito el día que decidi migrar a D2009!).

¿Alguien sabe como podria solucionarlo?

El tema es grave ya que me es imposible trabajar sin las ordenaciones en español y si no logro solucionarlo tendré que buscar otros componentes y cambiar las aplicaciones.

Gracias de antemano,

Quim Herrera

Última edición por Casimiro Notevi fecha: 26-05-2011 a las 11:52:39.
Responder Con Cita
  #2  
Antiguo 26-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Me extraña bastante, la verdad, aunque no puedo probarlo porque no tengo esa versión de Delphi.
Responder Con Cita
  #3  
Antiguo 26-05-2011
Quim Herrera Quim Herrera is offline
Miembro
 
Registrado: may 2004
Posts: 33
Poder: 0
Quim Herrera Va por buen camino
Pues parece que habra que irse olvidando de los componentes Interbase. Acabo de encontrar esto:
https://forums.embarcadero.com/messa...essageID=43388
Codegear ya no los soporta oficialmente.

Aunque tampoco es una garantia que los soporte: Delphi 2009 esta lleno de bugs que hay que resolver con parches de terceros.

Si no hay nadie que sepa y pueda solicionarlo habra que buscarse la vida con otros componentes.

Saludos,

Quim Herrera
Responder Con Cita
  #4  
Antiguo 26-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Quim Herrera Ver Mensaje
Codegear ya no los soporta oficialmente.
Nunca ha soportado Firebird, eso no es nuevo , por eso siempre hemos dicho que "normalmente" no tendrás problemas con ellos (IBX), pero habrá cositas que no funcionarán, tú has encontrado una de ellas.
Responder Con Cita
  #5  
Antiguo 31-05-2011
Quim Herrera Quim Herrera is offline
Miembro
 
Registrado: may 2004
Posts: 33
Poder: 0
Quim Herrera Va por buen camino
Pues, que quieres que te diga, la cosita que no funciona es justamente la ordenación. Al dar error con los campos que tienen algún colate definido (colate ES_ES y colate ES_ES_CI_AI ) te obliga a no definirlos con colate y por tanto te ordena primero las mayúsculas, despues las minusculas, luego la eñes i después los acentos.

Para mi es suficientemente importante como para descartar los componentes Interbase.

No sé si hay otra forma de ordenar correctamente en un idioma no inglés y que lo admitan estos componentes en Delphi 2009. Lo he buscado y no he encontrado nada.

Tendré que pasarme a Zeos pero con Delphi 2009 sólo funciona Zeos 7 alfa (que miedo, no es ni beta) y ya me esta empezando a dar problemas. Pero esto es harina de otro hilo.

Saludos,
Responder Con Cita
  #6  
Antiguo 31-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo uso FIBplus, aunque cuestan un poquito.
Responder Con Cita
  #7  
Antiguo 31-05-2011
Quim Herrera Quim Herrera is offline
Miembro
 
Registrado: may 2004
Posts: 33
Poder: 0
Quim Herrera Va por buen camino
Gracias Casimiro, les echaré una ojeada. De todos modos acabo de encontrar la solución:

http://qc.embarcadero.com/wc/qcmain.aspx?d=68103

Lo reexplico porque me ha dada algún problema:

Hay que modificar IBSQL.pas (C:\Archivos de programa\CodeGear\RAD Studio\6.0\source\Win32\IBX)
Cambiar:
Código Delphi [-]
function TIBXSQLVAR.GetCharsetSize: Integer;
begin
 case SQLVar.SQLSubtype of
    0, 1, 2, 10, 11, 12, 13, 14, 19, 21, 22, 39,
    45, 46, 47, 50, 51, 52, 53, 54, 55, 58 :  Result := 1;
    5, 6, 8, 44, 56, 57, 64 : Result := 2;
    3 : Result := 3;
    59 : Result := 4;
    else
      Result := 0;
  end;  
end;
por:

Código Delphi [-]
function TIBXSQLVAR.GetCharsetSize: Integer;
begin
  case SQLVar.SQLSubtype and $FF of 
    0, 1, 2, 10, 11, 12, 13, 14, 19, 21, 22, 39,
    45, 46, 47, 50, 51, 52, 53, 54, 55, 58 :  Result := 1;
    5, 6, 8, 44, 56, 57, 64 : Result := 2;
    3 : Result := 3;
    4, 59 : Result := 4; 
  else
   Result := 0;
 end;
end;

Guardar el siguiente código como ibxpress120.dpk: (C:\Archivos de programa\CodeGear\RAD Studio\6.0\source\Win32\IBX)


Código Delphi [-]
package ibxpress120;
  
  {$R *.res}
  {$ALIGN 8}
  {$ASSERTIONS ON}
  {$BOOLEVAL OFF}
  {$DEBUGINFO ON}
  {$EXTENDEDSYNTAX ON}
  {$IMPORTEDDATA ON}
  {$IOCHECKS ON}
  {$LOCALSYMBOLS ON}
  {$LONGSTRINGS ON}
  {$OPENSTRINGS ON}
  {$OPTIMIZATION ON}
  {$OVERFLOWCHECKS OFF}
  {$RANGECHECKS OFF}
  {$REFERENCEINFO OFF}
  {$SAFEDIVIDE OFF}
  {$STACKFRAMES OFF}
  {$TYPEDADDRESS OFF}
  {$VARSTRINGCHECKS ON}
  {$WRITEABLECONST OFF}
  {$MINENUMSIZE 1}
  {$IMAGEBASE $400000}
  {$IMPLICITBUILD ON}
  
  requires
    rtl,
    vcl,
    dbrtl;
  
  contains
    IB in 'IB.pas',
    IBBatchMove in 'IBBatchMove.pas',
    IBBlob in 'IBBlob.pas',
    IBConnectionBroker in 'IBConnectionBroker.pas',
    IBCustomDataSet in 'IBCustomDataSet.pas',
    IBDatabase in 'IBDatabase.pas',
    IBDatabaseInfo in 'IBDatabaseInfo.pas',
    IBDatabaseINI in 'IBDatabaseINI.pas',
    IBErrorCodes in 'IBErrorCodes.pas',
    IBEvents in 'IBEvents.pas',
    IBExternals in 'IBExternals.pas',
    IBExtract in 'IBExtract.pas',
    IBHeader in 'IBHeader.pas',
    IBInstall in 'IBInstall.pas',
    IBInstallHeader in 'IBInstallHeader.pas',
    IBIntf in 'IBIntf.pas',
    IBQuery in 'IBQuery.pas',
    IBScript in 'IBScript.pas',
    IBServices in 'IBServices.pas',
    IBSQL in 'IBSQL.pas',
    IBSQLMonitor in 'IBSQLMonitor.pas',
    IBStoredProc in 'IBStoredProc.pas',
    IBTable in 'IBTable.pas',
    IBUpdateSQL in 'IBUpdateSQL.pas',
    IBUtils in 'IBUtils.pas',
    IBVisualConst in 'IBVisualConst.pas',
    IBXConst in 'IBXConst.pas';
  end.

Desinstalar IBexpress ( Component -> Install Packages -> Remove)

Abrir ibxpress120.dpk: (C:\Archivos de programa\CodeGear\RAD Studio\6.0\source\Win32\IBX)

Compilar. Da un warning: hay que decirle que lo ignore porque si lo arregla luego da errores.

Instalar. También hay que ignorar el warning.

y ya funciona.

También funciona el método "bruto": copiar IBSQL.pas modificado en la carpeta del proyecto (pero hay que hacerlo en todos los proyectos).

Saludos,
Quim Herrera
Responder Con Cita
  #8  
Antiguo 31-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Gracias por el aporte
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
decisionCube D2009 ofillia Conexión con bases de datos 0 31-03-2009 20:28:39
Problema con UDF de Interbase y D2009 Efren2006 SQL 0 16-02-2009 01:36:38
Hints en D2009 JF Sebastian OOP 1 02-01-2009 09:46:28
No funcionan componentes TSelectOnRuntime cuando estan controles dentro de un panel gulder API de Windows 6 11-08-2006 09:58:50
Cambio ordenador, componentes no funcionan javiermorales OOP 4 10-11-2004 11:05:47


La franja horaria es GMT +2. Ahora son las 02:49:54.


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