Fejl ved luk af klientdatasæt
Mit program har en form der indeholder en journal. Forbindelsen til denne sker via et TClientDataSet som hænger på en provider og en TADOQuery. Det meste af indholdet i formen er konfigurerbart og oprettes "on-the-fly". Der oprettes frames, sendes beskedder rundt til dem osv. Der sker en hel del.Datasættet ligger på et TDataModule der oprettes i formens constructor og frigives i dens destructor. Altså egentlig lige ud ad landevejen.
... men jeg får en fejl når jeg forsøger at frigive DataModulet via formens OnDestroy (har også prøvet OnClose).
For at føje mere mystik til så sker det kun hvis programmet har åbnet et eksternt program, eksempelvis Adobe Reader - måske noget med OnExit på de byggeklodser der er oprettet i formen, men ingen af disse frigiver noget.
... nå men. Jeg kan spore fejlen så langt som til frigivelsen af et interface i DBClient:
var
Params: OleVariant;
RecsOut: Integer;
Options: TGetRecordOptions;
ChangesMade: LongBool;
begin
ChangesMade := True;
if Assigned(FDSBase) then
FDSBase.GetProp(dspropDATAHASCHANGED, @ChangesMade);
if (FileName <> '') and not (csDesigning in ComponentState) and
(ChangesMade or not(FileExists(FileName))) then
SaveToFile(FileName);
inherited CloseCursor;
if HasAppServer then
begin
if not (csDestroying in ComponentState) then
begin
if FMasterLink.Active and (FMasterLink.Fields.Count > 0) and
(PacketRecords = 0) then
Params := Null else
Params := Unassigned;
if not (doNoResetCall in FDSOptions) then
begin
Options := [grReset];
DoGetRecords(0, RecsOut, Byte(Options), '', Unassigned);
end;
FAppServer := nil;
end;
end
else if FSavePacketOnClose and (FileName = '') and (ProviderName = '') and
(FParentDataSet = nil) then
SaveDataPacket;
FDSBase := nil; Det er her det går galt
FCloneSource := nil;
FParentDataSet := nil;
SetAltRecBuffers(nil, nil, nil);
end;
Der er to varianter af programmet og de giver konsekvent en null pointer assignment
Er der nogen der kan hjælpe mig videre?