Hallo,
hab mal in ein sample-projekt ein wenig reingedebuggt. und tatsächlich rekursiert sich das ADS zu tode.
Er springt immer wieder in TAdsQuery.OpenAdvantageFiles.
Und zwar sehr zuverlässig
Er springt von OpenAdvantageFiles zuerst nach InternalExecute. Dann nach SetParamsFromCursor. Dort greift er auf... DataSet.FieldDefs zu und merkt anscheinend, dass er das initialisieren muss: TAdsDataSet.InitFieldDefs. und von dort ruft er dann... tadaaa! OpenAdvantageFiles auf.
und zwar aufgrund anscheinend einer validierung:
Delphi-Quellcode:
{ if the table is not active then open a temporary table handle }
{ otherwise get the active table handle }
if ( Active )
OR (
Handle <> INVALID_ACE_HANDLE )
then
begin
bTempHandle := False;
hHoldHandle := self.Handle;
end
else
begin
bTempHandle := True;
hHoldHandle := OpenAdvantageFiles;
//böse!
end;
Active ist halt false... und das
handle ist invalide. also hätte man offenbar das irgendwo vorher ändern sollen, kann das sein?
@hoika: ja, an dem häng ich grad dran wie die katze am pressack, wie man bei uns in bayern so schön sagt. ist im moment sozusagen closed source, es sei denn mackhack entscheidet sich zu was anderem.