Niezwalnianie zasobów w raporcie przyczyną błędu?
Witam, mojej zabawy z symfonią ciąg dalszy. Tym razem jest to problem cięższego kalibru. Przy 3-cim wywołaniu raportu dla pojedynczego dokumentu lub zaznaczeniu 3 dokumentów program zawiesza się. Dla 2 dokumentów wszystko działa jak należy.
Cytuj:
String Plik_z_Haslem = KatalogFirmy() + "daneDostepowe.txt"
Int Numer_plik = Open Plik_z_Haslem For input
String UserName
String Password
Input # Numer_plik, UserName
Input # Numer_plik, Password
Buf = UserName //Przypisanie zawartości zmiennej Buf
Delete "\n" //Wykonanie polecenia Delete
UserName = Buf //Nadpisanie Username prawidłową wartością
Close Numer_plik //Zamknięcie pliku
int pozycjaWTabeli
string dataF
string kod
string seria
string nazwa
string plattermin
baseDK dk
dispatch dll
dispatch xNull
long lPoz = SetTaggedPos(FS)
while lPoz != 0
dk.GetRecById(GetLineId(lPoz))
dataF=dk.GetField("Data")
kod = dk.GetField("kod")
seria = dk.GetField("seria")
nazwa = dk.GetField("nazwa")
plattermin = dk.GetField("plattermin")
dll.Create("PragmaExporter.ExporterClass")
print dll.Method(2,UserName,Password,dataF,kod,seria,nazwa,plattermin,"abc")
lPoz = SetTaggedPos(NX)
wend
if dll then print "Obiekt istnieje "
dll=xNull
if dll then print "Obiekt dalej istnieje"
print Close
Otrzymuję komunikat "Server zajęty" a po kilku chwilach "Upłynął limit czasu operacji".
Załącznik:
bledy2.png [ 40.46 KiB | Przeglądany 2485 razy ]
Wywołana metoda nr 2 napisana w .NET zwraca stringa, więc raczej wina nie leży po jej stronie poza tym jest otoczona blokiem try-catch i wiedziałbym gdyby ona nawaliła. Dla 2 dokumentów raport printuje tego stringa a potem "Obiekt istnieje 1" czyli zasób obiektu dispatch dll jest zwolniony. Jak zwolnic obiekt baseDK? Przypisanie do nulla lub zera nic nie daje. Jeśli to nie ten obiekt to gdzie może być błąd? Dlaczego raport zawiesza symfonię akurat przy 3cim wystąpieniu?