Es gibt in der Delphi XE4 Version ein Speicherleck beim generieren des Cursors.
Ich habe damals dafür folgendes in unser Programm implementiert
Delphi-Quellcode:
TMYIBSQL = CLASS(TIBSQL)
PROCEDURE PatchIBSQLCursor(aIBSQL: TIBSQL);
constructor Create(AOwner: TComponent); override;
END;
Delphi-Quellcode:
PROCEDURE TMYIBSQL.PatchIBSQLCursor(aIBSQL: TIBSQL);
VAR
lNewCursorLen : Integer;
BEGIN
// The XE5 implementation of the cursor is wrong. It uses a PByte from a TBytes with a GUID, but
// the TBytes isn't 0-terminated. Once in a while there is some magic garbage after the GUID which
// makes FB return:
// SQL error code = -502
// Invalid cursor declaration
// Statement already has a cursor {9885A855-9659-484F-A7B6-442D778BAF52}¨¨Ð44+É.Œ assigned
// So, patch the cursor name to add a #0 at the end.
lNewCursorLen := Length(TMYIBSQL(aIBSQL).FCursor) + 1;
// Not yet initialized or already set
IF (lNewCursorLen = 1)
OR (TMYIBSQL(aIBSQL).FCursor[lNewCursorLen-2] = 0)
THEN Exit;
SetLength(TMYIBSQL(aIBSQL).FCursor, lNewCursorLen);
TMYIBSQL(aIBSQL).FCursor[lNewCursorLen-1] := 0;
END;
constructor TMYIBSQL.Create(AOwner: TComponent);
begin
inherited;
PatchIBSQLCursor(Self);
end;
funktioniert auch wenn ich anstatt TIBSQL dann TMYIBSQL nutzen.
Nur TIBQuery setzt weiterhin auf TIBSQL auf und es knallt ab und zu.
Ich würde nun gern TIBSQL den Patch unterjubeln, so dass auch TIBQuery korrekt läuft.
In Delphi 6 war das damals kein Problem. Quellcode der ibsql.pas in einen eigenen Suchpfad gesetzt und aus Delphi entfernt.
Die .dcu gelöscht und neu kompiliert. Nur das geht in XE4 nicht mehr.
Also was tun?
Edit : Fehler der kommt
[dcc32 Fataler Fehler] IBSQL.pas(486): F2051
Unit IBCustomDataSet wurde mit einer unterschiedlichen Version von IBSQL.TIBSQL compiliert
Kann man den Compilerfehler deaktivieren?