Попробуйте вместо этого (процедура Макса требует от вас перебрать весь набор данных, что нормально, если в нем много строк):
while (TblOrder.Locate('OrderID', Total, [])) do
TblOrder.Delete;
TDataSet.Locate возвращает логическое значение; если это правда, найденная запись становится активной, и вы можете удалить ее. Если он возвращает False (то есть запись не найдена), вызов Delete никогда не выполняется.
Кстати, проблема с вашим исходным кодом заключается в том, что вы проверяете на Eof
, но никогда не проверяете, находит ли Locate
запись; вы просто удаляете любую запись, а затем снова проверяете Eof
. Если вы не на Eof
, вы звоните Locate
, игнорируете, нашла ли запись запись и удаляете любую строку, в которой вы находитесь. Затем это повторяется снова и снова до тех пор, пока не останется больше записей, и в этот момент Eof
вернет true, и вы прервете цикл.