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;
Категории: delphi, dogma, mysql
