Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bug und Fix in der IBX bei Zugriff auf Firebird Datenbank (https://www.delphipraxis.net/137270-bug-und-fix-der-ibx-bei-zugriff-auf-firebird-datenbank.html)

Alphacodex 17. Jul 2009 13:26

Datenbank: Firebird • Version: 2.5 • Zugriff über: Interbase

Bug und Fix in der IBX bei Zugriff auf Firebird Datenbank
 
Hallo,


bei meinen unendlichen Suchen im Netz bin ich auf was interessantes gestossen. In den bei Delphi mitgelieferten IBX Komponenten gibt es einen Bug, wenn man versucht auf Datenbanken zuzugreifen, die von der COLLATE Eigenschaft Gebrauch machen.

Der Bug zeigt sich, wenn man versucht, die Active-Eigeschaft einer DataSet Komponente auf true zu stellen als "Division durch 0 Fehler"


Die User haben aber auch einen möglichen Fix für das Problem gefunden. In der Unit IBSQL.pas aus den IBX Komponenten muss folgende Funktion korrigiert werden:
Delphi-Quellcode:
// Original Function
// 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;

// Fixed Function
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, 4 : Result := 3;
    59 : Result := 4;
    else
      Result := 0;
  end;
end;
Ich würde das gerne mal ausprobieren, brauche aber noch einen Tip, wie ich die Unit kompiliert kriege, so dass ich die Original dcu im Programmverzeichnis überschreiben kann.


Grüße
Codex

Alphacodex 18. Jul 2009 00:00

Re: Bug und Fix in der IBX bei Zugriff auf Firebird Datenban
 
So Hallo nochmal,

ich hab es selbst gelöst. Ich musste den Code nochmal leicht anpassen und in ein Dummy-Projekt importieren. Die kompilierte .dcu habe ich dann wieder ins Programmverzeichnis von Delphi (/lib/irgendwas) kopiert.

Voila - keine Division by Zero Fehler mehr. Datenbank läuft endlich - das war der Haupt-Fehler der alles aufhielt...


Hier nochmal der veränderte Code in der unit IBSQL (IBX Komponente)


Delphi-Quellcode:


// Original Function
// 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;

// Fixed Function
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;


Grüße
Codex

schnickers 3. Sep 2010 11:00

AW: Bug und Fix in der IBX bei Zugriff auf Firebird Datenbank
 
Ich bekomme seit einer Umstellung der Interbase-Anbindung den gleichen Fehler.
Ich habe bisher folgendes Versucht:
  • Erstellen eines Neuen Projektes
  • In das Project die ibsq.pas (C:\Program Files (x86)\CodeGear\RAD Studio\6.0\source\Win32\IBX) eingefügt
  • Die ibsq.pas wie oben geändert
  • das Projekt Compiliert
  • die neue ibsql.dcu in das Verszeichnuss: C:\Program Files (x86)\CodeGear\RAD Studio\6.0\lib kopiert.
  • das eigentliche Interbase projekt geöffnet, compiliert etc.
  • Fehler bleibt

Ich verwende Delphi 2009.
In der Main-Form verwende ich:
  • TIBTransaction
  • IBDatabase
  • IBQuery

Hat wer eine Idee?
Vor der Umstellung Funktionierte noch alles. Ich gllaube es hatte was mit dem SQL Provider zu tun.

Gruß
Moritz


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz