Ik heb een DCOM server met o.a. 1 gewone DataModule en 1 RemoteDataModule.
Op de gewone DataModule zit de ADOConnection die verbinding maakt met een MSSQL server in de OnCreate van de DataModule.
Op de RemoteDataModule zit een ADOQuery en een DataSetProvider.
De gewone DataModule is auto-create en is er dus altijd. Er wordt dus ook maar 1 instansie van aangemaakt.
De RemoteDataModule wordt per verbinding (client) aangemaakt (ciMultiInstance, tmSingle). Dit werk allemaal zeer goed. Als alle clients de verbinding hebben verbroken, kun je de server perfect sluiten. Is er een client nog actief en je wilt de server sluiten dan krijg je een waarschuwing dat er nog active com-objecten zijn.
Kies je bij die waarschuwing ervoor om de server toch te sluiten dan volgt er een AV en een run-time error. De debugger weet niet waar deze plaats vind in de code en doormiddel van F7/F8 in Delphi tijdens debug kom je ook geen stap verder.
Het vreemde is ook dat je die error's alleen krijgt als een client een SELECT query heeft uitgevoerd in zijn sessie en deze client is bij het sluiten nog actief. Heeft de client niks gedaan (alleen verbinding gemaakt) of alleen UPDATE/INSERT/enz queries uitgevoerd en je sluit dan de server dan is er niks aan de hand.
In de Unit van de RemoteDataModule zit geen eigen code. Het gaat volgens mij mis nadat de OnDestroy event is geweest van de RemoteDataModule.
Hoe kan dit en hoe is dit op te lossen?
Op de gewone DataModule zit de ADOConnection die verbinding maakt met een MSSQL server in de OnCreate van de DataModule.
Op de RemoteDataModule zit een ADOQuery en een DataSetProvider.
De gewone DataModule is auto-create en is er dus altijd. Er wordt dus ook maar 1 instansie van aangemaakt.
De RemoteDataModule wordt per verbinding (client) aangemaakt (ciMultiInstance, tmSingle). Dit werk allemaal zeer goed. Als alle clients de verbinding hebben verbroken, kun je de server perfect sluiten. Is er een client nog actief en je wilt de server sluiten dan krijg je een waarschuwing dat er nog active com-objecten zijn.
Kies je bij die waarschuwing ervoor om de server toch te sluiten dan volgt er een AV en een run-time error. De debugger weet niet waar deze plaats vind in de code en doormiddel van F7/F8 in Delphi tijdens debug kom je ook geen stap verder.
Het vreemde is ook dat je die error's alleen krijgt als een client een SELECT query heeft uitgevoerd in zijn sessie en deze client is bij het sluiten nog actief. Heeft de client niks gedaan (alleen verbinding gemaakt) of alleen UPDATE/INSERT/enz queries uitgevoerd en je sluit dan de server dan is er niks aan de hand.
In de Unit van de RemoteDataModule zit geen eigen code. Het gaat volgens mij mis nadat de OnDestroy event is geweest van de RemoteDataModule.
Hoe kan dit en hoe is dit op te lossen?
"The shell stopped unexpectedly and Explorer.exe was restarted."