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)
-   -   D2009 no funcionan los componentes Interbase (https://www.clubdelphi.com/foros/showthread.php?t=73960)

Quim Herrera 26-05-2011 11:11:48

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

Casimiro Notevi 26-05-2011 11:52:15

Me extraña bastante, la verdad, aunque no puedo probarlo porque no tengo esa versión de Delphi.

Quim Herrera 26-05-2011 13:12:47

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

Casimiro Notevi 26-05-2011 13:30:04

Cita:

Empezado por Quim Herrera (Mensaje 401466)
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.

Quim Herrera 31-05-2011 10:54:41

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 :eek: (que miedo, no es ni beta) y ya me esta empezando a dar problemas. Pero esto es harina de otro hilo.

Saludos,

Casimiro Notevi 31-05-2011 11:16:35

Yo uso FIBplus, aunque cuestan un poquito.

Quim Herrera 31-05-2011 13:06:59

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

Casimiro Notevi 31-05-2011 13:14:41

Gracias por el aporte :)


La franja horaria es GMT +2. Ahora son las 16:30:14.

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