Hallo,<br>
Die Aufgabe ist, eine Query-Komponente zu bauen, die sowohl den alten Zugriffsweg ueber die BDE als auch ADO und dbExpress unterstuetzt. Sinn ist es, einige alte Programme relativ einfach umstellen zu koennen.
Beim Bau der Komponente, seltsames Problem gestossen:<br>
Hier ein kleiner Ausschnitt aus der Klassendefinition:<pre>
TMyQuery = class
constructor Create(Owner: TComponent);
destructor Free;
private
FOwner: TComponent;
FRequestLive: Boolean;
FParams: TEASParams;
Test: Boolean; <---- siehe Beschreibung
FQuery: TQuery;
FADOQuery: TADOQuery;
{...}
</pre>
Die Komponente stellt alle wichtigen Methoden und Eigenschaften des alten (BDE-) Queries zur Verfuegung und bastetlt diese dann entsprechend fuer ADO/dbExpress um. Das funktionierte auch schon ganz gut, bis ich in meine Testabfrage einen Parameter eingebaut habe. Dann war seltsamerweise mein lokales FQuery irgendwann mal kaputt! Durch einiges Rumprobieren bin ich dahintergekommen, dass das nicht passiert, wenn ich in der Deklaration davor eine beliebite Variable schreibe (hier Test). Wenn ich die Reihenfolge des lokalen FQuerys und des FADOQuery tausche, geht ADO nicht mehr, dafuer aber dann BDE.<br>
Das sieht doch ganz danach aus, als ob FParams (steht unmittelbar davor) irgendwie die nachfolgende Variable ueberbuegelt. Das sind doch alles nur irengdwelche Pointer, die irgendwohin zeigen. Kann es sein, dass der Pointer von FParams zu kurz ist?!? Ich habe ja schon viele Klassen gebaut aber so ein Problem ist mir noch nie untergekommen. Auch meine Kollegen haben keinerlei Idee, woran das liegen kann. Ich konnte das Problem mit Delphi 7 und auch Delphi 5 gleichermassen nachvollziehen.
Die Aufgabe ist, eine Query-Komponente zu bauen, die sowohl den alten Zugriffsweg ueber die BDE als auch ADO und dbExpress unterstuetzt. Sinn ist es, einige alte Programme relativ einfach umstellen zu koennen.
Beim Bau der Komponente, seltsames Problem gestossen:<br>
Hier ein kleiner Ausschnitt aus der Klassendefinition:<pre>
TMyQuery = class
constructor Create(Owner: TComponent);
destructor Free;
private
FOwner: TComponent;
FRequestLive: Boolean;
FParams: TEASParams;
Test: Boolean; <---- siehe Beschreibung
FQuery: TQuery;
FADOQuery: TADOQuery;
{...}
</pre>
Die Komponente stellt alle wichtigen Methoden und Eigenschaften des alten (BDE-) Queries zur Verfuegung und bastetlt diese dann entsprechend fuer ADO/dbExpress um. Das funktionierte auch schon ganz gut, bis ich in meine Testabfrage einen Parameter eingebaut habe. Dann war seltsamerweise mein lokales FQuery irgendwann mal kaputt! Durch einiges Rumprobieren bin ich dahintergekommen, dass das nicht passiert, wenn ich in der Deklaration davor eine beliebite Variable schreibe (hier Test). Wenn ich die Reihenfolge des lokalen FQuerys und des FADOQuery tausche, geht ADO nicht mehr, dafuer aber dann BDE.<br>
Das sieht doch ganz danach aus, als ob FParams (steht unmittelbar davor) irgendwie die nachfolgende Variable ueberbuegelt. Das sind doch alles nur irengdwelche Pointer, die irgendwohin zeigen. Kann es sein, dass der Pointer von FParams zu kurz ist?!? Ich habe ja schon viele Klassen gebaut aber so ein Problem ist mir noch nie untergekommen. Auch meine Kollegen haben keinerlei Idee, woran das liegen kann. Ich konnte das Problem mit Delphi 7 und auch Delphi 5 gleichermassen nachvollziehen.
Comment