AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi XE4 IBSQL ändern und selber übersetzen

Delphi XE4 IBSQL ändern und selber übersetzen

Ein Thema von stalkingwolf · begonnen am 12. Jan 2021 · letzter Beitrag vom 12. Jan 2021
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
327 Beiträge
 
#1

Delphi XE4 IBSQL ändern und selber übersetzen

  Alt 12. Jan 2021, 12:03
Datenbank: Firebird • Version: 2.5.1 • Zugriff über: gds
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?

Geändert von stalkingwolf (12. Jan 2021 um 12:13 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.714 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Delphi XE4 IBSQL ändern und selber übersetzen

  Alt 12. Jan 2021, 12:36
IBX muss komplett neu erzeugt werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
510 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Delphi XE4 IBSQL ändern und selber übersetzen

  Alt 12. Jan 2021, 12:38
Ich nehme mal an, dass IBQuery eben nicht Deine Klasse erstellt sondern die die originale Klasse TIBSQL, dadurch wird Dein Code ja garnicht eingebunden.
Wenn Du den Source hast, dann mach es einfach da und dann compilierst Du die Pakete neu.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
327 Beiträge
 
#4

AW: Delphi XE4 IBSQL ändern und selber übersetzen

  Alt 12. Jan 2021, 13:30
Und wie mache ich das am besten?

Die IBX liegen unter ~\Embarcadero\RAD Studio\11.0\source\IBX

Ich habe die DCU Dateien aus ~\Embarcadero\RAD Studio\11.0\lib\win32\release rausgenommen und die .pas Dateien in einen neuen Suchpfad gepackt.
Dann meckert er das die DCU fehlen.

Ich habe gelesen das man ein neues Projekt aufmachen soll, dort alle IBX Units hinzufügt das das kompiliert?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.714 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Delphi XE4 IBSQL ändern und selber übersetzen

  Alt 12. Jan 2021, 13:43
Entweder das, oder dein Projket komplett neu erzeugen.
Markus Kinzler
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
327 Beiträge
 
#6

AW: Delphi XE4 IBSQL ändern und selber übersetzen

  Alt 12. Jan 2021, 13:51
letzteres will er nicht. Dann meckert der Compiler das die DCU in ~\FASTMM4\ fehlt.

Ok dann gehe ich das andere Problem mal an.
Da wir mehrere Rechner mit Delphi haben muss ich dort vermutlich überall lokal die DCU und PAS Dateien danach löschen oder?

EDIT : hat alles einwandfrei funktioniert.

Evtl wird es nun auch mal Zeit den "Zu wenig Arbeitsspeicher" in TIBDatset anzugehen.

Geändert von stalkingwolf (12. Jan 2021 um 15:22 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf