1 из багов ZEOSDBO

Сегодня занимался обработкой вызовом хранимых процедур из MySQL. Как оказалось, ZEOS не корректно освобождал память при закрытии Датасета. Решение проблемы нашел здесь:
http://zeosbugs.firmos.at/view.php?id=235

В общем, вместо кода:

</p>

<p>procedure TZMySQLResultSet.Close;</p>

<p>begin</p>

<p>if FQueryHandle <> nil then</p>

<p>FPlainDriver.FreeResult(FQueryHandle);</p>

<p>FQueryHandle := nil;</p>

<p>FRowHandle := nil;</p>

<p>inherited Close;</p>

<p>end  

в юните ZDbcMySqlResultSet нужно поставить:

</p>

<p>procedure TZMySQLResultSet.Close; {Shkil}</p>

<p>var  QueryHandle: pointer;</p>

<p>begin  if  FQueryHandle<>  nil then</p>

<p>begin  while(FPlainDriver.RetrieveNextRowset(FHandle) = 0) do</p>

<p>begin</p>

<p>QueryHandle := FPlainDriver.StoreResult(FHandle);</p>

<p>if QueryHandle  nil then</p>

<p>begin  FPlainDriver.FreeResult(QueryHandle);</p>

<p>end;</p>

<p>end;</p>

<p>FPlainDriver.FreeResult(FQueryHandle);</p>

<p>end;</p>

<p>FQueryHandle := nil;</p>

<p>FRowHandle := nil;</p>

<p>inherited Close;</p>

<p>end;  

19.04.2011 · dogma · Комментариев нет
Метки: , ,  · Рубрики: delphi, dogma, mysql

Написать комментарий